diff options
Diffstat (limited to 'testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-of-promise-result.html')
-rw-r--r-- | testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-of-promise-result.html | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-of-promise-result.html b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-of-promise-result.html new file mode 100644 index 0000000000..5514049c78 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-of-promise-result.html @@ -0,0 +1,83 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>import() inside compiled strings inside a classic script</title> +<link rel="help" href="https://github.com/whatwg/html/pull/3163"> +<link rel="help" href="https://github.com/tc39/ecma262/issues/871#issuecomment-292493142"> +<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<body> +<base href="scripts/foo/"> +<script> +"use strict"; + +// This test is based on the current specification, but all browser +// implementations aren't conformant. See +// https://bugs.chromium.org/p/chromium/issues/detail?id=1245063 +// https://github.com/heycam/webidl/pull/902 + +// Tweak the base URL of the document here to distinguish: +// - document URL +// - document base URL = ../ +// - This inline script's base URL = ./scripts/foo/ +document.querySelector("base").remove(); +const base = document.createElement("base"); +base.setAttribute("href", "../"); +document.body.appendChild(base); + +self.ran = false; + +// The active script for the dynamic import is this inline script +// (see https://html.spec.whatwg.org/C/#hostmakejobcallback). +promise_test(t => { + t.add_cleanup(() => { + self.ran = false; + }) + + return Promise.resolve(`import("../../../imports-a.js?1").then(() => { self.ran = true; })`) + .then(eval) + .then(() => { + assert_true(self.ran); + }); +}, "Evaled the script via eval, successful import"); + +promise_test(t => { + t.add_cleanup(() => { + self.ran = false; + }) + + return Promise.resolve(`import("bad-specifier?1").catch(() => { self.ran = true; })`) + .then(eval) + .then(() => { + assert_true(self.ran); + }); +}, "Evaled the script via eval, failed import"); + +promise_test(t => { + t.add_cleanup(() => { + self.ran = false; + }) + + return Promise.resolve(`return import("../../../imports-a.js?2").then(() => { self.ran = true; })`) + .then(Function) + .then(Function.prototype.call.bind(Function.prototype.call)) + .then(() => { + assert_true(self.ran); + }); +}, "Evaled the script via Function, successful import"); + +promise_test(t => { + t.add_cleanup(() => { + self.ran = false; + }) + + return Promise.resolve(`return import("bad-specifier?2").catch(() => { self.ran = true; })`) + .then(Function) + .then(Function.prototype.call.bind(Function.prototype.call)) + .then(() => { + assert_true(self.ran); + }); +}, "Evaled the script via Function, failed import"); +</script> |