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