diff options
Diffstat (limited to 'dom/base/test/test_find_bug1601118.html')
-rw-r--r-- | dom/base/test/test_find_bug1601118.html | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/dom/base/test/test_find_bug1601118.html b/dom/base/test/test_find_bug1601118.html new file mode 100644 index 0000000000..de4604bc45 --- /dev/null +++ b/dom/base/test/test_find_bug1601118.html @@ -0,0 +1,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> |