| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- // ES6 Module tests for bugfixes
- WScript.LoadScriptFile("..\\UnitTestFramework\\UnitTestFramework.js");
- function testModuleScript(source, message, shouldFail = false) {
- let testfunc = () => testRunner.LoadModule(source, 'samethread', shouldFail);
- if (shouldFail) {
- let caught = false;
- // We can't use assert.throws here because the SyntaxError used to construct the thrown error
- // is from a different context so it won't be strictly equal to our SyntaxError.
- try {
- testfunc();
- } catch(e) {
- caught = true;
- // Compare toString output of SyntaxError and other context SyntaxError constructor.
- assert.areEqual(e.constructor.toString(), SyntaxError.toString(), message);
- }
- assert.isTrue(caught, `Expected error not thrown: ${message}`);
- } else {
- assert.doesNotThrow(testfunc, message);
- }
- }
- var tests = [
- {
- name: "OS12113549: Assertion on module export in ProcessCapturedSym",
- body: function() {
- let functionBody =
- `
- import { module1_exportbinding_0 as module2_localbinding_0 } from 'bug_OS12113549_module1.js';
- assert.areEqual({"BugID": "OS12113549"}, module2_localbinding_0);
- `
- testRunner.LoadModule(functionBody, 'samethread');
- }
- },
- {
- name: "Memory leak test on syntax error",
- body: function() {
- try {
- WScript.LoadModule('');
- WScript.LoadModule('1');
- WScript.LoadModule('const a = () -> {};');
- } catch(e) {
- // no-op
- }
- }
- },
- {
- name: "Issue 4482: Indirect circular module dependencies",
- body: function() {
- let functionBody = "import 'module_4482_dep1.js';"
- testRunner.LoadModule(functionBody);
- }
- },
- {
- name: "Issue 4570: Module that appears multiple times in dependency tree",
- body: function() {
- let functionBody = "import 'module_4570_dep1.js';"
- testRunner.LoadModule(functionBody);
- }
- },
- {
- name: "Issue 5171: Incorrect module load order",
- body: function() {
- WScript.RegisterModuleSource("obj.js", `export const obj = {a:false, b: false, c: false};`);
- WScript.RegisterModuleSource("a.js",`
- import {obj} from "obj.js";
- assert.isTrue(obj.b);
- assert.isFalse(obj.c);
- assert.isFalse(obj.a);
- obj.a = true;`);
- WScript.RegisterModuleSource("b.js",`
- import {obj} from "obj.js";
- assert.isFalse(obj.b);
- assert.isFalse(obj.c);
- assert.isFalse(obj.a);
- obj.b = true;`);
- WScript.RegisterModuleSource("c.js",`
- import {obj} from "obj.js";
- assert.isTrue(obj.b);
- assert.isFalse(obj.c);
- assert.isTrue(obj.a);
- obj.c = true;`);
- const start = 'import "b.js"; import "a.js"; import "c.js";';
- testRunner.LoadModule(start);
- }
- },
- {
- name: "Issue 6261: Specifier dependent module load order",
- body: function() {
- WScript.RegisterModuleSource("dep", `export const obj = {a:false, b: false, c: false};`);
- WScript.RegisterModuleSource("one",`
- import {obj} from "dep";
- assert.isFalse(obj.b);
- assert.isFalse(obj.c);
- assert.isFalse(obj.a);
- obj.a = true;`);
- WScript.RegisterModuleSource("two",`
- import {obj} from "dep";
- assert.isFalse(obj.b);
- assert.isFalse(obj.c);
- assert.isTrue(obj.a);
- obj.b = true;`);
- WScript.RegisterModuleSource("three",`
- import {obj} from "dep";
- assert.isTrue(obj.b);
- assert.isFalse(obj.c);
- assert.isTrue(obj.a);
- obj.c = true;`);
- const start = 'import "one"; import "two"; import "three";';
- testRunner.LoadModule(start);
- }
- },
- {
- // https://github.com/Microsoft/ChakraCore/issues/5501
- name : "Issue 5501: Indirect exports excluded from namespace object - POC 1",
- body()
- {
- WScript.RegisterModuleSource("test5501Part1", `
- export {bar as foo} from "test5501Part1";
- export const bar = 5;
- import * as stuff from "test5501Part1";
- assert.areEqual(stuff.bar, stuff.foo);
- `);
- testRunner.LoadModule("import 'test5501Part1'");
- }
- },
- {
- name : "Issue 5501: Indirect exports excluded from namespace object - POC 2",
- body()
- {
- WScript.RegisterModuleSource("test5501Part2a", "export default function () { return true; }");
- WScript.RegisterModuleSource("test5501Part2b", "export {default as aliasName} from 'test5501Part2a'");
- testRunner.LoadModule(`
- import {aliasName} from 'test5501Part2b';
- assert.isTrue(aliasName());
- `);
- }
- },
- {
- name : "Issue 6133: Child module imports non-existant export from another module",
- body()
- {
- WScript.RegisterModuleSource("test6133a", 'import Default from "test6133b";');
- WScript.RegisterModuleSource("test6133b", 'export function notDefault () {}');
- testRunner.LoadModule('import "test6133a";', undefined, true);
- }
- },
- {
- name : "Issue 5236: Module function exports not hoisted test",
- body()
- {
- WScript.RegisterModuleSource("test5236a", `
- import {default as Default, bar, foo} from "test5236b";
- export default function () {}
- export function one() {}
- export var two = function () {}
- bar();
- assert.isNotUndefined(Default);
- foo();
- `);
- WScript.RegisterModuleSource("test5236b", `
- import Default from "test5236c";
- export function bar() {}
- export default class {}
- export var foo = function () {}
- Default();
- `);
- WScript.RegisterModuleSource("test5236c", `
- import {default as Default, one, two} from "test5236a";
- import otherDefault from "test5236b";
- export default function bar() {}
- Default();
- one();
- assert.isUndefined(two);
- assert.isUndefined(otherDefault);
- `);
- testRunner.LoadModule('import "test5236a";', undefined, false);
- }
- }
- ];
- testRunner.runTests(tests, { verbose: WScript.Arguments[0] != "summary" });
|