Index: test/mjsunit/modules-namespace1.js |
diff --git a/test/mjsunit/modules-namespace1.js b/test/mjsunit/modules-namespace1.js |
index 29d1a5e459419eb593f5486d5be0872929cf6469..beb469efa4e1651a257c1ccf6ca7130d5df5b201 100644 |
--- a/test/mjsunit/modules-namespace1.js |
+++ b/test/mjsunit/modules-namespace1.js |
@@ -22,9 +22,8 @@ assertSame(null, Reflect.getPrototypeOf(foo)); |
assertTrue(Reflect.setPrototypeOf(foo, null)); |
assertFalse(Reflect.setPrototypeOf(foo, {})); |
assertSame(null, Reflect.getPrototypeOf(foo)); |
-// TODO(neis): The next one should include @@iterator at the end. |
assertEquals( |
- ["bla", "foo_again", "yo", Symbol.toStringTag], |
+ ["bla", "foo_again", "yo", Symbol.toStringTag, Symbol.iterator], |
Reflect.ownKeys(foo)); |
// Its "yo" property. |
@@ -52,13 +51,39 @@ assertEquals( |
{value: "Module", configurable: true, writable: false, enumerable: false}, |
Reflect.getOwnPropertyDescriptor(foo, Symbol.toStringTag)); |
-// TODO(neis): Its @@iterator property. |
-// assertTrue(Reflect.has(foo, Symbol.iterator)); |
-// assertEquals("function", typeof Reflect.get(foo, Symbol.iterator)); |
-// assertEquals(["bla", "yo"], [...foo]); |
-// assertThrows(() => (42, foo[Symbol.iterator])(), TypeError); |
-// assertSame(foo[Symbol.iterator]().__proto__, |
-// ([][Symbol.iterator]()).__proto__.__proto__); |
+// Its @@iterator property. |
+assertTrue(Reflect.has(foo, Symbol.iterator)); |
+assertEquals("function", typeof Reflect.get(foo, Symbol.iterator)); |
+assertEquals("[Symbol.iterator]", foo[Symbol.iterator].name); |
+assertEquals(0, foo[Symbol.iterator].length); |
+assertSame(Function.prototype, foo[Symbol.iterator].__proto__); |
+assertEquals( |
+ {value: foo[Symbol.iterator], |
+ configurable: true, writable: true, enumerable: false}, |
+ Reflect.getOwnPropertyDescriptor(foo, Symbol.iterator)); |
+assertEquals(["bla", "foo_again", "yo"], [...foo]); |
+assertThrows(() => (42, foo[Symbol.iterator])(), TypeError); |
+{ |
+ let it = foo[Symbol.iterator](); |
+ assertSame(it.__proto__, ([][Symbol.iterator]()).__proto__.__proto__); |
+ assertEquals(["next"], Reflect.ownKeys(it)); |
+ assertEquals( |
+ {value: it.next, configurable: true, writable: true, enumerable: false}, |
+ Reflect.getOwnPropertyDescriptor(it, "next")); |
+ assertEquals("function", typeof it.next); |
+ assertEquals("next", it.next.name); |
+ assertEquals(0, it.next.length); |
+ assertSame(Function.prototype, it.next.__proto__); |
+ assertFalse(it === foo[Symbol.iterator]()); |
+ assertFalse(it.next === foo[Symbol.iterator]().next); |
+ assertThrows(() => (42, it.next)(), TypeError); |
+ assertThrows(() => it.next.call(foo[Symbol.iterator]()), TypeError); |
+ let next = it.next; |
+ assertEquals(42, (it.next = 42, it.next)); |
+ assertEquals(43, (it.bla = 43, it.bla)); |
+ assertTrue(delete it.next); |
+ assertThrows(() => next.call(foo[Symbol.iterator]()), TypeError); |
+} |
// TODO(neis): Clarify spec w.r.t. other symbols. |
@@ -74,7 +99,7 @@ for (let key of nonexistant) { |
} |
// The actual star import that we are testing. Namespace imports are |
-// initialized before evaluation |
+// initialized before evaluation. |
import * as foo from "modules-namespace1.js"; |
// There can be only one namespace object. |