|
1 <!doctype html> |
|
2 <title>Selection.deleteFromDocument() tests</title> |
|
3 <link rel=author title="Aryeh Gregor" href=ayg@aryeh.name> |
|
4 <p>To debug test failures, add a query parameter with the test id (like |
|
5 "?5"). Only that test will be run. Then you can look at the resulting |
|
6 iframes in the DOM. |
|
7 <div id=log></div> |
|
8 <script src=/resources/testharness.js></script> |
|
9 <script src=/resources/testharnessreport.js></script> |
|
10 <script src=common.js></script> |
|
11 <script> |
|
12 "use strict"; |
|
13 |
|
14 // We need to use explicit_done, because in Chrome 16 dev and Opera 12.00, the |
|
15 // second iframe doesn't block the load event -- even though it is added before |
|
16 // the load event. |
|
17 setup({explicit_done: true}); |
|
18 |
|
19 // Specified by WebIDL |
|
20 test(function() { |
|
21 assert_equals(Selection.prototype.deleteFromDocument.length, 0, |
|
22 "Selection.prototype.deleteFromDocument.length must equal 0"); |
|
23 }, "Selection.prototype.deleteFromDocument.length must equal 0"); |
|
24 |
|
25 testDiv.parentNode.removeChild(testDiv); |
|
26 |
|
27 // Test an empty selection too |
|
28 testRanges.unshift("empty"); |
|
29 |
|
30 var actualIframe = document.createElement("iframe"); |
|
31 |
|
32 var expectedIframe = document.createElement("iframe"); |
|
33 |
|
34 var referenceDoc = document.implementation.createHTMLDocument(""); |
|
35 referenceDoc.removeChild(referenceDoc.documentElement); |
|
36 |
|
37 actualIframe.onload = function() { |
|
38 expectedIframe.onload = function() { |
|
39 for (var i = 0; i < testRanges.length; i++) { |
|
40 if (location.search && i != Number(location.search)) { |
|
41 continue; |
|
42 } |
|
43 |
|
44 test(function() { |
|
45 initializeIframe(actualIframe, testRanges[i]); |
|
46 initializeIframe(expectedIframe, testRanges[i]); |
|
47 |
|
48 var actualRange = actualIframe.contentWindow.testRange; |
|
49 var expectedRange = expectedIframe.contentWindow.testRange; |
|
50 |
|
51 assert_equals(actualIframe.contentWindow.unexpectedException, null, |
|
52 "Unexpected exception thrown when setting up Range for actual deleteFromDocument"); |
|
53 assert_equals(expectedIframe.contentWindow.unexpectedException, null, |
|
54 "Unexpected exception thrown when setting up Range for simulated deleteFromDocument"); |
|
55 |
|
56 actualIframe.contentWindow.getSelection().removeAllRanges(); |
|
57 if (testRanges[i] != "empty") { |
|
58 assert_equals(typeof actualRange, "object", |
|
59 "Range produced in actual iframe must be an object"); |
|
60 assert_equals(typeof expectedRange, "object", |
|
61 "Range produced in expected iframe must be an object"); |
|
62 assert_true(actualRange instanceof actualIframe.contentWindow.Range, |
|
63 "Range produced in actual iframe must be instanceof Range"); |
|
64 assert_true(expectedRange instanceof expectedIframe.contentWindow.Range, |
|
65 "Range produced in expected iframe must be instanceof Range"); |
|
66 actualIframe.contentWindow.getSelection().addRange(actualIframe.contentWindow.testRange); |
|
67 expectedIframe.contentWindow.testRange.deleteContents(); |
|
68 } |
|
69 actualIframe.contentWindow.getSelection().deleteFromDocument(); |
|
70 |
|
71 assertNodesEqual(actualIframe.contentDocument, expectedIframe.contentDocument, "DOM contents"); |
|
72 }, "Range " + i + ": " + testRanges[i]); |
|
73 } |
|
74 actualIframe.style.display = "none"; |
|
75 expectedIframe.style.display = "none"; |
|
76 done(); |
|
77 }; |
|
78 expectedIframe.src = "test-iframe.html"; |
|
79 document.body.appendChild(expectedIframe); |
|
80 referenceDoc.appendChild(actualIframe.contentDocument.documentElement.cloneNode(true)); |
|
81 }; |
|
82 actualIframe.src = "test-iframe.html"; |
|
83 document.body.appendChild(actualIframe); |
|
84 |
|
85 function initializeIframe(iframe, endpoints) { |
|
86 while (iframe.contentDocument.firstChild) { |
|
87 iframe.contentDocument.removeChild(iframe.contentDocument.lastChild); |
|
88 } |
|
89 iframe.contentDocument.appendChild(iframe.contentDocument.implementation.createDocumentType("html", "", "")); |
|
90 iframe.contentDocument.appendChild(referenceDoc.documentElement.cloneNode(true)); |
|
91 iframe.contentWindow.setupRangeTests(); |
|
92 if (endpoints != "empty") { |
|
93 iframe.contentWindow.testRangeInput = endpoints; |
|
94 iframe.contentWindow.run(); |
|
95 } |
|
96 } |
|
97 </script> |