summaryrefslogtreecommitdiffstats
path: root/dom/base/test/test_find_bug1601118.html
blob: de4604bc45269a5416ca03e345218dbd304b0ab3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<!doctype html>
<meta charset="utf-8">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="container">
  Fission <br/>
  Some text <br/>
  Some more text Fission or Fission or even <span>Fi</span>ssion<br/>
  Fission <br/>
  more text<br/>
  <div>
    in a nested block Fission stuff
  </div>
</div>
<script>
const kContainer = document.getElementById("container");
const kExpectedCount = 6;

// We expect surroundContents() to throw in the <span>Fi</span>ssion case.
const kExpectedThrewCount = 1;

// Keep a hang of the original DOM so as to test forwards and backwards navigation.
const kContainerClone = kContainer.cloneNode(true);

function advance(backwards) {
  if (!window.find("Fiss", /* caseSensitive = */ true, backwards))
    return { success: false };

  let threw = false;
  try {
    window.getSelection().getRangeAt(0).surroundContents(document.createElement("mark"));
  } catch (ex) {
    threw = true;
  }

  // Sanity-check
  assert_equals(window.getSelection().toString(), "Fiss");
  return { success: true, threw };
}

function runTestForDirection(backwards) {
  let threwCount = 0;
  for (let i = 0; i < kExpectedCount; ++i) {
    let result = advance(backwards);
    assert_true(result.success, `Should've successfully advanced (${i} / ${kExpectedCount}, backwards: ${backwards})`);
    if (result.threw)
      threwCount++;
  }
  assert_false(advance(backwards).success, `Should've had exactly ${kExpectedCount} matches`);
  assert_equals(threwCount, kExpectedThrewCount, "Should've thrown the expected number of times");
  assert_equals(kContainer.querySelectorAll("mark").length, kExpectedCount - threwCount, "Should've created the expected number of marks");
  assert_false(!!kContainer.querySelector("mark mark"), "Shouldn't have created nested marks");
}

test(function() {
  runTestForDirection(false);
  window.getSelection().removeAllRanges();
  kContainer.innerHTML = kContainerClone.innerHTML;
  runTestForDirection(true);
}, "window.find() while marking with surroundContents");
</script>