| <!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> |