<!doctype>
<html>
  <head>
    <script src="../../resources/js-test-pre.js"></script>
  </head>
  <body>
    <p id="description"></p>
    <div id="console"></div>
    <div id="textContent"></div>
    <script>
      if (window.testRunner)
          testRunner.dumpAsText();

      // Put text content on the page with 2^16 'a' characters.
      textContent.append(document.createTextNode('a'.repeat(2**15)));
      textContent.append(document.createTextNode('a'.repeat(2**15)));
      shouldBe("textContent.innerText.length", "2**16");

      // Verify that find fails if no match is found.
      window.getSelection().removeAllRanges();
      shouldBeFalse("window.find('b')");

      // Verify that find succeeds for a small string.
      window.getSelection().removeAllRanges();
      shouldBeTrue("window.find('a'.repeat(2**5))");

      // Verify that find succeeds just below the limit.
      window.getSelection().removeAllRanges();
      shouldBeTrue("window.find('a'.repeat(2**16 - 1))");

      // Verify that find fails when reaching WebKit's hardcoded limit.
      window.getSelection().removeAllRanges();
      shouldBeFalse("window.find('a'.repeat(2**16))");

      // Verify that very long string does not cause out-of-memory crash.
      window.getSelection().removeAllRanges();
      shouldBeFalse("window.find('a'.repeat(2**30))");
      document.body.removeChild(textContent);
    </script>
    <script src="../../resources/js-test-post.js"></script>
  </body>
</html>
