OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2014 the V8 project authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 // Flags: --harmony-iteration | |
6 | |
7 | |
8 function TestStringPrototypeIterator() { | |
9 assertTrue(String.prototype.hasOwnProperty(Symbol.iterator)); | |
10 assertFalse("".hasOwnProperty(Symbol.iterator)); | |
11 assertFalse("".propertyIsEnumerable(Symbol.iterator)); | |
12 } | |
13 TestStringPrototypeIterator(); | |
14 | |
15 | |
16 function assertIteratorResult(value, done, result) { | |
17 assertEquals({value: value, done: done}, result); | |
18 } | |
19 | |
20 | |
21 function TestManualIteration() { | |
22 var string = "abc"; | |
23 var iterator = string[Symbol.iterator](); | |
24 assertIteratorResult('a', false, iterator.next()); | |
25 assertIteratorResult('b', false, iterator.next()); | |
26 assertIteratorResult('c', false, iterator.next()); | |
27 assertIteratorResult(void 0, true, iterator.next()); | |
28 assertIteratorResult(void 0, true, iterator.next()); | |
29 } | |
30 TestManualIteration(); | |
31 | |
32 | |
33 function TestSurrogatePairs() { | |
34 var lo = "\uD834"; | |
35 var hi = "\uDF06"; | |
36 var pair = lo + hi; | |
37 var string = "abc" + pair + "def" + lo + pair + hi + lo; | |
38 var iterator = string[Symbol.iterator](); | |
39 assertIteratorResult('a', false, iterator.next()); | |
40 assertIteratorResult('b', false, iterator.next()); | |
41 assertIteratorResult('c', false, iterator.next()); | |
42 assertIteratorResult(pair, false, iterator.next()); | |
43 assertIteratorResult('d', false, iterator.next()); | |
44 assertIteratorResult('e', false, iterator.next()); | |
45 assertIteratorResult('f', false, iterator.next()); | |
46 assertIteratorResult(lo, false, iterator.next()); | |
47 assertIteratorResult(pair, false, iterator.next()); | |
48 assertIteratorResult(hi, false, iterator.next()); | |
49 assertIteratorResult(lo, false, iterator.next()); | |
50 assertIteratorResult(void 0, true, iterator.next()); | |
51 assertIteratorResult(void 0, true, iterator.next()); | |
52 } | |
53 TestSurrogatePairs(); | |
54 | |
55 | |
56 function TestStringIteratorPrototype() { | |
57 var iterator = ""[Symbol.iterator](); | |
58 var StringIteratorPrototype = iterator.__proto__; | |
59 assertFalse(StringIteratorPrototype.hasOwnProperty('constructor')); | |
60 assertEquals(StringIteratorPrototype.__proto__, Object.prototype); | |
61 assertArrayEquals(['next'], | |
62 Object.getOwnPropertyNames(StringIteratorPrototype)); | |
63 assertEquals('[object String Iterator]', "" + iterator); | |
64 } | |
65 TestStringIteratorPrototype(); | |
66 | |
67 | |
68 function TestForOf() { | |
69 var lo = "\uD834"; | |
70 var hi = "\uDF06"; | |
71 var pair = lo + hi; | |
72 var string = "abc" + pair + "def" + lo + pair + hi + lo; | |
73 var expected = ['a', 'b', 'c', pair, 'd', 'e', 'f', lo, pair, hi, lo]; | |
74 | |
75 var i = 0; | |
76 for (var char of string) { | |
77 assertEquals(expected[i++], char); | |
78 } | |
79 | |
80 assertEquals(expected.length, i); | |
81 } | |
82 TestForOf(); | |
83 | |
84 | |
85 function TestNonOwnSlots() { | |
86 var iterator = ""[Symbol.iterator](); | |
87 var object = {__proto__: iterator}; | |
88 | |
89 assertThrows(function() { | |
90 object.next(); | |
rossberg
2014/06/18 09:33:19
Nit: fits on one line
| |
91 }, TypeError); | |
92 } | |
93 TestNonOwnSlots(); | |
OLD | NEW |