|
1 <!DOCTYPE HTML> |
|
2 <html> |
|
3 <!-- NodeIterator mutation tests, 2. |
|
4 Originally part of WebKit, Mochi-ified by Zack Weinberg. |
|
5 This file based on node-iterator-00[...].html from |
|
6 http://svn.webkit.org/repository/webkit/trunk/LayoutTests/traversal/ |
|
7 --> |
|
8 <head> |
|
9 <title>DOM Traversal: NodeIterator: Mutations (2/x)</title> |
|
10 <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> |
|
11 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"> |
|
12 </head> |
|
13 <p id="display"></p> |
|
14 <div id="content" style="display: none"> |
|
15 </div> |
|
16 <pre id="test"> |
|
17 <script class="testbody" type="text/javascript"> |
|
18 function resetContent() { |
|
19 var content = $('content'); |
|
20 content.innerHTML = ('<span id="A"><\/span><span id="B"><\/span>' |
|
21 + '<span id="C"><\/span><span id="D"><\/span>' |
|
22 + '<span id="E"><\/span><span id="F"><\/span>' |
|
23 + '<span id="G"><\/span><span id="H"><\/span>' |
|
24 + '<span id="I"><\/span>'); |
|
25 return content; |
|
26 } |
|
27 |
|
28 function makeSpan(id) { |
|
29 var e = document.createElement('span'); |
|
30 e.id = id; |
|
31 return e; |
|
32 } |
|
33 |
|
34 function testNodeFilter(n) { |
|
35 if (n.tagName == 'SPAN') |
|
36 return NodeFilter.FILTER_ACCEPT; |
|
37 return NodeFilter.FILTER_SKIP; |
|
38 } |
|
39 |
|
40 function checkseq(it, root, expect) { |
|
41 var checkIt = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, |
|
42 testNodeFilter); |
|
43 var printedPointer = (it.referenceNode == undefined); |
|
44 var string = ''; |
|
45 var node; |
|
46 while ((node = checkIt.nextNode()) != null) { |
|
47 if (!printedPointer && it.referenceNode == node) { |
|
48 printedPointer = true; |
|
49 var s = '[' + node.id + '] '; |
|
50 if (it.pointerBeforeReferenceNode) |
|
51 string += "* " + s; |
|
52 else |
|
53 string += s + "* "; |
|
54 } else { |
|
55 string += node.id + " "; |
|
56 } |
|
57 } |
|
58 is(string.slice(0, -1), expect, "sequence check"); |
|
59 } |
|
60 |
|
61 // first a basic sanity check [node-iterator-001] |
|
62 (function(){ |
|
63 var root = resetContent(); |
|
64 var it = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, |
|
65 testNodeFilter); |
|
66 |
|
67 checkseq(it, root, 'A B C D E F G H I'); |
|
68 it.nextNode(); |
|
69 checkseq(it, root, '[A] * B C D E F G H I'); |
|
70 it.previousNode(); |
|
71 checkseq(it, root, '* [A] B C D E F G H I'); |
|
72 it.previousNode(); |
|
73 checkseq(it, root, '* [A] B C D E F G H I'); |
|
74 })(); |
|
75 |
|
76 // Mutations that should not move the iterator [node-iterator-002] |
|
77 (function(){ |
|
78 var root = resetContent(); |
|
79 var it = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, |
|
80 testNodeFilter); |
|
81 |
|
82 for (var i = 0; i < 4; i++) |
|
83 it.nextNode(); |
|
84 checkseq(it, root, 'A B C [D] * E F G H I'); |
|
85 |
|
86 root.removeChild($('E')); |
|
87 checkseq(it, root, 'A B C [D] * F G H I'); |
|
88 |
|
89 var X = makeSpan('X'); |
|
90 root.insertBefore(X, $('F')); |
|
91 checkseq(it, root, 'A B C [D] * X F G H I'); |
|
92 |
|
93 var I = $('I'); |
|
94 root.removeChild(I); |
|
95 root.insertBefore(I, X); |
|
96 checkseq(it, root, 'A B C [D] * I X F G H'); |
|
97 })(); |
|
98 |
|
99 // 002 complete |
|
100 |
|
101 /* Template |
|
102 (function(){ |
|
103 var root = resetContent(); |
|
104 var it = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, |
|
105 testNodeFilter); |
|
106 |
|
107 })(); |
|
108 */ |
|
109 </script> |
|
110 </pre> |
|
111 </body> |
|
112 </html> |