Chromium Code Reviews| Index: test/mjsunit/harmony/array-iterator.js |
| diff --git a/test/mjsunit/harmony/array-iterator.js b/test/mjsunit/harmony/array-iterator.js |
| index 2642d7b2318e3355ccd0a547207fbe089c1217f8..f6addebd01c4c0c0590a99d0ec364965f4bb4ab9 100644 |
| --- a/test/mjsunit/harmony/array-iterator.js |
| +++ b/test/mjsunit/harmony/array-iterator.js |
| @@ -28,14 +28,28 @@ |
| // Flags: --harmony-iteration --allow-natives-syntax |
| +var NONE = 0; |
| +var READ_ONLY = 1; |
| +var DONT_ENUM = 2; |
| +var DONT_DELETE = 4; |
| + |
| + |
| +function assertHasOwnProperty(object, name, attrs) { |
| + assertTrue(object.hasOwnProperty(name)); |
| + var desc = Object.getOwnPropertyDescriptor(object, name); |
| + assertEquals(desc.writable, !(attrs & READ_ONLY)); |
| + assertEquals(desc.enumerable, !(attrs & DONT_ENUM)); |
| + assertEquals(desc.configurable, !(attrs & DONT_DELETE)); |
| +} |
| + |
| + |
| function TestArrayPrototype() { |
| - assertTrue(Array.prototype.hasOwnProperty('entries')); |
| - assertTrue(Array.prototype.hasOwnProperty('values')); |
| - assertTrue(Array.prototype.hasOwnProperty('keys')); |
| + assertHasOwnProperty(Array.prototype, 'entries', DONT_ENUM); |
| + assertHasOwnProperty(Array.prototype, 'values', DONT_ENUM); |
| + assertHasOwnProperty(Array.prototype, 'keys', DONT_ENUM); |
| + assertHasOwnProperty(Array.prototype, Symbol.iterator, DONT_ENUM); |
| - assertFalse(Array.prototype.propertyIsEnumerable('entries')); |
| - assertFalse(Array.prototype.propertyIsEnumerable('values')); |
| - assertFalse(Array.prototype.propertyIsEnumerable('keys')); |
| + assertEquals(Array.prototype.values, Array.prototype[Symbol.iterator]); |
| } |
| TestArrayPrototype(); |
| @@ -127,16 +141,6 @@ TestEntriesMutate(); |
| function TestArrayIteratorPrototype() { |
| - var ArrayIteratorPrototype = [].values().__proto__; |
| - assertFalse(ArrayIteratorPrototype.hasOwnProperty('constructor')); |
| - assertEquals(ArrayIteratorPrototype.__proto__, Object.prototype); |
| - assertArrayEquals(['next'], |
| - Object.getOwnPropertyNames(ArrayIteratorPrototype)); |
| -} |
| -TestArrayIteratorPrototype(); |
| - |
| - |
| -function TestArrayIteratorPrototype() { |
| var array = []; |
| var iterator = array.values(); |
| @@ -155,6 +159,8 @@ function TestArrayIteratorPrototype() { |
| assertFalse(ArrayIteratorPrototype.hasOwnProperty('constructor')); |
| assertArrayEquals(['next'], |
| Object.getOwnPropertyNames(ArrayIteratorPrototype)); |
| + assertHasOwnProperty(ArrayIteratorPrototype, 'next', DONT_ENUM); |
| + assertHasOwnProperty(ArrayIteratorPrototype, Symbol.iterator, DONT_ENUM); |
| } |
| TestArrayIteratorPrototype(); |
| @@ -216,6 +222,24 @@ function TestForArrayEntries() { |
| TestForArrayEntries(); |
| +function TestForArray() { |
| + var buffer = []; |
| + var array = [0, 'a', true, false, null, /* hole */, undefined, NaN]; |
| + var i = 0; |
| + for (var value of array) { |
| + buffer[i++] = value; |
| + } |
| + |
| + assertEquals(8, buffer.length); |
| + |
| + for (var i = 0; i < buffer.length - 1; i++) { |
| + assertEquals(array[i], buffer[i]); |
|
rossberg
2014/06/18 09:25:45
Use assertSame to avoid the special case for NaN.
rossberg
2014/06/25 07:52:39
Just saw that you changed this to assertSame, but
|
| + } |
| + assertTrue(isNaN(buffer[buffer.length - 1])); |
| +} |
| +TestForArrayValues(); |
| + |
| + |
| function TestNonOwnSlots() { |
| var array = [0]; |
| var iterator = array.values(); |