| OLD | NEW |
| (Empty) |
| 1 <!doctype html> | |
| 2 <title>Range.cloneRange() and document.createRange() tests</title> | |
| 3 <link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name> | |
| 4 <meta name=timeout content=long> | |
| 5 <div id=log></div> | |
| 6 <script src=../../../../resources/testharness.js></script> | |
| 7 <script src=../../../../resources/testharnessreport.js></script> | |
| 8 <script src=../common.js></script> | |
| 9 <script> | |
| 10 "use strict"; | |
| 11 | |
| 12 function testCloneRange(rangeEndpoints) { | |
| 13 var range; | |
| 14 if (rangeEndpoints == "detached") { | |
| 15 range = document.createRange(); | |
| 16 range.detach(); | |
| 17 var clonedRange = range.cloneRange(); | |
| 18 assert_equals(clonedRange.startContainer, range.startContainer, | |
| 19 "startContainers must be equal after cloneRange()"); | |
| 20 assert_equals(clonedRange.startOffset, range.startOffset, | |
| 21 "startOffsets must be equal after cloneRange()"); | |
| 22 assert_equals(clonedRange.endContainer, range.endContainer, | |
| 23 "endContainers must be equal after cloneRange()"); | |
| 24 assert_equals(clonedRange.endOffset, range.endOffset, | |
| 25 "endOffsets must be equal after cloneRange()"); | |
| 26 return; | |
| 27 } | |
| 28 | |
| 29 // Have to account for Ranges involving Documents! We could just create | |
| 30 // the Range from the current document unconditionally, but some browsers | |
| 31 // (WebKit) don't implement setStart() and setEnd() per spec and will throw | |
| 32 // spurious exceptions at the time of this writing. No need to mask other | |
| 33 // bugs. | |
| 34 var ownerDoc = rangeEndpoints[0].nodeType == Node.DOCUMENT_NODE | |
| 35 ? rangeEndpoints[0] | |
| 36 : rangeEndpoints[0].ownerDocument; | |
| 37 range = ownerDoc.createRange(); | |
| 38 // Here we throw in some createRange() tests, because why not. Have to | |
| 39 // test it someplace. | |
| 40 assert_equals(range.startContainer, ownerDoc, | |
| 41 "doc.createRange() must create Range whose startContainer is doc"); | |
| 42 assert_equals(range.endContainer, ownerDoc, | |
| 43 "doc.createRange() must create Range whose endContainer is doc"); | |
| 44 assert_equals(range.startOffset, 0, | |
| 45 "doc.createRange() must create Range whose startOffset is 0"); | |
| 46 assert_equals(range.endOffset, 0, | |
| 47 "doc.createRange() must create Range whose endOffset is 0"); | |
| 48 | |
| 49 range.setStart(rangeEndpoints[0], rangeEndpoints[1]); | |
| 50 range.setEnd(rangeEndpoints[2], rangeEndpoints[3]); | |
| 51 | |
| 52 // Make sure we bail out now if setStart or setEnd are buggy, so it doesn't | |
| 53 // create misleading failures later. | |
| 54 assert_equals(range.startContainer, rangeEndpoints[0], | |
| 55 "Sanity check on setStart()"); | |
| 56 assert_equals(range.startOffset, rangeEndpoints[1], | |
| 57 "Sanity check on setStart()"); | |
| 58 assert_equals(range.endContainer, rangeEndpoints[2], | |
| 59 "Sanity check on setEnd()"); | |
| 60 assert_equals(range.endOffset, rangeEndpoints[3], | |
| 61 "Sanity check on setEnd()"); | |
| 62 | |
| 63 var clonedRange = range.cloneRange(); | |
| 64 | |
| 65 assert_equals(clonedRange.startContainer, range.startContainer, | |
| 66 "startContainers must be equal after cloneRange()"); | |
| 67 assert_equals(clonedRange.startOffset, range.startOffset, | |
| 68 "startOffsets must be equal after cloneRange()"); | |
| 69 assert_equals(clonedRange.endContainer, range.endContainer, | |
| 70 "endContainers must be equal after cloneRange()"); | |
| 71 assert_equals(clonedRange.endOffset, range.endOffset, | |
| 72 "endOffsets must be equal after cloneRange()"); | |
| 73 | |
| 74 // Make sure that modifying one doesn't affect the other. | |
| 75 var testNode1 = ownerDoc.createTextNode("testing"); | |
| 76 var testNode2 = ownerDoc.createTextNode("testing with different length"); | |
| 77 | |
| 78 range.setStart(testNode1, 1); | |
| 79 range.setEnd(testNode1, 2); | |
| 80 assert_equals(clonedRange.startContainer, rangeEndpoints[0], | |
| 81 "Modifying a Range must not modify its clone's startContainer"); | |
| 82 assert_equals(clonedRange.startOffset, rangeEndpoints[1], | |
| 83 "Modifying a Range must not modify its clone's startOffset"); | |
| 84 assert_equals(clonedRange.endContainer, rangeEndpoints[2], | |
| 85 "Modifying a Range must not modify its clone's endContainer"); | |
| 86 assert_equals(clonedRange.endOffset, rangeEndpoints[3], | |
| 87 "Modifying a Range must not modify its clone's endOffset"); | |
| 88 | |
| 89 clonedRange.setStart(testNode2, 3); | |
| 90 clonedRange.setStart(testNode2, 4); | |
| 91 | |
| 92 assert_equals(range.startContainer, testNode1, | |
| 93 "Modifying a clone must not modify the original Range's startContainer"); | |
| 94 assert_equals(range.startOffset, 1, | |
| 95 "Modifying a clone must not modify the original Range's startOffset"); | |
| 96 assert_equals(range.endContainer, testNode1, | |
| 97 "Modifying a clone must not modify the original Range's endContainer"); | |
| 98 assert_equals(range.endOffset, 2, | |
| 99 "Modifying a clone must not modify the original Range's endOffset"); | |
| 100 } | |
| 101 | |
| 102 var tests = []; | |
| 103 for (var i = 0; i < testRanges.length; i++) { | |
| 104 tests.push([ | |
| 105 "Range " + i + " " + testRanges[i], | |
| 106 eval(testRanges[i]) | |
| 107 ]); | |
| 108 } | |
| 109 generate_tests(testCloneRange, tests); | |
| 110 | |
| 111 testDiv.style.display = "none"; | |
| 112 </script> | |
| OLD | NEW |