summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-of-promise-result.html
diff options
context:
space:
mode:
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.html83
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>