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

Side by Side Diff: test/mjsunit/harmony/computed-property-names-classes.js

Issue 798243004: ES6 computed property names (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Disable test on windows Created 5 years, 11 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
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 'use strict';
6
7 // Flags: --harmony-computed-property-names --harmony-classes
8
9
10 function ID(x) {
11 return x;
12 }
13
14
15 (function TestClassMethodString() {
16 class C {
17 a() { return 'A'}
18 ['b']() { return 'B'; }
19 c() { return 'C'; }
20 [ID('d')]() { return 'D'; }
21 }
22 assertEquals('A', new C().a());
23 assertEquals('B', new C().b());
24 assertEquals('C', new C().c());
25 assertEquals('D', new C().d());
26 assertArrayEquals(['a', 'b', 'c', 'd'], Object.keys(C.prototype));
27 })();
28
29
30 (function TestClassMethodNumber() {
31 class C {
32 a() { return 'A'; }
33 [1]() { return 'B'; }
34 c() { return 'C'; }
35 [ID(2)]() { return 'D'; }
36 }
37 assertEquals('A', new C().a());
38 assertEquals('B', new C()[1]());
39 assertEquals('C', new C().c());
40 assertEquals('D', new C()[2]());
41 // Array indexes first.
42 assertArrayEquals(['1', '2', 'a', 'c'], Object.keys(C.prototype));
43 })();
44
45
46 (function TestClassMethodSymbol() {
47 var sym1 = Symbol();
48 var sym2 = Symbol();
49 class C {
50 a() { return 'A'; }
51 [sym1]() { return 'B'; }
52 c() { return 'C'; }
53 [ID(sym2)]() { return 'D'; }
54 }
55 assertEquals('A', new C().a());
56 assertEquals('B', new C()[sym1]());
57 assertEquals('C', new C().c());
58 assertEquals('D', new C()[sym2]());
59 assertArrayEquals(['a', 'c'], Object.keys(C.prototype));
60 assertArrayEquals([sym1, sym2], Object.getOwnPropertySymbols(C.prototype));
61 })();
62
63
64
65 (function TestStaticClassMethodString() {
66 class C {
67 static a() { return 'A'}
68 static ['b']() { return 'B'; }
69 static c() { return 'C'; }
70 static ['d']() { return 'D'; }
71 }
72 assertEquals('A', C.a());
73 assertEquals('B', C.b());
74 assertEquals('C', C.c());
75 assertEquals('D', C.d());
76 assertArrayEquals(['a', 'b', 'c', 'd'], Object.keys(C));
77 })();
78
79
80 (function TestStaticClassMethodNumber() {
81 class C {
82 static a() { return 'A'; }
83 static [1]() { return 'B'; }
84 static c() { return 'C'; }
85 static [2]() { return 'D'; }
86 }
87 assertEquals('A', C.a());
88 assertEquals('B', C[1]());
89 assertEquals('C', C.c());
90 assertEquals('D', C[2]());
91 // Array indexes first.
92 assertArrayEquals(['1', '2', 'a', 'c'], Object.keys(C));
93 })();
94
95
96 (function TestStaticClassMethodSymbol() {
97 var sym1 = Symbol();
98 var sym2 = Symbol();
99 class C {
100 static a() { return 'A'; }
101 static [sym1]() { return 'B'; }
102 static c() { return 'C'; }
103 static [sym2]() { return 'D'; }
104 }
105 assertEquals('A', C.a());
106 assertEquals('B', C[sym1]());
107 assertEquals('C', C.c());
108 assertEquals('D', C[sym2]());
109 assertArrayEquals(['a', 'c'], Object.keys(C));
110 assertArrayEquals([sym1, sym2], Object.getOwnPropertySymbols(C));
111 })();
112
113
114
115 function assertIteratorResult(value, done, result) {
116 assertEquals({ value: value, done: done}, result);
117 }
118
119
120 (function TestGeneratorComputedName() {
121 class C {
122 *['a']() {
123 yield 1;
124 yield 2;
125 }
126 }
127 var iter = new C().a();
128 assertIteratorResult(1, false, iter.next());
129 assertIteratorResult(2, false, iter.next());
130 assertIteratorResult(undefined, true, iter.next());
131 assertArrayEquals(['a'], Object.keys(C.prototype));
132 })();
133
134
135 (function TestToNameSideEffects() {
136 var counter = 0;
137 var key1 = {
138 toString: function() {
139 assertEquals(0, counter++);
140 return 'b';
141 }
142 };
143 var key2 = {
144 toString: function() {
145 assertEquals(1, counter++);
146 return 'd';
147 }
148 };
149 class C {
150 a() { return 'A'; }
151 [key1]() { return 'B'; }
152 c() { return 'C'; }
153 [key2]() { return 'D'; }
154 }
155 assertEquals(2, counter);
156 assertEquals('A', new C().a());
157 assertEquals('B', new C().b());
158 assertEquals('C', new C().c());
159 assertEquals('D', new C().d());
160 assertArrayEquals(['a', 'b', 'c', 'd'], Object.keys(C.prototype));
161 })();
162
163
164 (function TestToNameSideEffectsNumbers() {
165 var counter = 0;
166 var key1 = {
167 valueOf: function() {
168 assertEquals(0, counter++);
169 return 1;
170 },
171 toString: null
172 };
173 var key2 = {
174 valueOf: function() {
175 assertEquals(1, counter++);
176 return 2;
177 },
178 toString: null
179 };
180
181 class C {
182 a() { return 'A'; }
183 [key1]() { return 'B'; }
184 c() { return 'C'; }
185 [key2]() { return 'D'; }
186 }
187 assertEquals(2, counter);
188 assertEquals('A', new C().a());
189 assertEquals('B', new C()[1]());
190 assertEquals('C', new C().c());
191 assertEquals('D', new C()[2]());
192 // Array indexes first.
193 assertArrayEquals(['1', '2', 'a', 'c'], Object.keys(C.prototype));
194 })();
195
196
197 (function TestGetter() {
198 class C {
199 get ['a']() {
200 return 'A';
201 }
202 }
203 assertEquals('A', new C().a);
204
205 class C2 {
206 get b() {
207 assertUnreachable();
208 }
209 get ['b']() {
210 return 'B';
211 }
212 }
213 assertEquals('B', new C2().b);
214
215 class C3 {
216 get c() {
217 assertUnreachable();
218 }
219 get ['c']() {
220 assertUnreachable();
221 }
222 get ['c']() {
223 return 'C';
224 }
225 }
226 assertEquals('C', new C3().c);
227
228 class C4 {
229 get ['d']() {
230 assertUnreachable();
231 }
232 get d() {
233 return 'D';
234 }
235 }
236 assertEquals('D', new C4().d);
237 })();
238
239
240 (function TestSetter() {
241 var calls = 0;
242 class C {
243 set ['a'](_) {
244 calls++;
245 }
246 }
247 new C().a = 'A';
248 assertEquals(1, calls);
249
250 calls = 0;
251 class C2 {
252 set b(_) {
253 assertUnreachable();
254 }
255 set ['b'](_) {
256 calls++;
257 }
258 }
259 new C2().b = 'B';
260 assertEquals(1, calls);
261
262 calls = 0;
263 class C3 {
264 set c(_) {
265 assertUnreachable()
266 }
267 set ['c'](_) {
268 assertUnreachable()
269 }
270 set ['c'](_) {
271 calls++
272 }
273 }
274 new C3().c = 'C';
275 assertEquals(1, calls);
276
277 calls = 0;
278 class C4 {
279 set ['d'](_) {
280 assertUnreachable()
281 }
282 set d(_) {
283 calls++
284 }
285 }
286 new C4().d = 'D';
287 assertEquals(1, calls);
288 })();
289
290
291 (function TestPrototype() {
292 // Normally a static prototype property is not allowed.
293 class C {
294 static ['prototype']() {
295 return 1;
296 }
297 }
298 assertEquals(1, C.prototype());
299
300 class C2 {
301 static get ['prototype']() {
302 return 2;
303 }
304 }
305 assertEquals(2, C2.prototype);
306
307 var calls = 0;
308 class C3 {
309 static set ['prototype'](x) {
310 assertEquals(3, x);
311 calls++;
312 }
313 }
314 C3.prototype = 3;
315 assertEquals(1, calls);
316
317 class C4 {
318 static *['prototype']() {
319 yield 1;
320 yield 2;
321 }
322 }
323 var iter = C4.prototype();
324 assertIteratorResult(1, false, iter.next());
325 assertIteratorResult(2, false, iter.next());
326 assertIteratorResult(undefined, true, iter.next());
327 })();
328
329
330 (function TestConstructor() {
331 // Normally a constructor property is not allowed.
332 class C {
333 ['constructor']() {
334 return 1;
335 }
336 }
337 assertTrue(C !== C.prototype.constructor);
338 assertEquals(1, new C().constructor());
339
340 class C2 {
341 get ['constructor']() {
342 return 2;
343 }
344 }
345 assertEquals(2, new C2().constructor);
346
347 var calls = 0;
348 class C3 {
349 set ['constructor'](x) {
350 assertEquals(3, x);
351 calls++;
352 }
353 }
354 new C3().constructor = 3;
355 assertEquals(1, calls);
356
357 class C4 {
358 *['constructor']() {
359 yield 1;
360 yield 2;
361 }
362 }
363 var iter = new C4().constructor();
364 assertIteratorResult(1, false, iter.next());
365 assertIteratorResult(2, false, iter.next());
366 assertIteratorResult(undefined, true, iter.next());
367 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698