Chromium Code Reviews| Index: test/mjsunit/harmony/string-iterator.js |
| diff --git a/test/mjsunit/harmony/string-iterator.js b/test/mjsunit/harmony/string-iterator.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..8ff38ce1ce9e703a0ee8c2cbc09ea6b3c19b22c6 |
| --- /dev/null |
| +++ b/test/mjsunit/harmony/string-iterator.js |
| @@ -0,0 +1,93 @@ |
| +// Copyright 2014 the V8 project authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +// Flags: --harmony-iteration |
| + |
| + |
| +function TestStringPrototypeIterator() { |
| + assertTrue(String.prototype.hasOwnProperty(Symbol.iterator)); |
| + assertFalse("".hasOwnProperty(Symbol.iterator)); |
| + assertFalse("".propertyIsEnumerable(Symbol.iterator)); |
| +} |
| +TestStringPrototypeIterator(); |
| + |
| + |
| +function assertIteratorResult(value, done, result) { |
| + assertEquals({value: value, done: done}, result); |
| +} |
| + |
| + |
| +function TestManualIteration() { |
| + var string = "abc"; |
| + var iterator = string[Symbol.iterator](); |
| + assertIteratorResult('a', false, iterator.next()); |
| + assertIteratorResult('b', false, iterator.next()); |
| + assertIteratorResult('c', false, iterator.next()); |
| + assertIteratorResult(void 0, true, iterator.next()); |
| + assertIteratorResult(void 0, true, iterator.next()); |
| +} |
| +TestManualIteration(); |
| + |
| + |
| +function TestSurrogatePairs() { |
| + var lo = "\uD834"; |
| + var hi = "\uDF06"; |
| + var pair = lo + hi; |
| + var string = "abc" + pair + "def" + lo + pair + hi + lo; |
| + var iterator = string[Symbol.iterator](); |
| + assertIteratorResult('a', false, iterator.next()); |
| + assertIteratorResult('b', false, iterator.next()); |
| + assertIteratorResult('c', false, iterator.next()); |
| + assertIteratorResult(pair, false, iterator.next()); |
| + assertIteratorResult('d', false, iterator.next()); |
| + assertIteratorResult('e', false, iterator.next()); |
| + assertIteratorResult('f', false, iterator.next()); |
| + assertIteratorResult(lo, false, iterator.next()); |
| + assertIteratorResult(pair, false, iterator.next()); |
| + assertIteratorResult(hi, false, iterator.next()); |
| + assertIteratorResult(lo, false, iterator.next()); |
| + assertIteratorResult(void 0, true, iterator.next()); |
| + assertIteratorResult(void 0, true, iterator.next()); |
| +} |
| +TestSurrogatePairs(); |
| + |
| + |
| +function TestStringIteratorPrototype() { |
| + var iterator = ""[Symbol.iterator](); |
| + var StringIteratorPrototype = iterator.__proto__; |
| + assertFalse(StringIteratorPrototype.hasOwnProperty('constructor')); |
| + assertEquals(StringIteratorPrototype.__proto__, Object.prototype); |
| + assertArrayEquals(['next'], |
| + Object.getOwnPropertyNames(StringIteratorPrototype)); |
| + assertEquals('[object String Iterator]', "" + iterator); |
| +} |
| +TestStringIteratorPrototype(); |
| + |
| + |
| +function TestForOf() { |
| + var lo = "\uD834"; |
| + var hi = "\uDF06"; |
| + var pair = lo + hi; |
| + var string = "abc" + pair + "def" + lo + pair + hi + lo; |
| + var expected = ['a', 'b', 'c', pair, 'd', 'e', 'f', lo, pair, hi, lo]; |
| + |
| + var i = 0; |
| + for (var char of string) { |
| + assertEquals(expected[i++], char); |
| + } |
| + |
| + assertEquals(expected.length, i); |
| +} |
| +TestForOf(); |
| + |
| + |
| +function TestNonOwnSlots() { |
| + var iterator = ""[Symbol.iterator](); |
| + var object = {__proto__: iterator}; |
| + |
| + assertThrows(function() { |
| + object.next(); |
|
rossberg
2014/06/18 09:33:19
Nit: fits on one line
|
| + }, TypeError); |
| +} |
| +TestNonOwnSlots(); |