1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/content/base/test/test_NodeIterator_mutations_2.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,112 @@ 1.4 +<!DOCTYPE HTML> 1.5 +<html> 1.6 +<!-- NodeIterator mutation tests, 2. 1.7 + Originally part of WebKit, Mochi-ified by Zack Weinberg. 1.8 + This file based on node-iterator-00[...].html from 1.9 + http://svn.webkit.org/repository/webkit/trunk/LayoutTests/traversal/ 1.10 + --> 1.11 +<head> 1.12 + <title>DOM Traversal: NodeIterator: Mutations (2/x)</title> 1.13 + <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> 1.14 + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"> 1.15 +</head> 1.16 +<p id="display"></p> 1.17 +<div id="content" style="display: none"> 1.18 +</div> 1.19 +<pre id="test"> 1.20 +<script class="testbody" type="text/javascript"> 1.21 + function resetContent() { 1.22 + var content = $('content'); 1.23 + content.innerHTML = ('<span id="A"><\/span><span id="B"><\/span>' 1.24 + + '<span id="C"><\/span><span id="D"><\/span>' 1.25 + + '<span id="E"><\/span><span id="F"><\/span>' 1.26 + + '<span id="G"><\/span><span id="H"><\/span>' 1.27 + + '<span id="I"><\/span>'); 1.28 + return content; 1.29 + } 1.30 + 1.31 + function makeSpan(id) { 1.32 + var e = document.createElement('span'); 1.33 + e.id = id; 1.34 + return e; 1.35 + } 1.36 + 1.37 + function testNodeFilter(n) { 1.38 + if (n.tagName == 'SPAN') 1.39 + return NodeFilter.FILTER_ACCEPT; 1.40 + return NodeFilter.FILTER_SKIP; 1.41 + } 1.42 + 1.43 + function checkseq(it, root, expect) { 1.44 + var checkIt = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, 1.45 + testNodeFilter); 1.46 + var printedPointer = (it.referenceNode == undefined); 1.47 + var string = ''; 1.48 + var node; 1.49 + while ((node = checkIt.nextNode()) != null) { 1.50 + if (!printedPointer && it.referenceNode == node) { 1.51 + printedPointer = true; 1.52 + var s = '[' + node.id + '] '; 1.53 + if (it.pointerBeforeReferenceNode) 1.54 + string += "* " + s; 1.55 + else 1.56 + string += s + "* "; 1.57 + } else { 1.58 + string += node.id + " "; 1.59 + } 1.60 + } 1.61 + is(string.slice(0, -1), expect, "sequence check"); 1.62 + } 1.63 + 1.64 + // first a basic sanity check [node-iterator-001] 1.65 + (function(){ 1.66 + var root = resetContent(); 1.67 + var it = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, 1.68 + testNodeFilter); 1.69 + 1.70 + checkseq(it, root, 'A B C D E F G H I'); 1.71 + it.nextNode(); 1.72 + checkseq(it, root, '[A] * B C D E F G H I'); 1.73 + it.previousNode(); 1.74 + checkseq(it, root, '* [A] B C D E F G H I'); 1.75 + it.previousNode(); 1.76 + checkseq(it, root, '* [A] B C D E F G H I'); 1.77 + })(); 1.78 + 1.79 + // Mutations that should not move the iterator [node-iterator-002] 1.80 + (function(){ 1.81 + var root = resetContent(); 1.82 + var it = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, 1.83 + testNodeFilter); 1.84 + 1.85 + for (var i = 0; i < 4; i++) 1.86 + it.nextNode(); 1.87 + checkseq(it, root, 'A B C [D] * E F G H I'); 1.88 + 1.89 + root.removeChild($('E')); 1.90 + checkseq(it, root, 'A B C [D] * F G H I'); 1.91 + 1.92 + var X = makeSpan('X'); 1.93 + root.insertBefore(X, $('F')); 1.94 + checkseq(it, root, 'A B C [D] * X F G H I'); 1.95 + 1.96 + var I = $('I'); 1.97 + root.removeChild(I); 1.98 + root.insertBefore(I, X); 1.99 + checkseq(it, root, 'A B C [D] * I X F G H'); 1.100 + })(); 1.101 + 1.102 + // 002 complete 1.103 + 1.104 + /* Template 1.105 + (function(){ 1.106 + var root = resetContent(); 1.107 + var it = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, 1.108 + testNodeFilter); 1.109 + 1.110 + })(); 1.111 + */ 1.112 +</script> 1.113 +</pre> 1.114 +</body> 1.115 +</html>