Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

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