// Copyright (C) 2018 Rick Waldron. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- description: Module is evaluated exactly once esid: sec-moduleevaluation info: | [...] 4. If module.[[Evaluated]] is true, return undefined. 5. Set module.[[Evaluated]] to true. 6. For each String required that is an element of module.[[RequestedModules]] do, a. Let requiredModule be ? HostResolveImportedModule(module, required). b. Perform ? requiredModule.ModuleEvaluation(). [...] This test is meant to be flagged as module code, it should not initially run as script code or the result will not be the same. includes: [fnGlobalObject.js] flags: [async, module] features: [dynamic-import] ---*/ var global = fnGlobalObject(); if (typeof global.evaluated === 'undefined') { global.evaluated = 0; } global.evaluated++; Promise.all([ import('./eval-self-once-module.js'), import('./eval-self-once-module.js'), ]).then(async () => { // Use await to serialize imports await import('./eval-self-once-module.js'); await import('./eval-self-once-module.js'); assert.sameValue(global.evaluated, 1, 'global property was defined and incremented only once'); }).then($DONE, $DONE);