Make content tests synchronous by default. Fixes #884.

This commit is contained in:
Josh Matthews 2014-11-06 21:39:46 -08:00
parent 338a9c3f05
commit 711f4d5af9
72 changed files with 20 additions and 105 deletions

View file

@ -75,6 +75,9 @@ function check_disabled_selector(elem, disabled) {
var _test_complete = false; var _test_complete = false;
var _test_timeout = 10000; //10 seconds var _test_timeout = 10000; //10 seconds
function finish() { function finish() {
if (_test_complete) {
_fail('finish called multiple times');
}
if (_expectations > _tests) { if (_expectations > _tests) {
_fail('expected ' + _expectations + ' tests, fullfilled ' + _tests); _fail('expected ' + _expectations + ' tests, fullfilled ' + _tests);
} }
@ -90,3 +93,14 @@ function _test_timed_out() {
} }
setTimeout(_test_timed_out, _test_timeout); setTimeout(_test_timed_out, _test_timeout);
var _needs_finish = false;
function waitForExplicitFinish() {
_needs_finish = true;
}
addEventListener('load', function() {
if (!_needs_finish) {
finish();
}
});

View file

@ -6,7 +6,6 @@ is_function(DOMParser, "DOMParser");
let parser = new DOMParser(); let parser = new DOMParser();
is_a(parser, DOMParser); is_a(parser, DOMParser);
is_a(parser.parseFromString("", "text/html"), Document); is_a(parser.parseFromString("", "text/html"), Document);
finish();
</script> </script>
</head> </head>
</html> </html>

View file

@ -11,8 +11,6 @@ is(ev.type, 'foopy');
is(ev.defaultPrevented, false); is(ev.defaultPrevented, false);
ev.preventDefault(); ev.preventDefault();
is(ev.defaultPrevented, true); is(ev.defaultPrevented, true);
finish();
</script> </script>
</head> </head>
</html> </html>

View file

@ -11,8 +11,6 @@ is_a(ev, UIEvent);
is_a(ev, MouseEvent); is_a(ev, MouseEvent);
is(ev.screenX, 150); is(ev.screenX, 150);
is(ev.detail, 100); is(ev.detail, 100);
finish();
</script> </script>
</head> </head>
</html> </html>

View file

@ -2,6 +2,7 @@
<head> <head>
<script src="harness.js"></script> <script src="harness.js"></script>
<script> <script>
waitForExplicitFinish();
function check_onload(listener) { function check_onload(listener) {
is(listener, window); is(listener, window);
var ev = new Event('click', {bubbles: true, cancelable: true}); var ev = new Event('click', {bubbles: true, cancelable: true});

View file

@ -17,7 +17,5 @@
t.caption = newCaption; t.caption = newCaption;
is(newCaption.parentNode, t); is(newCaption.parentNode, t);
is(t.caption, newCaption); is(t.caption, newCaption);
finish();
</script> </script>
</html> </html>

View file

@ -136,8 +136,6 @@ check_tag("video", 1, [HTMLMediaElement, HTMLVideoElement]);
// Test non-ASCII tag names. Uppercasing is ASCII-only per spec: // Test non-ASCII tag names. Uppercasing is ASCII-only per spec:
// http://dom.spec.whatwg.org/#dom-element-tagname // http://dom.spec.whatwg.org/#dom-element-tagname
check_tag("foo-á", 1, [HTMLUnknownElement], "FOO-á"); check_tag("foo-á", 1, [HTMLUnknownElement], "FOO-á");
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -14,7 +14,6 @@
output += "end"; output += "end";
is(output, "start middle end"); is(output, "start middle end");
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -13,7 +13,6 @@
is_a(elem, HTMLSpanElement); is_a(elem, HTMLSpanElement);
var text = document.createTextNode("hello"); var text = document.createTextNode("hello");
is_a(text, Text); is_a(text, Text);
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -7,7 +7,6 @@ is_a(document.documentElement, HTMLHtmlElement);
is_a(document.documentElement.firstChild, HTMLHeadElement); is_a(document.documentElement.firstChild, HTMLHeadElement);
is(document.documentElement.nextSibling, null); is(document.documentElement.nextSibling, null);
is_a(document, Document); is_a(document, Document);
finish();
</script> </script>
</head> </head>
</html> </html>

View file

@ -18,8 +18,6 @@
is(foo.ownerDocument, doc); is(foo.ownerDocument, doc);
is(foo.parentNode, null); is(foo.parentNode, null);
is(foo.childNodes.length, 1); is(foo.childNodes.length, 1);
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -66,8 +66,6 @@
new_document.body = new_frameset; new_document.body = new_frameset;
is(new_document.body, new_frameset, "test6-3, append frameset to a new document"); is(new_document.body, new_frameset, "test6-3, append frameset to a new document");
} }
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -14,8 +14,6 @@
var htmldoc = document.implementation.createHTMLDocument("title"); var htmldoc = document.implementation.createHTMLDocument("title");
is(htmldoc.characterSet, "utf-8", "test2-2, characterSet"); is(htmldoc.characterSet, "utf-8", "test2-2, characterSet");
} }
finish();
</script> </script>
</head> </head>
</html> </html>

View file

@ -8,8 +8,6 @@
// FIXME: https://github.com/mozilla-servo/libhubbub/issues/5 // FIXME: https://github.com/mozilla-servo/libhubbub/issues/5
is(document.characterSet, "utf-8", "test1-0, default characterSet"); is(document.characterSet, "utf-8", "test1-0, default characterSet");
} }
finish();
</script> </script>
</head> </head>
</html> </html>

View file

@ -8,8 +8,6 @@
{ {
is(document.characterSet, "utf-8", "test1-0, unknown charset"); is(document.characterSet, "utf-8", "test1-0, unknown charset");
} }
finish();
</script> </script>
</head> </head>
</html> </html>

View file

@ -15,7 +15,6 @@
var htmldoc = document.implementation.createHTMLDocument("title"); var htmldoc = document.implementation.createHTMLDocument("title");
is(htmldoc.compatMode, "CSS1Compat", "test2-1, Non-parsed documents"); is(htmldoc.compatMode, "CSS1Compat", "test2-1, Non-parsed documents");
} }
finish();
</script> </script>
</head> </head>
</html> </html>

View file

@ -7,7 +7,6 @@
{ {
is(document.compatMode, "BackCompat", "test1-0, Loose HTML"); is(document.compatMode, "BackCompat", "test1-0, Loose HTML");
} }
finish();
</script> </script>
</head> </head>
</html> </html>

View file

@ -7,7 +7,6 @@
{ {
is(document.compatMode, "CSS1Compat", "test1-0, Strict HTML"); is(document.compatMode, "CSS1Compat", "test1-0, Strict HTML");
} }
finish();
</script> </script>
</head> </head>
</html> </html>

View file

@ -15,8 +15,6 @@
is_a(doc, Document, "test2-0, XML document"); is_a(doc, Document, "test2-0, XML document");
is(doc.contentType, "application/xml", "test2-1, XML document"); is(doc.contentType, "application/xml", "test2-1, XML document");
} }
finish();
</script> </script>
</head> </head>
</html> </html>

View file

@ -15,6 +15,5 @@
is_a(datalist.options[0], HTMLOptionElement); is_a(datalist.options[0], HTMLOptionElement);
is_a(datalist.options[1], HTMLOptionElement); is_a(datalist.options[1], HTMLOptionElement);
is_a(datalist.options[2], HTMLOptionElement); is_a(datalist.options[2], HTMLOptionElement);
finish();
</script> </script>
</html> </html>

View file

@ -19,8 +19,6 @@
let result = document.getElementById(TEST_ID); let result = document.getElementById(TEST_ID);
is(result, b, "test 9-0"); is(result, b, "test 9-0");
} }
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -9,7 +9,6 @@
let nameList = document.getElementsByName("foo"); let nameList = document.getElementsByName("foo");
is_a(nameList, NodeList); is_a(nameList, NodeList);
is_not_a(nameList, HTMLCollection); is_not_a(nameList, HTMLCollection);
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -40,7 +40,6 @@
foo.appendChild(head); foo.appendChild(head);
is(new_document.head, null, "test3-0, head's parent should be document element"); is(new_document.head, null, "test3-0, head's parent should be document element");
} }
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -74,8 +74,6 @@
is(doc.doctype, doctype, "test4-9, createDocument"); is(doc.doctype, doctype, "test4-9, createDocument");
is_a(doc.documentElement, Element, "test4-10, createDocument"); is_a(doc.documentElement, Element, "test4-10, createDocument");
} }
finish();
</script> </script>
</head> </head>
</html> </html>

View file

@ -32,8 +32,6 @@
document.body.removeChild(document.getElementById("anchor-with-href")); document.body.removeChild(document.getElementById("anchor-with-href"));
is(links, document.links); is(links, document.links);
is(links.length, 0); is(links.length, 0);
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -4,6 +4,8 @@
</head> </head>
<body onload="is(document.readyState, 'complete'); is(gNumChanges, 2); finish()"> <body onload="is(document.readyState, 'complete'); is(gNumChanges, 2); finish()">
<script> <script>
waitForExplicitFinish();
gNumChanges = 0; gNumChanges = 0;
document.addEventListener('readystatechange', function() { document.addEventListener('readystatechange', function() {
gNumChanges++; gNumChanges++;

View file

@ -13,7 +13,6 @@
is(div.firstChild.nodeValue, "B"); is(div.firstChild.nodeValue, "B");
var commentNode = document.createComment("comment node"); var commentNode = document.createComment("comment node");
is(commentNode.nodeValue, "comment node"); is(commentNode.nodeValue, "comment node");
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -4,6 +4,5 @@
<script> <script>
document.head.firstChild.appendChild(document.createElement("foo")); document.head.firstChild.appendChild(document.createElement("foo"));
is(document.title, "x"); is(document.title, "x");
finish();
</script> </script>
</html> </html>

View file

@ -23,8 +23,6 @@
is(url[0], "file:", "test3-0, current document"); is(url[0], "file:", "test3-0, current document");
is(url[url.length-1], "test_document_url.html", "test3-1, current document"); is(url[url.length-1], "test_document_url.html", "test3-1, current document");
} }
finish();
</script> </script>
</head> </head>
<body> <body>

View file

@ -38,8 +38,6 @@
is(classList.contains("bar"), true); is(classList.contains("bar"), true);
is(classList.contains("baz"), false); is(classList.contains("baz"), false);
} }
finish();
</script> </script>
</head> </head>
</html> </html>

View file

@ -59,8 +59,6 @@
should_throw(function () { should_throw(function () {
test.setAttributeNS("http://www.w3.org/2000/xmlns/", "prefix:attr", "value"); test.setAttributeNS("http://www.w3.org/2000/xmlns/", "prefix:attr", "value");
}); });
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -15,7 +15,6 @@
is(attributes[i].name, String.fromCharCode(i + 'a'.charCodeAt(0))); is(attributes[i].name, String.fromCharCode(i + 'a'.charCodeAt(0)));
is(attributes[i].value, (i + 'a'.charCodeAt(0)).toString()); is(attributes[i].value, (i + 'a'.charCodeAt(0)).toString());
} }
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -12,8 +12,6 @@
is(classList.item(0), null, "classList.item(0) must return null when all classes have been removed"); is(classList.item(0), null, "classList.item(0) must return null when all classes have been removed");
is(classList[0], undefined, "classList[0] must be undefined when all classes have been removed"); is(classList[0], undefined, "classList[0] must be undefined when all classes have been removed");
finish();
</script> </script>
</head> </head>
<body> <body>

View file

@ -31,8 +31,6 @@
collection = document.getElementsByClassName("baz"); collection = document.getElementsByClassName("baz");
is(collection.length, 1); is(collection.length, 1);
is(collection[0].id, foo2.id); is(collection[0].id, foo2.id);
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -11,8 +11,6 @@
is(test.matches("#foo"), true, "test-1"); is(test.matches("#foo"), true, "test-1");
is(test.matches("#not-foo"), false, "test-2"); is(test.matches("#not-foo"), false, "test-2");
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -12,7 +12,6 @@ is(rect.right, 0);
is(rect.width, 0); is(rect.width, 0);
is(rect.height, 0); is(rect.height, 0);
is(rects.length, 0); is(rects.length, 0);
finish();
</script> </script>
</head> </head>
</html> </html>

View file

@ -172,8 +172,6 @@
optgroup.removeChild(option); optgroup.removeChild(option);
check_disabled_selector(option, false); check_disabled_selector(option, false);
} }
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -44,8 +44,6 @@
is(bodyTimes, 2, 'body listener should be called multiple times'); is(bodyTimes, 2, 'body listener should be called multiple times');
is(divTimes, 1, 'target listener should be called once'); is(divTimes, 1, 'target listener should be called once');
is(spanTimes, 1, 'span listener should be called while bubbling'); is(spanTimes, 1, 'span listener should be called while bubbling');
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -17,5 +17,4 @@ outerb.addEventListener("x", function() {
innerb.dispatchEvent(new Event("x")); innerb.dispatchEvent(new Event("x"));
is(sawmiddle, 1); is(sawmiddle, 1);
is(sawouter, 0); is(sawouter, 0);
finish();
</script> </script>

View file

@ -36,7 +36,6 @@
is(sawBubble, true); is(sawBubble, true);
is(sawCapture, true); is(sawCapture, true);
is(sawBubbleTwice, true); is(sawBubbleTwice, true);
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -16,8 +16,6 @@
is(document.body.getAttribute("onx"), "{"); is(document.body.getAttribute("onx"), "{");
is(document.body.getAttribute("ony"), "}"); is(document.body.getAttribute("ony"), "}");
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -32,8 +32,6 @@
var ev = new constructors[i]('foopy', {cancelable: true, bubbles: true}); var ev = new constructors[i]('foopy', {cancelable: true, bubbles: true});
window.dispatchEvent(ev); window.dispatchEvent(ev);
} }
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -28,8 +28,6 @@ div {
is(rect.height, 100); is(rect.height, 100);
is(rect.width, rect.right - rect.left); is(rect.width, rect.right - rect.left);
is(rect.height, rect.bottom - rect.top); is(rect.height, rect.bottom - rect.top);
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -7,7 +7,6 @@ is(window, this);
for (var key in this) { for (var key in this) {
is(this[key], window[key]); is(this[key], window[key]);
} }
finish();
</script> </script>
</head> </head>
</html> </html>

View file

@ -112,8 +112,6 @@
is(from_element.item(0), p1); is(from_element.item(0), p1);
is(from_element.item(1), p3); is(from_element.item(1), p3);
} }
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -40,6 +40,5 @@
is_a(fs.elements[7], HTMLInputElement); is_a(fs.elements[7], HTMLInputElement);
is_a(fs.elements[8], HTMLOutputElement); is_a(fs.elements[8], HTMLOutputElement);
is_a(fs.elements[9], HTMLObjectElement); is_a(fs.elements[9], HTMLObjectElement);
finish();
</script> </script>
</html> </html>

View file

@ -21,7 +21,6 @@
<script> <script>
is(document.getElementsByClassName("foo").length, 6); is(document.getElementsByClassName("foo").length, 6);
is_not(document.getElementById("bar").className, "ggg foo"); is_not(document.getElementById("bar").className, "ggg foo");
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -4,6 +4,7 @@
</head> </head>
<body onload="is_a(event, Event); finish()"> <body onload="is_a(event, Event); finish()">
<script> <script>
waitForExplicitFinish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -5,7 +5,6 @@
var a = document.createElement("div"); var a = document.createElement("div");
a.appendChild(document.createElement("pre")).appendChild(new Text("")); a.appendChild(document.createElement("pre")).appendChild(new Text(""));
is(a.innerHTML, "<pre></pre>"); is(a.innerHTML, "<pre></pre>");
finish();
</script> </script>
</head> </head>
</html> </html>

View file

@ -206,5 +206,4 @@ for (var name of Object.keys(interfaceMap)) {
} }
is(Object.keys(interfaceMap).length, 0, is(Object.keys(interfaceMap).length, 0,
"The following interface(s) are not enumerated: " + Object.keys(interfaceMap).join(", ")); "The following interface(s) are not enumerated: " + Object.keys(interfaceMap).join(", "));
finish();
</script> </script>

View file

@ -21,8 +21,6 @@
is(Document.prototype.onreadystatechange, undefined, "test2-1, property access returns undefined"); is(Document.prototype.onreadystatechange, undefined, "test2-1, property access returns undefined");
}); });
} }
finish();
</script> </script>
</head> </head>
</html> </html>

View file

@ -4,6 +4,8 @@
</head> </head>
<body> <body>
<script> <script>
waitForExplicitFinish();
var onloads = 0; var onloads = 0;
function check(ev) { function check(ev) {
is_a(ev, Event); is_a(ev, Event);

View file

@ -14,7 +14,6 @@ is(nav.taintEnabled(), false);
is(nav.appName, "Netscape"); is(nav.appName, "Netscape");
is(nav.appCodeName, "Mozilla"); is(nav.appCodeName, "Mozilla");
is(nav.platform, ""); is(nav.platform, "");
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -226,8 +226,6 @@
check_copy(parent, copy, HTMLDivElement); check_copy(parent, copy, HTMLDivElement);
is(copy.childNodes.length, 0); is(copy.childNodes.length, 0);
} }
finish();
</script> </script>
</head> </head>
</html> </html>

View file

@ -29,7 +29,6 @@
is(another.compareDocumentPosition(follower), Node.DOCUMENT_POSITION_FOLLOWING); is(another.compareDocumentPosition(follower), Node.DOCUMENT_POSITION_FOLLOWING);
is(follower.compareDocumentPosition(another), Node.DOCUMENT_POSITION_PRECEDING); is(follower.compareDocumentPosition(another), Node.DOCUMENT_POSITION_PRECEDING);
is(follower.compareDocumentPosition(preceder), Node.DOCUMENT_POSITION_PRECEDING); is(follower.compareDocumentPosition(preceder), Node.DOCUMENT_POSITION_PRECEDING);
finish();
} }
</script> </script>
</head> </head>

View file

@ -18,8 +18,6 @@
is(parent.contains(child_of_child), true, "test1-2, Node.contains"); is(parent.contains(child_of_child), true, "test1-2, Node.contains");
is(parent.contains(other), false, "test1-3, Node.contains"); is(parent.contains(other), false, "test1-3, Node.contains");
} }
finish();
</script> </script>
</head> </head>
</html> </html>

View file

@ -17,8 +17,6 @@
is(root.insertBefore(before, after), before, "test1-0, insertBefore"); is(root.insertBefore(before, after), before, "test1-0, insertBefore");
is(root.childNodes[0], before, "test1-1, insertBefore"); is(root.childNodes[0], before, "test1-1, insertBefore");
is(root.childNodes[1], after, "test1-2, insertBefore"); is(root.childNodes[1], after, "test1-2, insertBefore");
finish();
} }
</script> </script>
</body> </body>

View file

@ -32,8 +32,6 @@
is(parent_elem.isEqualNode(other_parent), false); is(parent_elem.isEqualNode(other_parent), false);
is(child_elem.isEqualNode(other_child), false); is(child_elem.isEqualNode(other_child), false);
} }
finish();
</script> </script>
</head> </head>
</html> </html>

View file

@ -28,8 +28,6 @@
is(parent2.childNodes.length, 0, "Node.normalize removes empty text nodes even if there is only one text node"); is(parent2.childNodes.length, 0, "Node.normalize removes empty text nodes even if there is only one text node");
is(child2.textContent, "", "Node.normalize doesn't change removed children original content") is(child2.textContent, "", "Node.normalize doesn't change removed children original content")
is(child3.textContent, "bb", "Node.normalize doesn't change removed children original content") is(child3.textContent, "bb", "Node.normalize doesn't change removed children original content")
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -45,8 +45,6 @@
is(document.replaceChild(new_elem, doc_elem), doc_elem, "test3-1, documentElement"); is(document.replaceChild(new_elem, doc_elem), doc_elem, "test3-1, documentElement");
is(document.documentElement, new_elem, "test3-2, documentElement"); is(document.documentElement, new_elem, "test3-2, documentElement");
} }
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -64,7 +64,6 @@
is(docfrag.querySelector(".myClass"), div); is(docfrag.querySelector(".myClass"), div);
is(docfrag.querySelector("div > div"), child); is(docfrag.querySelector("div > div"), child);
} }
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -52,8 +52,6 @@
nodelist = docfrag.querySelectorAll("#foo:nth-child(1)"); nodelist = docfrag.querySelectorAll("#foo:nth-child(1)");
is(nodelist.item(0), div); is(nodelist.item(0), div);
} }
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -18,8 +18,6 @@
is(child.parentNode, elem); is(child.parentNode, elem);
is(child.parentElement, elem); is(child.parentElement, elem);
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -19,7 +19,6 @@ function test() {
is(window.document.documentElement.tagName, "HTML"); is(window.document.documentElement.tagName, "HTML");
is_a(window.document.getElementsByTagName('foo-á')[0], HTMLUnknownElement); is_a(window.document.getElementsByTagName('foo-á')[0], HTMLUnknownElement);
is(window.document.getElementsByTagName('foo-á')[0].tagName, "FOO-á"); is(window.document.getElementsByTagName('foo-á')[0].tagName, "FOO-á");
finish();
} }
</script> </script>
</body> </body>

View file

@ -8,7 +8,6 @@
is(window.document.title, ''); is(window.document.title, '');
window.document.title = 'foo'; window.document.title = 'foo';
is(window.document.title, 'foo'); is(window.document.title, 'foo');
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -92,10 +92,6 @@
<script language="text/javascript"> <script language="text/javascript">
fail('language is text/javascript'); fail('language is text/javascript');
</script> </script>
<script>
finish();
</script>
</body> </body>
</html> </html>

View file

@ -11,7 +11,6 @@
var newContent = "new text con\ntent"; var newContent = "new text con\ntent";
div.textContent = newContent; div.textContent = newContent;
is(div.textContent, newContent); is(div.textContent, newContent);
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -6,7 +6,6 @@
is(document.title, "starting title"); is(document.title, "starting title");
document.title = "new title"; document.title = "new title";
is(document.title, "new title"); is(document.title, "new title");
finish();
</script> </script>
</head> </head>
</html> </html>

View file

@ -3,5 +3,4 @@
<script> <script>
new CustomEvent("foo", { detail: null }); new CustomEvent("foo", { detail: null });
gc(); gc();
finish();
</script> </script>

View file

@ -19,8 +19,6 @@
should_throw(function() { sel.add(div) }); should_throw(function() { sel.add(div) });
should_not_throw(function() { sel.add(optgroup, function() {}) }); should_not_throw(function() { sel.add(optgroup, function() {}) });
finish();
</script> </script>
</head> </head>
</html> </html>

View file

@ -7,7 +7,6 @@
<script> <script>
is(window, window.self); is(window, window.self);
is_a(window.self, Window); is_a(window.self, Window);
finish();
</script> </script>
</body> </body>
</html> </html>

View file

@ -22,7 +22,6 @@
gt(next, last); gt(next, last);
last = next; last = next;
} }
finish();
</script> </script>
</body> </body>
</html> </html>