98 lines
3.7 KiB
JavaScript
98 lines
3.7 KiB
JavaScript
/*
|
|
* Copyright 2016 Jacek Caban for CodeWeavers
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
|
*/
|
|
|
|
var head = document.getElementsByTagName("head")[0];
|
|
|
|
/* Dynamically created script element is downloaded as soon as src property is set,
|
|
* but it doesn't block document onload event. */
|
|
var detached_elem_executed = false;
|
|
var detached_elem = document.createElement("script");
|
|
detached_elem.src = "jsstream.php?detached_script";
|
|
|
|
function test_detached_script_elem() {
|
|
var oncomplete_called = false;
|
|
detached_elem.onreadystatechange = guard(function() {
|
|
if(detached_elem.readyState == "complete") {
|
|
ok(detached_elem_executed, "detached element not executed before readyState complete");
|
|
oncomplete_called = true;
|
|
next_test();
|
|
return;
|
|
}
|
|
|
|
ok(!detached_elem_executed, "detached element executed");
|
|
if(detached_elem.readyState == "loaded") {
|
|
head.appendChild(detached_elem);
|
|
ok(detached_elem_executed, "detached element not yet executed");
|
|
ok(detached_elem.readyState == "complete", "detached_elem.readyState = " + detached_elem.readyState + " expected complete");
|
|
ok(!oncomplete_called, "oncomplete not called");
|
|
}
|
|
});
|
|
|
|
external.writeStream("detached_script", 'detached_elem_executed = true;');
|
|
}
|
|
|
|
/* Dynamically created script elements are evaluated as soon as they are loaded, no matter
|
|
* how they are ordered in the tree. */
|
|
var attached_elem1_executed = false;
|
|
var attached_elem1 = document.createElement("script");
|
|
attached_elem1.src = "jsstream.php?attached_script1";
|
|
head.appendChild(attached_elem1);
|
|
|
|
var attached_elem2_executed = false;
|
|
var attached_elem2 = document.createElement("script");
|
|
attached_elem2.src = "jsstream.php?attached_script2";
|
|
head.appendChild(attached_elem2);
|
|
|
|
function test_attached_script_elem() {
|
|
attached_elem1.onreadystatechange = guard(function() {
|
|
ok(attached_elem1.readyState == "loaded", "attached_elem1.readyState = " + attached_elem2.readyState);
|
|
ok(attached_elem1_executed, "attached element 1 not executed before readyState complete");
|
|
next_test();
|
|
});
|
|
|
|
attached_elem2.onreadystatechange = guard(function() {
|
|
ok(attached_elem2.readyState == "loaded", "attached_elem2.readyState = " + attached_elem2.readyState);
|
|
ok(attached_elem2_executed, "attached element 2 not executed before readyState complete");
|
|
|
|
external.writeStream("attached_script1", 'attached_elem1_executed = true;');
|
|
});
|
|
|
|
external.writeStream("attached_script2", 'attached_elem2_executed = true;');
|
|
}
|
|
|
|
function test_dynamic_element() {
|
|
var elem = document.createElement("script");
|
|
var ready_states = "";
|
|
|
|
elem.onreadystatechange = guard(function() {
|
|
ready_states += elem.readyState + ",";
|
|
if(elem.readyState == "loaded")
|
|
next_test();
|
|
});
|
|
|
|
document.body.appendChild(elem);
|
|
elem.src = "jsstream.php?simple";
|
|
external.writeStream("simple", " ");
|
|
}
|
|
|
|
var tests = [
|
|
test_detached_script_elem,
|
|
test_attached_script_elem,
|
|
test_dynamic_element
|
|
];
|