tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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);