| Index: third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/ranges/Range-cloneRange.html
|
| diff --git a/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/ranges/Range-cloneRange.html b/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/ranges/Range-cloneRange.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..571f87ef085d09c761f565c69f62af8cde4cfb2b
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/ranges/Range-cloneRange.html
|
| @@ -0,0 +1,112 @@
|
| +<!doctype html>
|
| +<title>Range.cloneRange() and document.createRange() tests</title>
|
| +<link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name>
|
| +<meta name=timeout content=long>
|
| +<div id=log></div>
|
| +<script src=../../../../resources/testharness.js></script>
|
| +<script src=../../../../resources/testharnessreport.js></script>
|
| +<script src=../common.js></script>
|
| +<script>
|
| +"use strict";
|
| +
|
| +function testCloneRange(rangeEndpoints) {
|
| + var range;
|
| + if (rangeEndpoints == "detached") {
|
| + range = document.createRange();
|
| + range.detach();
|
| + var clonedRange = range.cloneRange();
|
| + assert_equals(clonedRange.startContainer, range.startContainer,
|
| + "startContainers must be equal after cloneRange()");
|
| + assert_equals(clonedRange.startOffset, range.startOffset,
|
| + "startOffsets must be equal after cloneRange()");
|
| + assert_equals(clonedRange.endContainer, range.endContainer,
|
| + "endContainers must be equal after cloneRange()");
|
| + assert_equals(clonedRange.endOffset, range.endOffset,
|
| + "endOffsets must be equal after cloneRange()");
|
| + return;
|
| + }
|
| +
|
| + // Have to account for Ranges involving Documents! We could just create
|
| + // the Range from the current document unconditionally, but some browsers
|
| + // (WebKit) don't implement setStart() and setEnd() per spec and will throw
|
| + // spurious exceptions at the time of this writing. No need to mask other
|
| + // bugs.
|
| + var ownerDoc = rangeEndpoints[0].nodeType == Node.DOCUMENT_NODE
|
| + ? rangeEndpoints[0]
|
| + : rangeEndpoints[0].ownerDocument;
|
| + range = ownerDoc.createRange();
|
| + // Here we throw in some createRange() tests, because why not. Have to
|
| + // test it someplace.
|
| + assert_equals(range.startContainer, ownerDoc,
|
| + "doc.createRange() must create Range whose startContainer is doc");
|
| + assert_equals(range.endContainer, ownerDoc,
|
| + "doc.createRange() must create Range whose endContainer is doc");
|
| + assert_equals(range.startOffset, 0,
|
| + "doc.createRange() must create Range whose startOffset is 0");
|
| + assert_equals(range.endOffset, 0,
|
| + "doc.createRange() must create Range whose endOffset is 0");
|
| +
|
| + range.setStart(rangeEndpoints[0], rangeEndpoints[1]);
|
| + range.setEnd(rangeEndpoints[2], rangeEndpoints[3]);
|
| +
|
| + // Make sure we bail out now if setStart or setEnd are buggy, so it doesn't
|
| + // create misleading failures later.
|
| + assert_equals(range.startContainer, rangeEndpoints[0],
|
| + "Sanity check on setStart()");
|
| + assert_equals(range.startOffset, rangeEndpoints[1],
|
| + "Sanity check on setStart()");
|
| + assert_equals(range.endContainer, rangeEndpoints[2],
|
| + "Sanity check on setEnd()");
|
| + assert_equals(range.endOffset, rangeEndpoints[3],
|
| + "Sanity check on setEnd()");
|
| +
|
| + var clonedRange = range.cloneRange();
|
| +
|
| + assert_equals(clonedRange.startContainer, range.startContainer,
|
| + "startContainers must be equal after cloneRange()");
|
| + assert_equals(clonedRange.startOffset, range.startOffset,
|
| + "startOffsets must be equal after cloneRange()");
|
| + assert_equals(clonedRange.endContainer, range.endContainer,
|
| + "endContainers must be equal after cloneRange()");
|
| + assert_equals(clonedRange.endOffset, range.endOffset,
|
| + "endOffsets must be equal after cloneRange()");
|
| +
|
| + // Make sure that modifying one doesn't affect the other.
|
| + var testNode1 = ownerDoc.createTextNode("testing");
|
| + var testNode2 = ownerDoc.createTextNode("testing with different length");
|
| +
|
| + range.setStart(testNode1, 1);
|
| + range.setEnd(testNode1, 2);
|
| + assert_equals(clonedRange.startContainer, rangeEndpoints[0],
|
| + "Modifying a Range must not modify its clone's startContainer");
|
| + assert_equals(clonedRange.startOffset, rangeEndpoints[1],
|
| + "Modifying a Range must not modify its clone's startOffset");
|
| + assert_equals(clonedRange.endContainer, rangeEndpoints[2],
|
| + "Modifying a Range must not modify its clone's endContainer");
|
| + assert_equals(clonedRange.endOffset, rangeEndpoints[3],
|
| + "Modifying a Range must not modify its clone's endOffset");
|
| +
|
| + clonedRange.setStart(testNode2, 3);
|
| + clonedRange.setStart(testNode2, 4);
|
| +
|
| + assert_equals(range.startContainer, testNode1,
|
| + "Modifying a clone must not modify the original Range's startContainer");
|
| + assert_equals(range.startOffset, 1,
|
| + "Modifying a clone must not modify the original Range's startOffset");
|
| + assert_equals(range.endContainer, testNode1,
|
| + "Modifying a clone must not modify the original Range's endContainer");
|
| + assert_equals(range.endOffset, 2,
|
| + "Modifying a clone must not modify the original Range's endOffset");
|
| +}
|
| +
|
| +var tests = [];
|
| +for (var i = 0; i < testRanges.length; i++) {
|
| + tests.push([
|
| + "Range " + i + " " + testRanges[i],
|
| + eval(testRanges[i])
|
| + ]);
|
| +}
|
| +generate_tests(testCloneRange, tests);
|
| +
|
| +testDiv.style.display = "none";
|
| +</script>
|
|
|