61 lines
2 KiB
HTML
61 lines
2 KiB
HTML
<!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>
|