diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /dom/base/test/jsmodules | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
51 files changed, 1084 insertions, 0 deletions
diff --git a/dom/base/test/jsmodules/.eslintrc.js b/dom/base/test/jsmodules/.eslintrc.js new file mode 100644 index 0000000000..f811aa790b --- /dev/null +++ b/dom/base/test/jsmodules/.eslintrc.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + parserOptions: { + sourceType: "module", + }, +}; diff --git a/dom/base/test/jsmodules/chrome.ini b/dom/base/test/jsmodules/chrome.ini new file mode 100644 index 0000000000..02a37a0ecf --- /dev/null +++ b/dom/base/test/jsmodules/chrome.ini @@ -0,0 +1,51 @@ +[DEFAULT] +support-files = + module_setRan.js + module_testSyntax.js + module_badSyntax.js + module_simpleImport.js + module_simpleExport.js + module_badImport.js + module_simple1.js + module_simple2.js + module_simple3.js + module_cyclic1.js + module_cyclic2.js + module_cyclic3.js + module_multiImports.js + module_multiLargeImports.js + script_simple2.js + module_large1.js + module_large2.js + module_large3.js + module_extractIntroType.js + iframe_extractIntroType.html + module_missingImport.js + +[test_moduleScriptsRun.html] +[test_moduleParsedAsModule.html] +[test_scriptNotParsedAsModule.html] +[test_typeAttrCaseInsensitive.html] +[test_moduleNotFound.html] +[test_importNotFound.html] +[test_syntaxError.html] +[test_syntaxErrorAsync.html] +[test_syntaxErrorInline.html] +[test_syntaxErrorInlineAsync.html] +[test_simpleImport.html] +[test_cyclicImport.html] +[test_importResolveFailed.html] +[test_multiTopLevelImports.html] +[test_multiModuleImports.html] +[test_multiAsyncImports.html] +[test_scriptModuleOrder.html] +[test_toplevelModuleMemoization.html] +[test_importedModuleMemoization.html] +[test_multiTopLevelLargeImports.html] +[test_multiModuleLargeImports.html] +[test_asyncInlineModules.html] +[test_scriptInsertedModule.html] +[test_linkErrorInCommon1.html] +[test_linkErrorInCommon2.html] +[test_topLevelIntroType.html] +[test_importIntroType.html] diff --git a/dom/base/test/jsmodules/iframe_extractIntroType.html b/dom/base/test/jsmodules/iframe_extractIntroType.html new file mode 100644 index 0000000000..bd3fc89ec0 --- /dev/null +++ b/dom/base/test/jsmodules/iframe_extractIntroType.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + // Hook up the debugger statement to extract the calling script's + // introductionType and set it in a property on the parent global. + const {addSandboxedDebuggerToGlobal} = ChromeUtils.import("resource://gre/modules/jsdebugger.jsm"); + addSandboxedDebuggerToGlobal(this); + var dbg = new Debugger; + dbg.addDebuggee(parent); + dbg.onDebuggerStatement = function (frame) { + parent.introType = frame.script.source.introductionType; + } +</script> diff --git a/dom/base/test/jsmodules/module_badImport.js b/dom/base/test/jsmodules/module_badImport.js new file mode 100644 index 0000000000..ab18249156 --- /dev/null +++ b/dom/base/test/jsmodules/module_badImport.js @@ -0,0 +1 @@ +import "invalid specifier"; diff --git a/dom/base/test/jsmodules/module_badSyntax.js b/dom/base/test/jsmodules/module_badSyntax.js new file mode 100644 index 0000000000..744158108c --- /dev/null +++ b/dom/base/test/jsmodules/module_badSyntax.js @@ -0,0 +1,3 @@ +// Module with a syntax error. +some invalid js syntax; +wasRun = true; diff --git a/dom/base/test/jsmodules/module_cyclic1.js b/dom/base/test/jsmodules/module_cyclic1.js new file mode 100644 index 0000000000..480efee0ae --- /dev/null +++ b/dom/base/test/jsmodules/module_cyclic1.js @@ -0,0 +1,8 @@ +import { func2 } from "./module_cyclic2.js"; + +export function func1(x, y) { + if (x <= 0) { + return y; + } + return func2(x - 1, y + "1"); +} diff --git a/dom/base/test/jsmodules/module_cyclic2.js b/dom/base/test/jsmodules/module_cyclic2.js new file mode 100644 index 0000000000..5f17afbd0a --- /dev/null +++ b/dom/base/test/jsmodules/module_cyclic2.js @@ -0,0 +1,8 @@ +import { func3 } from "./module_cyclic3.js"; + +export function func2(x, y) { + if (x <= 0) { + return y; + } + return func3(x - 1, y + "2"); +} diff --git a/dom/base/test/jsmodules/module_cyclic3.js b/dom/base/test/jsmodules/module_cyclic3.js new file mode 100644 index 0000000000..4b4c1e4ff6 --- /dev/null +++ b/dom/base/test/jsmodules/module_cyclic3.js @@ -0,0 +1,8 @@ +import { func1 } from "./module_cyclic1.js"; + +export function func3(x, y) { + if (x <= 0) { + return y; + } + return func1(x - 1, y + "3"); +} diff --git a/dom/base/test/jsmodules/module_extractIntroType.js b/dom/base/test/jsmodules/module_extractIntroType.js new file mode 100644 index 0000000000..e73ab8c0cf --- /dev/null +++ b/dom/base/test/jsmodules/module_extractIntroType.js @@ -0,0 +1,5 @@ +// Extract the introductionType for this module in conjunction with +// iframe_extractIntroType.html. +extractIntroType = function() { + debugger; +}; diff --git a/dom/base/test/jsmodules/module_large1.js b/dom/base/test/jsmodules/module_large1.js new file mode 100644 index 0000000000..d6933d298d --- /dev/null +++ b/dom/base/test/jsmodules/module_large1.js @@ -0,0 +1,78 @@ +/* + * Scripts larger than 5KB may be compiled off main thread. This is such a + * script. + * + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + */ + +results.push(1); diff --git a/dom/base/test/jsmodules/module_large2.js b/dom/base/test/jsmodules/module_large2.js new file mode 100644 index 0000000000..e1b6da4c91 --- /dev/null +++ b/dom/base/test/jsmodules/module_large2.js @@ -0,0 +1,78 @@ +/* + * Scripts larger than 5KB may be compiled off main thread. This is such a + * script. + * + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + */ + +results.push(2); diff --git a/dom/base/test/jsmodules/module_large3.js b/dom/base/test/jsmodules/module_large3.js new file mode 100644 index 0000000000..c966a8eb20 --- /dev/null +++ b/dom/base/test/jsmodules/module_large3.js @@ -0,0 +1,78 @@ +/* + * Scripts larger than 5KB may be compiled off main thread. This is such a + * script. + * + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + * large large large large large large large large large large large large + */ + +results.push(3); diff --git a/dom/base/test/jsmodules/module_missingImport.js b/dom/base/test/jsmodules/module_missingImport.js new file mode 100644 index 0000000000..28cf608de8 --- /dev/null +++ b/dom/base/test/jsmodules/module_missingImport.js @@ -0,0 +1 @@ +import { missing } from "./module_simple1.js"; diff --git a/dom/base/test/jsmodules/module_multiImports.js b/dom/base/test/jsmodules/module_multiImports.js new file mode 100644 index 0000000000..0587ac5ca0 --- /dev/null +++ b/dom/base/test/jsmodules/module_multiImports.js @@ -0,0 +1,4 @@ +import "./module_simple1.js"; +import "./module_simple2.js"; +import "./module_simple3.js"; +results.push(4); diff --git a/dom/base/test/jsmodules/module_multiLargeImports.js b/dom/base/test/jsmodules/module_multiLargeImports.js new file mode 100644 index 0000000000..ddc5792d0d --- /dev/null +++ b/dom/base/test/jsmodules/module_multiLargeImports.js @@ -0,0 +1,4 @@ +import "./module_large1.js"; +import "./module_large2.js"; +import "./module_large3.js"; +results.push(4); diff --git a/dom/base/test/jsmodules/module_setRan.js b/dom/base/test/jsmodules/module_setRan.js new file mode 100644 index 0000000000..4804382fdd --- /dev/null +++ b/dom/base/test/jsmodules/module_setRan.js @@ -0,0 +1,2 @@ +// Set a global flag to indicate that this module was executed. +moduleRan = true; diff --git a/dom/base/test/jsmodules/module_simple1.js b/dom/base/test/jsmodules/module_simple1.js new file mode 100644 index 0000000000..7594ac699e --- /dev/null +++ b/dom/base/test/jsmodules/module_simple1.js @@ -0,0 +1 @@ +results.push(1); diff --git a/dom/base/test/jsmodules/module_simple2.js b/dom/base/test/jsmodules/module_simple2.js new file mode 100644 index 0000000000..f92a1c9d6e --- /dev/null +++ b/dom/base/test/jsmodules/module_simple2.js @@ -0,0 +1 @@ +results.push(2); diff --git a/dom/base/test/jsmodules/module_simple3.js b/dom/base/test/jsmodules/module_simple3.js new file mode 100644 index 0000000000..71979926e6 --- /dev/null +++ b/dom/base/test/jsmodules/module_simple3.js @@ -0,0 +1 @@ +results.push(3); diff --git a/dom/base/test/jsmodules/module_simpleExport.js b/dom/base/test/jsmodules/module_simpleExport.js new file mode 100644 index 0000000000..9714d6d0ab --- /dev/null +++ b/dom/base/test/jsmodules/module_simpleExport.js @@ -0,0 +1 @@ +export let x = 42; diff --git a/dom/base/test/jsmodules/module_simpleImport.js b/dom/base/test/jsmodules/module_simpleImport.js new file mode 100644 index 0000000000..9e459fef7a --- /dev/null +++ b/dom/base/test/jsmodules/module_simpleImport.js @@ -0,0 +1,2 @@ +import { x } from "./module_simpleExport.js"; +result = x; diff --git a/dom/base/test/jsmodules/module_testSyntax.js b/dom/base/test/jsmodules/module_testSyntax.js new file mode 100644 index 0000000000..3d647ae0b4 --- /dev/null +++ b/dom/base/test/jsmodules/module_testSyntax.js @@ -0,0 +1,3 @@ +// Module that throws a syntax error if parsed as a script. +export default 1; +wasRun = true; diff --git a/dom/base/test/jsmodules/moz.build b/dom/base/test/jsmodules/moz.build new file mode 100644 index 0000000000..1a7d5281ea --- /dev/null +++ b/dom/base/test/jsmodules/moz.build @@ -0,0 +1,7 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +MOCHITEST_CHROME_MANIFESTS += ["chrome.ini"] diff --git a/dom/base/test/jsmodules/script_simple2.js b/dom/base/test/jsmodules/script_simple2.js new file mode 100644 index 0000000000..f92a1c9d6e --- /dev/null +++ b/dom/base/test/jsmodules/script_simple2.js @@ -0,0 +1 @@ +results.push(2); diff --git a/dom/base/test/jsmodules/test_asyncInlineModules.html b/dom/base/test/jsmodules/test_asyncInlineModules.html new file mode 100644 index 0000000000..188146e69c --- /dev/null +++ b/dom/base/test/jsmodules/test_asyncInlineModules.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test async inline modules</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var results = []; + + SimpleTest.waitForExplicitFinish(); + + function arrayEquals(a, b) { + if (a.length != b.length) { + return false; + } + for (let i = 0; i < a.length; i++) { + if (a[i] != b[i]) { + return false; + } + return true; + } + } + + function testLoaded() { + ok(arrayEquals(results.sort(), [1, 2, 3]), 'Check modules imported'); + SimpleTest.finish(); + } +</script> +<script type="module" async> + results.push(1); +</script> +<script type="module" async> + import "./module_simple2.js"; +</script> +<script type="module" async> + results.push(3); +</script> +<body onload='testLoaded()'></body> diff --git a/dom/base/test/jsmodules/test_cyclicImport.html b/dom/base/test/jsmodules/test_cyclicImport.html new file mode 100644 index 0000000000..d316a140d4 --- /dev/null +++ b/dom/base/test/jsmodules/test_cyclicImport.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test cyclic module imports</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var result; + + SimpleTest.waitForExplicitFinish(); + + function testLoaded() { + SimpleTest.finish(); + } +</script> +<script type="module"> + import { func1 } from "./module_cyclic1.js"; + ok(func1(5, "") == "12312"); +</script> +<body onload='testLoaded()'></body> diff --git a/dom/base/test/jsmodules/test_importIntroType.html b/dom/base/test/jsmodules/test_importIntroType.html new file mode 100644 index 0000000000..67c08bb5d7 --- /dev/null +++ b/dom/base/test/jsmodules/test_importIntroType.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test introduction type of an imported module</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var introType; + var extractIntroType; + + info('start'); + SimpleTest.waitForExplicitFinish(); + + function testIntroductionType() { + extractIntroType(); + ok(introType == "importedModule", 'Check introduction type'); + SimpleTest.finish(); + } +</script> +<iframe src="iframe_extractIntroType.html"></iframe> +<script type="module"> +import "./module_extractIntroType.js"; +</script> +<body onload='testIntroductionType()'></body> diff --git a/dom/base/test/jsmodules/test_importNotFound.html b/dom/base/test/jsmodules/test_importNotFound.html new file mode 100644 index 0000000000..fc624b6b68 --- /dev/null +++ b/dom/base/test/jsmodules/test_importNotFound.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test what happens when a module import is not found</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var wasRun = false; + var errorCount = 0; + var eventCount = 0; + + SimpleTest.waitForExplicitFinish(); + + window.onerror = function(message, url, line, column, error) { + errorCount++; + } + + function testError() { + ok(!wasRun, 'Check script was not run'); + ok(eventCount == 1, 'Check that an error event was fired'); + ok(errorCount == 0, 'Check that no error was reported'); + SimpleTest.finish(); + } +</script> +<script type="module" onerror="eventCount++"> +import "./nonExistentModule.js"; +wasRun = true; +</script> +<body onload='testError()'></body> diff --git a/dom/base/test/jsmodules/test_importResolveFailed.html b/dom/base/test/jsmodules/test_importResolveFailed.html new file mode 100644 index 0000000000..559de77dcd --- /dev/null +++ b/dom/base/test/jsmodules/test_importResolveFailed.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test error thrown when an import cannot be resolved</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var hadTypeError = false; + + SimpleTest.waitForExplicitFinish(); + window.onerror = handleError; + + function handleError(message, url, line, column, error) { + hadTypeError = error instanceof TypeError; + } + + function testError() { + ok(hadTypeError, 'Check that a TypeError was thrown'); + SimpleTest.finish(); + } +</script> +<script type="module" src="module_badImport.js"></script> +<body onload='testError()'></body> diff --git a/dom/base/test/jsmodules/test_importedModuleMemoization.html b/dom/base/test/jsmodules/test_importedModuleMemoization.html new file mode 100644 index 0000000000..37cb26752d --- /dev/null +++ b/dom/base/test/jsmodules/test_importedModuleMemoization.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test imported modules are momoized and only loaded once</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var results = []; + + SimpleTest.waitForExplicitFinish(); + + function arrayEquals(a, b) { + if (a.length != b.length) { + return false; + } + for (let i = 0; i < a.length; i++) { + if (a[i] != b[i]) { + return false; + } + return true; + } + } + + function testLoaded() { + ok(arrayEquals(results, [1, 2, 3, 4]), 'Check modules only evaluated once'); + SimpleTest.finish(); + } +</script> +<script type="module" src="module_multiImports.js"></script> +<script type="module" src="module_multiImports.js"></script> +<script type="module" src="module_multiImports.js"></script> +<body onload='testLoaded()'></body> diff --git a/dom/base/test/jsmodules/test_linkErrorInCommon1.html b/dom/base/test/jsmodules/test_linkErrorInCommon1.html new file mode 100644 index 0000000000..436493c75e --- /dev/null +++ b/dom/base/test/jsmodules/test_linkErrorInCommon1.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test handling of a link error in a common module</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var runCount = 0; + var hadSyntaxError = false; + + SimpleTest.waitForExplicitFinish(); + window.onerror = handleError; + + function handleError(message, url, line, column, error) { + if (error instanceof SyntaxError) { + hadSyntaxError = true; + } + } + + function testError() { + ok(runCount == 0, 'Check no modules were executed'); + ok(hadSyntaxError, 'Check that an error was reported'); + SimpleTest.finish(); + } +</script> +<script type="module"> + import { missing } from "./module_simple1.js"; + runCount++; +</script> +<script type="module"> + import { missing } from "./module_simple1.js"; + runCount++; +</script> +<body onload='testError()'></body> diff --git a/dom/base/test/jsmodules/test_linkErrorInCommon2.html b/dom/base/test/jsmodules/test_linkErrorInCommon2.html new file mode 100644 index 0000000000..a882ec0992 --- /dev/null +++ b/dom/base/test/jsmodules/test_linkErrorInCommon2.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test handling of a link error in a common module</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var runCount = 0; + var hadSyntaxError = false; + + SimpleTest.waitForExplicitFinish(); + window.onerror = handleError; + + function handleError(message, url, line, column, error) { + if (error instanceof SyntaxError) { + hadSyntaxError = true; + } + } + + function testError() { + ok(runCount == 0, 'Check no modules were executed'); + ok(hadSyntaxError, 'Check that an error was reported'); + SimpleTest.finish(); + } +</script> +<script type="module"> + import "./module_missingImport.js"; + runCount++; +</script> +<script type="module"> + import "./module_missingImport.js"; + runCount++; +</script> +<body onload='testError()'></body> diff --git a/dom/base/test/jsmodules/test_moduleNotFound.html b/dom/base/test/jsmodules/test_moduleNotFound.html new file mode 100644 index 0000000000..f5e7c37364 --- /dev/null +++ b/dom/base/test/jsmodules/test_moduleNotFound.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test what happens when a top-level module is not found</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var wasRun = false; + var errorCount = 0; + var eventCount = 0; + + SimpleTest.waitForExplicitFinish(); + + window.onerror = function(message, url, line, column, error) { + errorCount++; + } + + function testError() { + ok(eventCount == 1, 'Check that an error event was fired'); + ok(errorCount == 0, 'Check that no error was reported'); + SimpleTest.finish(); + } +</script> +<script type="module" src="./nonExistentModule.js" onerror="eventCount++"> +</script> +<body onload='testError()'></body> diff --git a/dom/base/test/jsmodules/test_moduleParsedAsModule.html b/dom/base/test/jsmodules/test_moduleParsedAsModule.html new file mode 100644 index 0000000000..2cd4abbd57 --- /dev/null +++ b/dom/base/test/jsmodules/test_moduleParsedAsModule.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test module script parsed as module</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var wasRun = false; + var hadSyntaxError = false; + + SimpleTest.waitForExplicitFinish(); + window.onerror = handleError; + + function handleError(message, url, line, column, error) { + hadSyntaxError = error instanceof SyntaxError; + } + + function testError() { + ok(wasRun, 'Check module was run'); + ok(!hadSyntaxError, 'Check that no SyntaxError was thrown'); + SimpleTest.finish(); + } +</script> +<script type="module" src="module_testSyntax.js"></script> +<body onload='testError()'></body> diff --git a/dom/base/test/jsmodules/test_moduleScriptsRun.html b/dom/base/test/jsmodules/test_moduleScriptsRun.html new file mode 100644 index 0000000000..908f7ff46a --- /dev/null +++ b/dom/base/test/jsmodules/test_moduleScriptsRun.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test script elements with type="module" are run for chrome HTML</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var inlineModuleRan = false; + var moduleRan = false; + + SimpleTest.waitForExplicitFinish(); + + function testLoaded() { + ok(moduleRan, 'Check module script was run'); + ok(inlineModuleRan, 'Check inline module script was run'); + SimpleTest.finish(); + } +</script> +<script type="module" src="module_setRan.js"></script> +<script type="module">inlineModuleRan = true;</script> +<body onload='testLoaded()'></body> diff --git a/dom/base/test/jsmodules/test_multiAsyncImports.html b/dom/base/test/jsmodules/test_multiAsyncImports.html new file mode 100644 index 0000000000..dc318851c8 --- /dev/null +++ b/dom/base/test/jsmodules/test_multiAsyncImports.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test a loading multiple modules with the async attribute from top level</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var results = []; + + SimpleTest.waitForExplicitFinish(); + + function arrayEquals(a, b) { + if (a.length != b.length) { + return false; + } + for (let i = 0; i < a.length; i++) { + if (a[i] != b[i]) { + return false; + } + return true; + } + } + + function testLoaded() { + ok(arrayEquals(results.sort(), [1, 2, 3]), 'Check modules imported'); + SimpleTest.finish(); + } +</script> +<script type="module" src="module_simple1.js" async></script> +<script type="module" src="module_simple2.js" async></script> +<script type="module" src="module_simple3.js" async></script> +<body onload='testLoaded()'></body> diff --git a/dom/base/test/jsmodules/test_multiModuleImports.html b/dom/base/test/jsmodules/test_multiModuleImports.html new file mode 100644 index 0000000000..003f7e6754 --- /dev/null +++ b/dom/base/test/jsmodules/test_multiModuleImports.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test a importing multiple modules from a module</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var results = []; + + SimpleTest.waitForExplicitFinish(); + + function arrayEquals(a, b) { + if (a.length != b.length) { + return false; + } + for (let i = 0; i < a.length; i++) { + if (a[i] != b[i]) { + return false; + } + return true; + } + } + + function testLoaded() { + ok(arrayEquals(results, [1, 2, 3, 4]), 'Check modules imported'); + SimpleTest.finish(); + } +</script> +<script type="module" src="module_multiImports.js"></script> +<body onload='testLoaded()'></body> diff --git a/dom/base/test/jsmodules/test_multiModuleLargeImports.html b/dom/base/test/jsmodules/test_multiModuleLargeImports.html new file mode 100644 index 0000000000..f590bae449 --- /dev/null +++ b/dom/base/test/jsmodules/test_multiModuleLargeImports.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test importing multiple large modules which may be compiled off main thread from a module</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var results = []; + + SimpleTest.waitForExplicitFinish(); + + function arrayEquals(a, b) { + if (a.length != b.length) { + return false; + } + for (let i = 0; i < a.length; i++) { + if (a[i] != b[i]) { + return false; + } + return true; + } + } + + function testLoaded() { + ok(arrayEquals(results, [1, 2, 3, 4]), 'Check modules imported'); + SimpleTest.finish(); + } +</script> +<script type="module" src="module_multiLargeImports.js"></script> +<body onload='testLoaded()'></body> diff --git a/dom/base/test/jsmodules/test_multiTopLevelImports.html b/dom/base/test/jsmodules/test_multiTopLevelImports.html new file mode 100644 index 0000000000..7cfe600959 --- /dev/null +++ b/dom/base/test/jsmodules/test_multiTopLevelImports.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test importing multiple modules from top level</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var results = []; + + SimpleTest.waitForExplicitFinish(); + + function arrayEquals(a, b) { + if (a.length != b.length) { + return false; + } + for (let i = 0; i < a.length; i++) { + if (a[i] != b[i]) { + return false; + } + return true; + } + } + + function testLoaded() { + ok(arrayEquals(results, [1, 2, 3]), 'Check modules imported'); + SimpleTest.finish(); + } +</script> +<script type="module" src="module_simple1.js"></script> +<script type="module" src="module_simple2.js"></script> +<script type="module" src="module_simple3.js"></script> +<body onload='testLoaded()'></body> diff --git a/dom/base/test/jsmodules/test_multiTopLevelLargeImports.html b/dom/base/test/jsmodules/test_multiTopLevelLargeImports.html new file mode 100644 index 0000000000..8deee5479e --- /dev/null +++ b/dom/base/test/jsmodules/test_multiTopLevelLargeImports.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test a importing large modules which may be compiled off main thread</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var results = []; + + SimpleTest.waitForExplicitFinish(); + + function arrayEquals(a, b) { + if (a.length != b.length) { + return false; + } + for (let i = 0; i < a.length; i++) { + if (a[i] != b[i]) { + return false; + } + return true; + } + } + + function testLoaded() { + ok(arrayEquals(results, [1, 2, 3]), 'Check modules imported'); + SimpleTest.finish(); + } +</script> +<script type="module" src="module_large1.js"></script> +<script type="module" src="module_simple2.js"></script> +<script type="module" src="module_large3.js"></script> +<body onload='testLoaded()'></body> diff --git a/dom/base/test/jsmodules/test_scriptInsertedModule.html b/dom/base/test/jsmodules/test_scriptInsertedModule.html new file mode 100644 index 0000000000..3f00ab9684 --- /dev/null +++ b/dom/base/test/jsmodules/test_scriptInsertedModule.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test a script-inserted module</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var result; + + let script = document.createElement("script"); + script.type = "module"; + script.src = "./module_simpleImport.js"; + document.head.appendChild(script); + + SimpleTest.waitForExplicitFinish(); + + function testLoaded() { + ok(result == 42); + SimpleTest.finish(); + } +</script> +<body onload='testLoaded()'></body> diff --git a/dom/base/test/jsmodules/test_scriptModuleOrder.html b/dom/base/test/jsmodules/test_scriptModuleOrder.html new file mode 100644 index 0000000000..bd8a4dcebe --- /dev/null +++ b/dom/base/test/jsmodules/test_scriptModuleOrder.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test execution order of deferred scripts and modules </title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var results = []; + + SimpleTest.waitForExplicitFinish(); + + function arrayEquals(a, b) { + if (a.length != b.length) { + return false; + } + for (let i = 0; i < a.length; i++) { + if (a[i] != b[i]) { + return false; + } + return true; + } + } + + function testLoaded() { + ok(arrayEquals(results, [1, 2, 3]), 'Check execution order'); + SimpleTest.finish(); + } +</script> +<script type="module" src="module_simple1.js"></script> +<script defer src="script_simple2.js"></script> +<script type="module" src="module_simple3.js"></script> +<body onload='testLoaded()'></body> diff --git a/dom/base/test/jsmodules/test_scriptNotParsedAsModule.html b/dom/base/test/jsmodules/test_scriptNotParsedAsModule.html new file mode 100644 index 0000000000..ba09503503 --- /dev/null +++ b/dom/base/test/jsmodules/test_scriptNotParsedAsModule.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test classic script not parsed as module</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var wasRun = false; + var hadSyntaxError = false; + + SimpleTest.waitForExplicitFinish(); + window.onerror = handleError; + + function handleError(message, url, line, column, error) { + hadSyntaxError = error instanceof SyntaxError; + } + + function testError() { + ok(!wasRun, 'Check script was not run'); + ok(hadSyntaxError, 'Check that a SyntaxError was thrown'); + SimpleTest.finish(); + } +</script> +<script src="module_testSyntax.js"></script> +<body onload='testError()'></body> diff --git a/dom/base/test/jsmodules/test_simpleImport.html b/dom/base/test/jsmodules/test_simpleImport.html new file mode 100644 index 0000000000..3c1af3f5b6 --- /dev/null +++ b/dom/base/test/jsmodules/test_simpleImport.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test a simple module import</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var result; + + SimpleTest.waitForExplicitFinish(); + + function testLoaded() { + ok(result == 42, 'Check imported value'); + SimpleTest.finish(); + } +</script> +<script type="module" src="module_simpleImport.js"></script> +<body onload='testLoaded()'></body> diff --git a/dom/base/test/jsmodules/test_syntaxError.html b/dom/base/test/jsmodules/test_syntaxError.html new file mode 100644 index 0000000000..180c5aa445 --- /dev/null +++ b/dom/base/test/jsmodules/test_syntaxError.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test syntax errors parsing a module are reported</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var wasRun = false; + var errorCount = 0; + var syntaxErrorCount = 0; + var eventCount = 0; + + SimpleTest.waitForExplicitFinish(); + window.onerror = handleError; + + function handleError(message, url, line, column, error) { + errorCount++; + if (error instanceof SyntaxError) { + syntaxErrorCount++; + } + } + + function testError() { + ok(!wasRun, 'Check script was not run'); + ok(errorCount == 1, 'Check that an error was reported'); + ok(syntaxErrorCount == 1, 'Check that a syntax error was reported'); + ok(eventCount == 0, 'Check that no error event was fired'); + SimpleTest.finish(); + } +</script> +<script type="module" src="module_badSyntax.js" onerror="eventCount++"></script> +<body onload='testError()'></body> diff --git a/dom/base/test/jsmodules/test_syntaxErrorAsync.html b/dom/base/test/jsmodules/test_syntaxErrorAsync.html new file mode 100644 index 0000000000..64d8e6a21c --- /dev/null +++ b/dom/base/test/jsmodules/test_syntaxErrorAsync.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test syntax errors parsing an async module are reported</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var wasRun = false; + var errorCount = 0; + var syntaxErrorCount = 0; + var eventCount = 0; + + SimpleTest.waitForExplicitFinish(); + window.onerror = handleError; + + function handleError(message, url, line, column, error) { + errorCount++; + if (error instanceof SyntaxError) { + syntaxErrorCount++; + } + } + + function testError() { + ok(!wasRun, 'Check script was not run'); + ok(errorCount == 1, 'Check that an error was reported'); + ok(syntaxErrorCount == 1, 'Check that a syntax error was reported'); + ok(eventCount == 0, 'Check that no error event was fired'); + SimpleTest.finish(); + } +</script> +<script type="module" src="module_badSyntax.js" async onerror="eventCount++"></script> +<body onload='testError()'></body> diff --git a/dom/base/test/jsmodules/test_syntaxErrorInline.html b/dom/base/test/jsmodules/test_syntaxErrorInline.html new file mode 100644 index 0000000000..4960f5358a --- /dev/null +++ b/dom/base/test/jsmodules/test_syntaxErrorInline.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test syntax errors parsing an inline module are reported</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var wasRun = false; + var errorCount = 0; + var syntaxErrorCount = 0; + var eventCount = 0; + + SimpleTest.waitForExplicitFinish(); + window.onerror = handleError; + + function handleError(message, url, line, column, error) { + errorCount++; + if (error instanceof SyntaxError) { + syntaxErrorCount++; + } + } + + function testError() { + ok(!wasRun, 'Check script was not run'); + ok(errorCount == 1, 'Check that an error was reported'); + ok(syntaxErrorCount == 1, 'Check that a syntax error was reported'); + ok(eventCount == 0, 'Check that no error event was fired'); + SimpleTest.finish(); + } +</script> +<script type="module" onerror="eventCount++"> +// Module with a syntax error. +some invalid js syntax; +wasRun = true; +</script> +<body onload='testError()'></body> diff --git a/dom/base/test/jsmodules/test_syntaxErrorInlineAsync.html b/dom/base/test/jsmodules/test_syntaxErrorInlineAsync.html new file mode 100644 index 0000000000..39b8a7354d --- /dev/null +++ b/dom/base/test/jsmodules/test_syntaxErrorInlineAsync.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test syntax errors parsing an inline async module are reported</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var wasRun = false; + var errorCount = 0; + var syntaxErrorCount = 0; + var eventCount = 0; + + SimpleTest.waitForExplicitFinish(); + window.onerror = handleError; + + function handleError(message, url, line, column, error) { + errorCount++; + if (error instanceof SyntaxError) { + syntaxErrorCount++; + } + } + + function testError() { + ok(!wasRun, 'Check script was not run'); + ok(errorCount == 1, 'Check that an error was reported'); + ok(syntaxErrorCount == 1, 'Check that a syntax error was reported'); + ok(eventCount == 0, 'Check that no error event was fired'); + SimpleTest.finish(); + } +</script> +<script type="module" async onerror="eventCount++"> +// Module with a syntax error. +some invalid js syntax; +wasRun = true; +</script> +<body onload='testError()'></body> diff --git a/dom/base/test/jsmodules/test_topLevelIntroType.html b/dom/base/test/jsmodules/test_topLevelIntroType.html new file mode 100644 index 0000000000..2c9c91b5bd --- /dev/null +++ b/dom/base/test/jsmodules/test_topLevelIntroType.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test introduction type of a top-level module</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var introType; + var extractIntroType; + + info('start'); + SimpleTest.waitForExplicitFinish(); + + function testIntroductionType() { + extractIntroType(); + ok(introType == "srcScript", 'Check introduction type'); + SimpleTest.finish(); + } +</script> +<iframe src="iframe_extractIntroType.html"></iframe> +<script type="module" src="module_extractIntroType.js"> +</script> +<body onload='testIntroductionType()'></body> diff --git a/dom/base/test/jsmodules/test_toplevelModuleMemoization.html b/dom/base/test/jsmodules/test_toplevelModuleMemoization.html new file mode 100644 index 0000000000..ed4dee6f8b --- /dev/null +++ b/dom/base/test/jsmodules/test_toplevelModuleMemoization.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test toplevel modules are momoized and only loaded once</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var results = []; + + SimpleTest.waitForExplicitFinish(); + + function arrayEquals(a, b) { + if (a.length != b.length) { + return false; + } + for (let i = 0; i < a.length; i++) { + if (a[i] != b[i]) { + return false; + } + return true; + } + } + + function testLoaded() { + ok(arrayEquals(results, [1]), 'Check execution order'); + SimpleTest.finish(); + } +</script> +<script type="module" src="module_simple1.js"></script> +<script type="module" src="module_simple1.js"></script> +<script type="module" src="module_simple1.js"></script> +<body onload='testLoaded()'></body> diff --git a/dom/base/test/jsmodules/test_typeAttrCaseInsensitive.html b/dom/base/test/jsmodules/test_typeAttrCaseInsensitive.html new file mode 100644 index 0000000000..47ebc90dd6 --- /dev/null +++ b/dom/base/test/jsmodules/test_typeAttrCaseInsensitive.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test script element's type attribute comparision is case-insensitive</title> +<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<script> + var inlineModuleRan = false; + var moduleRan = false; + + SimpleTest.waitForExplicitFinish(); + + function testLoaded() { + ok(moduleRan, 'Check module script was run'); + ok(inlineModuleRan, 'Check inline module script was run'); + SimpleTest.finish(); + } +</script> +<script type="MODULE" src="module_setRan.js"></script> +<script type="mOdUlE">inlineModuleRan = true;</script> +<body onload='testLoaded()'></body> |