123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- <?xml version="1.0"?>
- <?xml-stylesheet href="chrome://global/skin" type="text/css"?>
- <?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
- <!--
- https://bugzilla.mozilla.org/show_bug.cgi?id=311681
- -->
- <window title="Mozilla Bug 311681"
- xmlns:html="http://www.w3.org/1999/xhtml"
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <body xmlns="http://www.w3.org/1999/xhtml">
- <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=311681">Mozilla Bug 311681</a>
- <script class="testbody" type="text/javascript">
- <![CDATA[
- // Setup script
- SimpleTest.waitForExplicitFinish();
- // Make sure to trigger the hashtable case by asking for enough elements
- // by ID.
- for (var i = 0; i < 256; ++i) {
- var x = document.getElementById(i);
- }
- // save off the document.getElementById function, since getting it as a
- // property off the document it causes a content flush.
- var fun = document.getElementById;
- // Slot for our initial element with id "content"
- var testNode;
- function getCont() {
- return fun.call(document, "content");
- }
-
- function testClone() {
- // Test to make sure that if we have multiple nodes with the same ID in
- // a document we don't forget about one of them when the other is
- // removed.
- var newParent = $("display");
- var node = testNode.cloneNode(true);
- isnot(node, testNode, "Clone should be a different node");
- newParent.appendChild(node);
- // Check what getElementById returns, no flushing
- is(getCont(), node, "Should be getting new node pre-flush 1")
-
- // Trigger a layout flush, just in case.
- var itemHeight = newParent.offsetHeight/10;
- // Check what getElementById returns now.
- is(getCont(), node, "Should be getting new node post-flush 1")
-
- clear(newParent);
-
- // Check what getElementById returns, no flushing
- is(getCont(), testNode, "Should be getting orig node pre-flush 2");
-
- // Trigger a layout flush, just in case.
- var itemHeight = newParent.offsetHeight/10;
- // Check what getElementById returns now.
- is(getCont(), testNode, "Should be getting orig node post-flush 2");
- node = testNode.cloneNode(true);
- newParent.appendChild(node);
- testNode.parentNode.removeChild(testNode);
- // Check what getElementById returns, no flushing
- is(getCont(), node, "Should be getting clone pre-flush");
-
- // Trigger a layout flush, just in case.
- var itemHeight = newParent.offsetHeight/10;
- // Check what getElementById returns now.
- is(getCont(), node, "Should be getting clone post-flush");
- }
- function clear(node) {
- while (node.hasChildNodes()) {
- node.removeChild(node.firstChild);
- }
- }
- addLoadEvent(testClone);
- addLoadEvent(SimpleTest.finish);
- ]]>
- </script>
- <p id="display"></p>
- <div id="content" style="display: none">
- <script class="testbody" type="text/javascript">
- <![CDATA[
- testNode = fun.call(document, "content");
- // Needs incremental XML parser
- isnot(testNode, null, "Should have node here");
- ]]>
- </script>
- </div>
- <pre id="test">
- </pre>
- </body>
- </window>
|