diff options
Diffstat (limited to 'testing/web-platform/tests/worklets/resources/import-tests.js')
-rw-r--r-- | testing/web-platform/tests/worklets/resources/import-tests.js | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/testing/web-platform/tests/worklets/resources/import-tests.js b/testing/web-platform/tests/worklets/resources/import-tests.js new file mode 100644 index 0000000000..0c631a8a9f --- /dev/null +++ b/testing/web-platform/tests/worklets/resources/import-tests.js @@ -0,0 +1,162 @@ +// Runs a series of tests related to importing scripts on a worklet. +// +// Usage: +// runImportTests("paint"); +function runImportTests(worklet_type) { + const worklet = get_worklet(worklet_type); + + promise_test(() => { + const kScriptURL = 'resources/empty-worklet-script.js'; + return worklet.addModule(kScriptURL).then(undefined_arg => { + assert_equals(undefined_arg, undefined, + 'Promise should resolve with no arguments.'); + }); + }, 'Importing a script resolves the given promise.'); + + promise_test(() => { + const kScriptURL = 'resources/empty-worklet-script.js'; + return Promise.all([ + worklet.addModule(kScriptURL + '?1'), + worklet.addModule(kScriptURL + '?2'), + worklet.addModule(kScriptURL + '?3') + ]).then(undefined_args => { + assert_array_equals(undefined_args, + [undefined, undefined, undefined], + 'Promise should resolve with no arguments.'); + }); + }, 'Importing scripts resolves all the given promises.'); + + promise_test(() => { + const kScriptURL = 'resources/import-nested-worklet-script.js'; + return worklet.addModule(kScriptURL).then(undefined_arg => { + assert_equals(undefined_arg, undefined, + 'Promise should resolve with no arguments.'); + }); + }, 'Importing nested scripts resolves the given promise'); + + promise_test(() => { + const kScriptURL = 'resources/import-cyclic-worklet-script.js'; + return worklet.addModule(kScriptURL).then(undefined_arg => { + assert_equals(undefined_arg, undefined, + 'Promise should resolve with no arguments.'); + }); + }, 'Importing cyclic scripts resolves the given promise'); + + promise_test(() => { + const kScriptURL = 'resources/throwing-worklet-script.js'; + return worklet.addModule(kScriptURL).then(undefined_arg => { + assert_equals(undefined_arg, undefined, + 'Promise should resolve with no arguments.'); + }); + }, 'Importing a script which throws should still resolve the given ' + + 'promise.'); + + promise_test(t => { + const kScriptURL = 'non-existent-worklet-script.js'; + return promise_rejects_dom(t, 'AbortError', + worklet.addModule(kScriptURL)); + }, 'Importing a non-existent script rejects the given promise with an ' + + 'AbortError.'); + + promise_test(t => { + const kInvalidScriptURL = 'http://invalid:123$' + return promise_rejects_dom(t, 'SyntaxError', + worklet.addModule(kInvalidScriptURL)); + }, 'Importing an invalid URL should reject the given promise with a ' + + 'SyntaxError.'); + + promise_test(() => { + const kBlob = new Blob([""], {type: 'text/javascript'}); + const kBlobURL = URL.createObjectURL(kBlob); + return worklet.addModule(kBlobURL).then(undefined_arg => { + assert_equals(undefined_arg, undefined); + }); + }, 'Importing a blob URL should resolve the given promise.'); + + promise_test(t => { + const kFileURL = 'file:///empty-worklet-script.js'; + return promise_rejects_dom(t, 'AbortError', + worklet.addModule(kFileURL)); + }, 'Importing a file:// URL should reject the given promise.'); + + promise_test(() => { + const kDataURL = 'data:text/javascript, // Do nothing.'; + return worklet.addModule(kDataURL).then(undefined_arg => { + assert_equals(undefined_arg, undefined); + }); + }, 'Importing a data URL should resolve the given promise.'); + + promise_test(t => { + const kScriptURL = 'about:blank'; + return promise_rejects_dom(t, 'AbortError', + worklet.addModule(kScriptURL)); + }, 'Importing about:blank should reject the given promise.'); + + promise_test(() => { + // Specify the Access-Control-Allow-Origin header to enable cross origin + // access. + const kScriptURL = get_host_info().HTTPS_REMOTE_ORIGIN + + '/worklets/resources/empty-worklet-script.js' + + '?pipe=header(Access-Control-Allow-Origin, *)'; + return worklet.addModule(kScriptURL).then(undefined_arg => { + assert_equals(undefined_arg, undefined); + }); + }, 'Importing a cross origin resource with the ' + + 'Access-Control-Allow-Origin header should resolve the given promise'); + + promise_test(t => { + // Don't specify the Access-Control-Allow-Origin header. addModule() + // should be rejected because of disallowed cross origin access. + const kScriptURL = get_host_info().HTTPS_REMOTE_ORIGIN + + '/worklets/resources/empty-worklet-script.js'; + return promise_rejects_dom(t, 'AbortError', + worklet.addModule(kScriptURL)); + }, 'Importing a cross origin resource without the ' + + 'Access-Control-Allow-Origin header should reject the given promise'); + + promise_test(() => { + const kScriptURL = get_host_info().HTTPS_REMOTE_ORIGIN + + '/worklets/resources/empty-worklet-script.js' + + '?pipe=header(Access-Control-Allow-Origin, ' + + location.origin + ')'; + return worklet.addModule('/common/redirect.py?location=' + + encodeURIComponent(kScriptURL)) + .then(undefined_arg => { + assert_equals(undefined_arg, undefined); + }); + }, 'Importing a cross-origin-redirected resource with the ' + + 'Access-Control-Allow-Origin header should resolve the given promise'); + + promise_test(t => { + const kScriptURL = get_host_info().HTTPS_REMOTE_ORIGIN + + '/worklets/resources/empty-worklet-script.js'; + return promise_rejects_dom(t, 'AbortError', + worklet.addModule( + '/common/redirect.py?location=' + + encodeURIComponent(kScriptURL))); + }, 'Importing a cross-origin-redirected resource without the ' + + 'Access-Control-Allow-Origin header should reject the given promise'); + + promise_test(t => { + const kScriptURL = 'resources/syntax-error-worklet-script.js'; + return promise_rejects_js(t, SyntaxError, + worklet.addModule(kScriptURL)); + }, 'Importing a script that has a syntax error should reject the given ' + + 'promise.'); + + promise_test(t => { + const kScriptURL = 'resources/import-syntax-error-worklet-script.js'; + return promise_rejects_js(t, SyntaxError, + worklet.addModule(kScriptURL)); + }, 'Importing a nested script that has a syntax error should reject the ' + + 'given promise.'); + + promise_test(t => { + const kBlob = new Blob(["import 'invalid-specifier.js';"], + {type: 'text/javascript'}); + const kBlobURL = URL.createObjectURL(kBlob); + return promise_rejects_js(t, TypeError, + worklet.addModule(kBlobURL)); + }, 'Importing a script that imports an invalid identifier should reject ' + + 'the given promise.'); +} |