summaryrefslogtreecommitdiffstats
path: root/dom/base/test/test_find_bug1601118.html
diff options
context:
space:
mode:
Diffstat (limited to 'dom/base/test/test_find_bug1601118.html')
-rw-r--r--dom/base/test/test_find_bug1601118.html61
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>