Add more cases for import.meta and new promise instances

This commit is contained in:
Leo Balter 2018-10-23 19:19:57 -04:00 committed by Rick Waldron
parent bcdc613df7
commit 91bf2474c2
2 changed files with 70 additions and 0 deletions

View File

@ -0,0 +1,34 @@
// Copyright (C) 2018 Leo Balter. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: >
ImportCall returns a new instance of Promise
esid: sec-import-call-runtime-semantics-evaluation
info: |
Import Calls
Runtime Semantics: Evaluation
ImportCall : import(AssignmentExpression)
1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
2. Let argRef be the result of evaluating AssignmentExpression.
3. Let specifier be ? GetValue(argRef).
4. Let promiseCapability be ! NewPromiseCapability(%Promise%).
5. Let specifierString be ToString(specifier).
6. IfAbruptRejectPromise(specifierString, promiseCapability).
7. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
8. Return promiseCapability.[[Promise]].
features: [dynamic-import]
---*/
const p1 = import('./dynamic-import-module_FIXTURE.js');
const p2 = import('./dynamic-import-module_FIXTURE.js');
assert.notSameValue(p1, p2, 'the returned promises are not the same, regardless the reference and specifier pair');
assert.sameValue(p1.constructor, Promise, 'p1 constructor is %Promise%');
assert.sameValue(Object.getPrototypeOf(p1), Promise.prototype, 'p1 prototype is %PromisePrototype%');
assert.sameValue(p2.constructor, Promise, 'p2 constructor is %Promise%');
assert.sameValue(Object.getPrototypeOf(p2), Promise.prototype, 'p2 prototype is %PromisePrototype%');

View File

@ -0,0 +1,36 @@
// Copyright (C) 2018 Leo Balter. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: >
Dynamic Import receives an AssignmentExpression (ImportMeta)
esid: prod-ImportCall
info: |
ImportCall [Yield]:
import ( AssignmentExpression[+In, ?Yield] )
Runtime Semantics: Evaluation
ImportCall : import ( AssignmentExpression )
...
5. Let specifierString be ToString(specifier).
6. IfAbruptRejectPromise(specifierString, promiseCapability).
features: [dynamic-import, import.meta]
flags: [module, async]
---*/
const p = import(import.meta);
// We can at least assert p is a promise.
assert.sameValue(Promise.resolve(p), p, 'Assert that p is a promise');
// The keys of import.meta are implementation defined, but we know its
// [[Prototype]] is null. In this case, import() should reject the
// promise it returns, unless a toPrimitive related method is set.
if (!Object.prototype.hasOwnProperty.call(import.meta, 'toString') &&
!Object.prototype.hasOwnProperty.call(import.meta, 'valueOf') &&
!Object.prototype.hasOwnProperty.call(import.meta, Symbol.toPrimitive)) {
p.catch(error => assert.sameValue(error.constructor, TypeError, 'import() cannot resolve import.meta')).then($DONE, $DONE);
} else {
$DONE();
}