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

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

Issue 342453002: Arguments object has @@iterator (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: 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
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 // Note in general that "arguments.foo" and "var o = arguments; o.foo"
9 // are treated differently by full-codegen, and so both cases need to be
10 // tested.
11
12 function TestDirectArgumentsIteratorProperty() {
13 assertTrue(arguments.hasOwnProperty(Symbol.iterator));
14 assertFalse(arguments.propertyIsEnumerable(Symbol.iterator));
15 assertEquals(arguments[Symbol.iterator], [].values);
16 }
17 TestDirectArgumentsIteratorProperty();
18
19
20 function TestIndirectArgumentsIteratorProperty() {
21 var o = arguments;
22 assertTrue(o.hasOwnProperty(Symbol.iterator));
23 assertFalse(o.propertyIsEnumerable(Symbol.iterator));
24 assertEquals(o[Symbol.iterator], [].values);
25 }
26 TestIndirectArgumentsIteratorProperty();
27
28
29 function assertIteratorResult(value, done, result) {
30 assertEquals({value: value, done: done}, result);
31 }
32
33
34 function TestDirectValues1(a, b, c) {
35 var iterator = arguments[Symbol.iterator]();
36 assertIteratorResult(a, false, iterator.next());
37 assertIteratorResult(b, false, iterator.next());
38 assertIteratorResult(c, false, iterator.next());
39 assertIteratorResult(void 0, true, iterator.next());
rossberg 2014/06/26 15:51:53 Nit: no reason to use void 0 instead of undefined
40 }
41 TestDirectValues1(1, 2, 3);
42
43
44 function TestIndirectValues1(a, b, c) {
45 var args = arguments;
46 var iterator = args[Symbol.iterator]();
47 assertIteratorResult(a, false, iterator.next());
48 assertIteratorResult(b, false, iterator.next());
49 assertIteratorResult(c, false, iterator.next());
50 assertIteratorResult(void 0, true, iterator.next());
51 }
52 TestIndirectValues1(1, 2, 3);
53
54
55 function TestDirectValues2(a, b, c) {
56 var iterator = arguments[Symbol.iterator]();
57 assertIteratorResult(a, false, iterator.next());
58 assertIteratorResult(b, false, iterator.next());
59 assertIteratorResult(c, false, iterator.next());
60 assertIteratorResult(void 0, true, iterator.next());
61
62 arguments[3] = 4;
63 arguments.length = 4;
64 assertIteratorResult(void 0, true, iterator.next());
65 }
66 TestDirectValues2(1, 2, 3);
67
68
69 function TestIndirectValues2(a, b, c) {
70 var args = arguments;
71 var iterator = args[Symbol.iterator]();
72 assertIteratorResult(a, false, iterator.next());
73 assertIteratorResult(b, false, iterator.next());
74 assertIteratorResult(c, false, iterator.next());
75 assertIteratorResult(void 0, true, iterator.next());
76
77 arguments[3] = 4;
78 arguments.length = 4;
79 assertIteratorResult(void 0, true, iterator.next());
80 }
81 TestIndirectValues2(1, 2, 3);
82
83
84 function TestDirectValues3(a, b, c) {
85 var iterator = arguments[Symbol.iterator]();
86 assertIteratorResult(a, false, iterator.next());
87 assertIteratorResult(b, false, iterator.next());
88
89 arguments.length = 2;
90 assertIteratorResult(void 0, true, iterator.next());
91 }
92 TestDirectValues3(1, 2, 3);
93
94
95 function TestIndirectValues3(a, b, c) {
96 var args = arguments;
97 var iterator = args[Symbol.iterator]();
98 assertIteratorResult(a, false, iterator.next());
99 assertIteratorResult(b, false, iterator.next());
100
101 arguments.length = 2;
102 assertIteratorResult(void 0, true, iterator.next());
103 }
104 TestIndirectValues3(1, 2, 3);
105
106
107 function TestDirectValues4(a, b, c) {
108 var iterator = arguments[Symbol.iterator]();
109 assertIteratorResult(a, false, iterator.next());
110 assertIteratorResult(b, false, iterator.next());
111 assertIteratorResult(c, false, iterator.next());
112
113 arguments.length = 4;
114 assertIteratorResult(void 0, false, iterator.next());
115 assertIteratorResult(void 0, true, iterator.next());
116 }
117 TestDirectValues4(1, 2, 3);
118
119
120 function TestIndirectValues4(a, b, c) {
rossberg 2014/06/26 15:51:52 It would be good to also test that - changing an
121 var args = arguments;
122 var iterator = args[Symbol.iterator]();
123 assertIteratorResult(a, false, iterator.next());
124 assertIteratorResult(b, false, iterator.next());
125 assertIteratorResult(c, false, iterator.next());
126
127 arguments.length = 4;
128 assertIteratorResult(void 0, false, iterator.next());
129 assertIteratorResult(void 0, true, iterator.next());
130 }
131 TestIndirectValues4(1, 2, 3);
132
133
134 function TestForOf() {
135 var i = 0;
136 for (var value of arguments) {
137 assertEquals(arguments[i++], value);
138 }
139
140 assertEquals(arguments.length, i);
141 }
142 TestForOf(1, 2, 3, 4, 5);
143
144
145 function TestAssignmentToIterator() {
146 var i = 0;
147 arguments[Symbol.iterator] = [].entries;
148 for (var entry of arguments) {
149 assertEquals([i, arguments[i]], entry);
150 i++;
151 }
152
153 assertEquals(arguments.length, i);
154 }
155 TestAssignmentToIterator(1, 2, 3, 4, 5);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698