ambiguous-star-export.js (1303B)
1 // Test ambigious export * statements. 2 3 "use strict"; 4 5 load(libdir + "asserts.js"); 6 7 function checkModuleEval(source) { 8 let m = parseModule(source); 9 moduleLink(m); 10 moduleEvaluate(m); 11 return m; 12 } 13 14 function checkModuleSyntaxError(source) { 15 let m = parseModule(source); 16 assertThrowsInstanceOf(() => moduleLink(m), SyntaxError); 17 } 18 19 let a = registerModule('a', parseModule("export var a = 1; export var b = 2;")); 20 let b = registerModule('b', parseModule("export var b = 3; export var c = 4;")); 21 let c = registerModule('c', parseModule("export * from 'a'; export * from 'b';")); 22 moduleLink(c); 23 moduleEvaluate(c); 24 25 // Check importing/exporting non-ambiguous name works. 26 let d = checkModuleEval("import { a } from 'c';"); 27 assertEq(getModuleEnvironmentValue(d, "a"), 1); 28 checkModuleEval("export { a } from 'c';"); 29 30 // Check importing/exporting ambiguous name is a syntax error. 31 checkModuleSyntaxError("import { b } from 'c';"); 32 checkModuleSyntaxError("export { b } from 'c';"); 33 34 // Check that namespace objects include only non-ambiguous names. 35 let m = parseModule("import * as ns from 'c';"); 36 moduleLink(m); 37 moduleEvaluate(m); 38 let ns = c.namespace; 39 let names = Object.keys(ns); 40 assertEq(names.length, 2); 41 assertEq('a' in ns, true); 42 assertEq('b' in ns, false); 43 assertEq('c' in ns, true);