2010-04-27 Adam Barth <abarth@webkit.org>
authorabarth@webkit.org <abarth@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 27 Apr 2010 21:51:23 +0000 (21:51 +0000)
committerabarth@webkit.org <abarth@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 27 Apr 2010 21:51:23 +0000 (21:51 +0000)
        Reviewed by Darin Adler.

        Add test for NodeIterator prototype change behavior
        https://bugs.webkit.org/show_bug.cgi?id=38219

        In the process of remove the custom code from NodeIterator, we thought
        we fixed a subtle bug where iterating over nodes from another frame
        would get the wrong prototype chain.  This test documents that we
        didn't actually change the behavior and we still have the bug.

        * traversal/node-iterator-prototype-expected.txt: Added.
        * traversal/node-iterator-prototype.html: Added.
        * traversal/resources/node-iterator-prototype-frame.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@58339 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/traversal/node-iterator-prototype-expected.txt [new file with mode: 0644]
LayoutTests/traversal/node-iterator-prototype.html [new file with mode: 0644]
LayoutTests/traversal/resources/node-iterator-prototype-frame.html [new file with mode: 0644]

index 301a573..a4c7be7 100644 (file)
@@ -1,3 +1,19 @@
+2010-04-27  Adam Barth  <abarth@webkit.org>
+
+        Reviewed by Darin Adler.
+
+        Add test for NodeIterator prototype change behavior
+        https://bugs.webkit.org/show_bug.cgi?id=38219
+
+        In the process of remove the custom code from NodeIterator, we thought
+        we fixed a subtle bug where iterating over nodes from another frame
+        would get the wrong prototype chain.  This test documents that we
+        didn't actually change the behavior and we still have the bug.
+
+        * traversal/node-iterator-prototype-expected.txt: Added.
+        * traversal/node-iterator-prototype.html: Added.
+        * traversal/resources/node-iterator-prototype-frame.html: Added.
+
 2010-04-27  Ojan Vafai  <ojan@chromium.org>
 
         Unreviewed. Minor fix after goofup in http://trac.webkit.org/changeset/58331
diff --git a/LayoutTests/traversal/node-iterator-prototype-expected.txt b/LayoutTests/traversal/node-iterator-prototype-expected.txt
new file mode 100644 (file)
index 0000000..588bc87
--- /dev/null
@@ -0,0 +1,11 @@
+This test checks whether DOM wrappers created by NodeIterator have their prototypes attached to the correct objects. These nodes are from the child frame, so that's where their prototypes should be attached.
+
+Unfortunately, our implementation is buggy and we get wrappers from the parent frame here. This test documents the bug so we'll know when we fix it.
+
+test: child PASS
+A: parent FAIL
+B: parent FAIL
+C: parent FAIL
+D: parent FAIL
+D: parent FAIL
+
diff --git a/LayoutTests/traversal/node-iterator-prototype.html b/LayoutTests/traversal/node-iterator-prototype.html
new file mode 100644 (file)
index 0000000..08c66b2
--- /dev/null
@@ -0,0 +1,34 @@
+<html> 
+<body>
+<p>This test checks whether DOM wrappers created by NodeIterator have their
+prototypes attached to the correct objects.  These nodes are from the child
+frame, so that's where their prototypes should be attached.</p>
+
+<p>Unfortunately, our implementation is buggy and we get wrappers from the
+parent frame here.  This test documents the bug so we'll know when we fix
+it.</p>
+<div id="console"></div>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+Node.prototype.foo = "parent";
+
+function logNode(node) {
+    var result = node.foo == "child" ? "PASS" : "FAIL";
+    document.getElementById("console").innerHTML += node.id + ": " + node.foo + " " + result + "<br>"
+}
+
+function runTest() {
+    var it = frames[0].it;
+    logNode(it.nextNode());
+    logNode(it.nextNode());
+    logNode(it.nextNode());
+    logNode(it.nextNode());
+    logNode(it.nextNode());
+    logNode(it.previousNode());
+}
+</script>
+<iframe onload="runTest();" src="resources/node-iterator-prototype-frame.html"></iframe>
+</body>
+</html>
diff --git a/LayoutTests/traversal/resources/node-iterator-prototype-frame.html b/LayoutTests/traversal/resources/node-iterator-prototype-frame.html
new file mode 100644 (file)
index 0000000..20fc456
--- /dev/null
@@ -0,0 +1,12 @@
+<html> 
+<body>
+<div id="test">
+<span id="A"></span><span id="B"></span><span id="C"></span><span id="D"></span><span id="E"></span><span id="F"></span><span id="G"></span><span id="H"></span><span id="I"></span>
+</div>
+<script>
+Node.prototype.foo = "child";
+
+var root = document.getElementById('test');
+var it = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT,
+                                     function () { return true }, false);
+</script>