| // Copyright (C) 2018 Rick Waldron. All rights reserved. |
| // This code is governed by the BSD license found in the LICENSE file. |
| /*--- |
| description: Script is evaluated exactly once after loaded by import |
| esid: sec-hostimportmoduledynamically |
| info: | |
| Success path |
| |
| The completion value of any subsequent call to HostResolveImportedModule after |
| FinishDynamicImport has completed, given the arguments referencingScriptOrModule |
| and specifier, must be a module which has already been evaluated, i.e. whose |
| Evaluate concrete method has already been called and returned a normal completion. |
| |
| This test is meant to __not__ be flagged as module code, it should not initially |
| run as module code or the result will not be the same. |
| includes: [fnGlobalObject.js] |
| flags: [async] |
| features: [dynamic-import] |
| ---*/ |
| |
| var global = fnGlobalObject(); |
| |
| var isFirstScript = typeof global.evaluated === 'undefined'; |
| if (isFirstScript) { |
| global.evaluated = 0; |
| } |
| |
| global.evaluated++; |
| |
| var p = Promise.all([ |
| import('./eval-self-once-script.js'), |
| import('./eval-self-once-script.js'), |
| ]).then(async () => { |
| // Use await to serialize imports |
| await import('./eval-self-once-script.js'); |
| await import('./eval-self-once-script.js'); |
| |
| assert.sameValue(global.evaluated, 2, 'global property was defined once and incremented twice'); |
| }); |
| |
| if (isFirstScript) { |
| p.then($DONE, $DONE); |
| } |