OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
| 5 // Flags: --harmony-tostring |
5 | 6 |
6 function TestStringPrototypeIterator() { | 7 function TestStringPrototypeIterator() { |
7 assertTrue(String.prototype.hasOwnProperty(Symbol.iterator)); | 8 assertTrue(String.prototype.hasOwnProperty(Symbol.iterator)); |
8 assertFalse("".hasOwnProperty(Symbol.iterator)); | 9 assertFalse("".hasOwnProperty(Symbol.iterator)); |
9 assertFalse("".propertyIsEnumerable(Symbol.iterator)); | 10 assertFalse("".propertyIsEnumerable(Symbol.iterator)); |
10 } | 11 } |
11 TestStringPrototypeIterator(); | 12 TestStringPrototypeIterator(); |
12 | 13 |
13 | 14 |
14 function assertIteratorResult(value, done, result) { | 15 function assertIteratorResult(value, done, result) { |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 | 53 |
53 | 54 |
54 function TestStringIteratorPrototype() { | 55 function TestStringIteratorPrototype() { |
55 var iterator = ""[Symbol.iterator](); | 56 var iterator = ""[Symbol.iterator](); |
56 var StringIteratorPrototype = iterator.__proto__; | 57 var StringIteratorPrototype = iterator.__proto__; |
57 assertFalse(StringIteratorPrototype.hasOwnProperty('constructor')); | 58 assertFalse(StringIteratorPrototype.hasOwnProperty('constructor')); |
58 assertEquals(StringIteratorPrototype.__proto__, Object.prototype); | 59 assertEquals(StringIteratorPrototype.__proto__, Object.prototype); |
59 assertArrayEquals(['next'], | 60 assertArrayEquals(['next'], |
60 Object.getOwnPropertyNames(StringIteratorPrototype)); | 61 Object.getOwnPropertyNames(StringIteratorPrototype)); |
61 assertEquals('[object String Iterator]', "" + iterator); | 62 assertEquals('[object String Iterator]', "" + iterator); |
| 63 assertEquals("String Iterator", StringIteratorPrototype[Symbol.toStringTag]); |
| 64 var desc = Object.getOwnPropertyDescriptor( |
| 65 StringIteratorPrototype, Symbol.toStringTag); |
| 66 assertTrue(desc.configurable); |
| 67 assertFalse(desc.writable); |
| 68 assertEquals("String Iterator", desc.value); |
62 } | 69 } |
63 TestStringIteratorPrototype(); | 70 TestStringIteratorPrototype(); |
64 | 71 |
65 | 72 |
66 function TestForOf() { | 73 function TestForOf() { |
67 var lo = "\uD834"; | 74 var lo = "\uD834"; |
68 var hi = "\uDF06"; | 75 var hi = "\uDF06"; |
69 var pair = lo + hi; | 76 var pair = lo + hi; |
70 var string = "abc" + pair + "def" + lo + pair + hi + lo; | 77 var string = "abc" + pair + "def" + lo + pair + hi + lo; |
71 var expected = ['a', 'b', 'c', pair, 'd', 'e', 'f', lo, pair, hi, lo]; | 78 var expected = ['a', 'b', 'c', pair, 'd', 'e', 'f', lo, pair, hi, lo]; |
72 | 79 |
73 var i = 0; | 80 var i = 0; |
74 for (var char of string) { | 81 for (var char of string) { |
75 assertEquals(expected[i++], char); | 82 assertEquals(expected[i++], char); |
76 } | 83 } |
77 | 84 |
78 assertEquals(expected.length, i); | 85 assertEquals(expected.length, i); |
79 } | 86 } |
80 TestForOf(); | 87 TestForOf(); |
81 | 88 |
82 | 89 |
83 function TestNonOwnSlots() { | 90 function TestNonOwnSlots() { |
84 var iterator = ""[Symbol.iterator](); | 91 var iterator = ""[Symbol.iterator](); |
85 var object = {__proto__: iterator}; | 92 var object = {__proto__: iterator}; |
86 | 93 |
87 assertThrows(function() { object.next(); }, TypeError); | 94 assertThrows(function() { object.next(); }, TypeError); |
88 } | 95 } |
89 TestNonOwnSlots(); | 96 TestNonOwnSlots(); |
OLD | NEW |