Mike Pennisi 3dc6d92970 Add tests for module namespace objects
Assert correct behavior of the own properties of module namespace
objects and the essential internal methods of module namespace exotic
objects.
2016-04-01 13:15:16 -04:00

134 lines
4.0 KiB
JavaScript

// Copyright (C) 2016 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-@@iterator
description: Iteration order over exported names
info: >
Iteration should include all non-ambiguous export names ordered as if an
Array of those String values had been sorted using `Array.prototype.sort`
using SortCompare as *comparefunction*.
15.2.1.18 Runtime Semantics: GetModuleNamespace
[...]
3. If namespace is undefined, then
a. Let exportedNames be ? module.GetExportedNames(« »).
b. Let unambiguousNames be a new empty List.
c. For each name that is an element of exportedNames,
i. Let resolution be ? module.ResolveExport(name, « », « »).
ii. If resolution is null, throw a SyntaxError exception.
iii. If resolution is not "ambiguous", append name to
unambiguousNames.
d. Let namespace be ModuleNamespaceCreate(module, unambiguousNames).
4. Return namespace.
9.4.6.12 ModuleNamespaceCreate (module, exports)
[...]
7. Set M's [[Exports]] internal slot to exports.
[...]
26.3.2 [ @@iterator ] ( )
[...]
3. Let exports be the value of N's [[Exports]] internal slot.
4. Return ! CreateListIterator(exports).
flags: [module]
features: [Symbol.iterator]
---*/
var x;
export { x as π }; // u03c0
export { x as az };
export { x as __ };
export { x as za };
export { x as Z };
export { x as \u03bc };
export { x as z };
export { x as zz };
export { x as a };
export { x as A };
export { x as aa };
export { x as λ }; // u03bb
export { x as _ };
export { x as $$ };
export { x as $ };
export default null;
import * as ns from './values-order.js';
var iter = ns[Symbol.iterator]();
var result;
result = iter.next();
assert.sameValue(result.done, false, 'not initially done');
assert.sameValue(result.value, '$');
result = iter.next();
assert.sameValue(result.done, false, 'not done following "$"');
assert.sameValue(result.value, '$$');
result = iter.next();
assert.sameValue(result.done, false, 'not done following "$$"');
assert.sameValue(result.value, 'A');
result = iter.next();
assert.sameValue(result.done, false, 'not done following "A"');
assert.sameValue(result.value, 'Z');
result = iter.next();
assert.sameValue(result.done, false, 'not done following "Z"');
assert.sameValue(result.value, '_');
result = iter.next();
assert.sameValue(result.done, false, 'not done following "_"');
assert.sameValue(result.value, '__');
result = iter.next();
assert.sameValue(result.done, false, 'not done following "__"');
assert.sameValue(result.value, 'a');
result = iter.next();
assert.sameValue(result.done, false, 'not done following "a"');
assert.sameValue(result.value, 'aa');
result = iter.next();
assert.sameValue(result.done, false, 'not done following "aa"');
assert.sameValue(result.value, 'az');
result = iter.next();
assert.sameValue(result.done, false, 'not done following "az"');
assert.sameValue(result.value, 'default');
result = iter.next();
assert.sameValue(result.done, false, 'not done following "default"');
assert.sameValue(result.value, 'z');
result = iter.next();
assert.sameValue(result.done, false, 'not done following "z"');
assert.sameValue(result.value, 'za');
result = iter.next();
assert.sameValue(result.done, false, 'not done following "za"');
assert.sameValue(result.value, 'zz');
result = iter.next();
assert.sameValue(result.done, false, 'not done following "zz"');
assert.sameValue(result.value, '\u03bb');
result = iter.next();
assert.sameValue(result.done, false, 'not done following "\u03bb"');
assert.sameValue(result.value, '\u03bc');
result = iter.next();
assert.sameValue(result.done, false, 'not done following "\u03bc"');
assert.sameValue(result.value, '\u03c0');
result = iter.next();
assert.sameValue(result.done, true, 'done following "\u03c0"');
assert.sameValue(result.value, undefined);
result = iter.next();
assert.sameValue(result.done, true, 'done following exhaustion');
assert.sameValue(result.value, undefined);