blob: d1ebe262ab97ffe275d9604d5a9e0b514d1c5414 [file] [log] [blame]
<!DOCTYPE HTML>
<html>
<script src='test.js'></script>
<script src='execute_async_script.js'></script>
<script>
function resetAsyncScriptInfo() {
delete document[ASYNC_INFO_KEY];
}
function testScriptThrows() {
resetAsyncScriptInfo();
var info = getAsyncScriptInfo();
executeAsyncScript('f(123);', [], true);
assertEquals(StatusCode.JAVASCRIPT_ERROR, info.result.status);
executeAsyncScript('f(123);', [], false);
assertEquals(StatusCode.UNKNOWN_ERROR, info.result.status);
}
function testUserScriptWithArgs() {
resetAsyncScriptInfo();
var injectedArgs = null;
function captureArguments(args) {
injectedArgs = args;
}
// Pass function captureArguments as the first argument. It is used to capture
// the injected arguments to the following script.
var script =
'var args = arguments; args[0](args); args[args.length - 1](args[1]);';
var script_args = [captureArguments, 1];
executeAsyncScript(script, script_args, true);
assertEquals(3, injectedArgs.length);
assertEquals(captureArguments, injectedArgs[0]);
assertEquals(1, injectedArgs[1]);
var info = getAsyncScriptInfo();
assertEquals(0, info.result.status);
assertEquals(1, info.result.value);
assertEquals(2, info.id);
}
function testNonUserScript() {
resetAsyncScriptInfo();
var info = getAsyncScriptInfo();
executeAsyncScript('arguments[1](arguments[0])', [33], false);
assertEquals(0, info.result.status);
assertEquals(33, info.result.value);
executeAsyncScript('arguments[2](new Error("ERR"))', [33], false);
assertEquals(StatusCode.UNKNOWN_ERROR, info.result.status);
assertEquals(0, info.result.value.indexOf('ERR'));
executeAsyncScript('var e = new Error("ERR"); e.code = 111; arguments[1](e)',
[], false);
assertEquals(111, info.result.status);
assertEquals(0, info.result.value.indexOf('ERR'));
}
function testNoResultBeforeTimeout() {
resetAsyncScriptInfo();
var info = getAsyncScriptInfo();
executeAsyncScript(
'var a = arguments; window.setTimeout(function() {a[0](33)}, 0);',
[], true, 0);
assert(!info.result);
}
function testZeroTimeout(runner) {
resetAsyncScriptInfo();
var info = getAsyncScriptInfo();
executeAsyncScript(
'var a = arguments; window.setTimeout(function() {a[0](33)}, 0);',
[], true, 0);
window.setTimeout(function() {
assertEquals(0, info.result.status);
assertEquals(33, info.result.value);
runner.continueTesting();
}, 0);
runner.waitForAsync();
}
function testUserScriptTimesOut(runner) {
resetAsyncScriptInfo();
var info = getAsyncScriptInfo();
executeAsyncScript('', [], true, 500);
window.setTimeout(function() {
assertEquals(StatusCode.SCRIPT_TIMEOUT, info.result.status);
assert(info.result.value.indexOf('0.5') != -1);
runner.continueTesting();
}, 500);
runner.waitForAsync();
}
function testNonUserScriptTimesOut(runner) {
resetAsyncScriptInfo();
var info = getAsyncScriptInfo();
executeAsyncScript('', [], false, 500);
window.setTimeout(function() {
assertEquals(StatusCode.UNKNOWN_ERROR, info.result.status);
assert(info.result.value.indexOf('0.5') != -1);
runner.continueTesting();
}, 500);
runner.waitForAsync();
}
function testFirstScriptFinishAfterSecondScriptExecute() {
resetAsyncScriptInfo();
executeAsyncScript(
'var f = arguments[0]; setTimeout(function(){ f(1); }, 100000);', []);
var info = getAsyncScriptInfo();
assert(!info.hasOwnProperty('result'));
assertEquals(1, info.id);
executeAsyncScript('var fn = arguments[0]; fn(2);', []);
assertEquals(0, info.result.status);
assertEquals(2, info.result.value);
assertEquals(3, info.id);
}
</script>
<body>
</body>
</html>