| <!doctype html> | 
 | <title>Selection.deleteFromDocument() tests</title> | 
 | <link rel=author title="Aryeh Gregor" href=ayg@aryeh.name> | 
 | <p>To debug test failures, add a query parameter with the test id (like | 
 | "?5").  Only that test will be run.  Then you can look at the resulting | 
 | iframes in the DOM. | 
 | <div id=log></div> | 
 | <script src=/resources/testharness.js></script> | 
 | <script src=/resources/testharnessreport.js></script> | 
 | <script src=common.js></script> | 
 | <script> | 
 | "use strict"; | 
 |  | 
 | // We need to use explicit_done, because in Chrome 16 dev and Opera 12.00, the | 
 | // second iframe doesn't block the load event -- even though it is added before | 
 | // the load event. | 
 | setup({explicit_done: true}); | 
 |  | 
 | // Specified by WebIDL | 
 | test(function() { | 
 |     assert_equals(Selection.prototype.deleteFromDocument.length, 0, | 
 |         "Selection.prototype.deleteFromDocument.length must equal 0"); | 
 | }, "Selection.prototype.deleteFromDocument.length must equal 0"); | 
 |  | 
 | testDiv.parentNode.removeChild(testDiv); | 
 |  | 
 | // Test an empty selection too | 
 | testRanges.unshift("empty"); | 
 |  | 
 | var actualIframe = document.createElement("iframe"); | 
 |  | 
 | var expectedIframe = document.createElement("iframe"); | 
 |  | 
 | var referenceDoc = document.implementation.createHTMLDocument(""); | 
 | referenceDoc.removeChild(referenceDoc.documentElement); | 
 |  | 
 | actualIframe.onload = function() { | 
 |     expectedIframe.onload = function() { | 
 |         for (var i = 0; i < testRanges.length; i++) { | 
 |             if (location.search && i != Number(location.search)) { | 
 |                 continue; | 
 |             } | 
 |  | 
 |             test(function() { | 
 |                 initializeIframe(actualIframe, testRanges[i]); | 
 |                 initializeIframe(expectedIframe, testRanges[i]); | 
 |  | 
 |                 var actualRange = actualIframe.contentWindow.testRange; | 
 |                 var expectedRange = expectedIframe.contentWindow.testRange; | 
 |  | 
 |                 assert_equals(actualIframe.contentWindow.unexpectedException, null, | 
 |                     "Unexpected exception thrown when setting up Range for actual deleteFromDocument"); | 
 |                 assert_equals(expectedIframe.contentWindow.unexpectedException, null, | 
 |                     "Unexpected exception thrown when setting up Range for simulated deleteFromDocument"); | 
 |  | 
 |                 actualIframe.contentWindow.getSelection().removeAllRanges(); | 
 |                 if (testRanges[i] != "empty") { | 
 |                     assert_equals(typeof actualRange, "object", | 
 |                         "Range produced in actual iframe must be an object"); | 
 |                     assert_equals(typeof expectedRange, "object", | 
 |                         "Range produced in expected iframe must be an object"); | 
 |                     assert_true(actualRange instanceof actualIframe.contentWindow.Range, | 
 |                         "Range produced in actual iframe must be instanceof Range"); | 
 |                     assert_true(expectedRange instanceof expectedIframe.contentWindow.Range, | 
 |                         "Range produced in expected iframe must be instanceof Range"); | 
 |                     actualIframe.contentWindow.getSelection().addRange(actualIframe.contentWindow.testRange); | 
 |                     expectedIframe.contentWindow.testRange.deleteContents(); | 
 |                 } | 
 |                 actualIframe.contentWindow.getSelection().deleteFromDocument(); | 
 |  | 
 |                 assertNodesEqual(actualIframe.contentDocument, expectedIframe.contentDocument, "DOM contents"); | 
 |             }, "Range " + i + ": " + testRanges[i]); | 
 |         } | 
 |         actualIframe.style.display = "none"; | 
 |         expectedIframe.style.display = "none"; | 
 |         done(); | 
 |     }; | 
 |     expectedIframe.src = "test-iframe.html"; | 
 |     document.body.appendChild(expectedIframe); | 
 |     referenceDoc.appendChild(actualIframe.contentDocument.documentElement.cloneNode(true)); | 
 | }; | 
 | actualIframe.src = "test-iframe.html"; | 
 | document.body.appendChild(actualIframe); | 
 |  | 
 | function initializeIframe(iframe, endpoints) { | 
 |     while (iframe.contentDocument.firstChild) { | 
 |         iframe.contentDocument.removeChild(iframe.contentDocument.lastChild); | 
 |     } | 
 |     iframe.contentDocument.appendChild(iframe.contentDocument.implementation.createDocumentType("html", "", "")); | 
 |     iframe.contentDocument.appendChild(referenceDoc.documentElement.cloneNode(true)); | 
 |     iframe.contentWindow.setupRangeTests(); | 
 |     if (endpoints != "empty") { | 
 |         iframe.contentWindow.testRangeInput = endpoints; | 
 |         iframe.contentWindow.run(); | 
 |     } | 
 | } | 
 | </script> |