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>
|