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 |