Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Side by Side Diff: test/mjsunit/harmony/string-iterator.js

Issue 335423002: Add @@iterator support for strings (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fixed @@iterator property attributes Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « test/mjsunit/harmony/iteration-semantics.js ('k') | tools/generate-runtime-tests.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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();
OLDNEW
« no previous file with comments | « test/mjsunit/harmony/iteration-semantics.js ('k') | tools/generate-runtime-tests.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698