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

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

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

Powered by Google App Engine
This is Rietveld 408576698