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

Side by Side Diff: test/mjsunit/harmony/classes.js

Issue 1213813003: [es6] Remove harmony-classes flag (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Remove empty flags field from json Created 5 years, 5 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 // Flags: --harmony-classes --harmony-sloppy
6
7 (function TestBasics() {
8 var C = class C {}
9 assertEquals(typeof C, 'function');
10 assertEquals(C.__proto__, Function.prototype);
11 assertEquals(Object.prototype, Object.getPrototypeOf(C.prototype));
12 assertEquals(Function.prototype, Object.getPrototypeOf(C));
13 assertEquals('C', C.name);
14
15 class D {}
16 assertEquals(typeof D, 'function');
17 assertEquals(D.__proto__, Function.prototype);
18 assertEquals(Object.prototype, Object.getPrototypeOf(D.prototype));
19 assertEquals(Function.prototype, Object.getPrototypeOf(D));
20 assertEquals('D', D.name);
21
22 class D2 { constructor() {} }
23 assertEquals('D2', D2.name);
24
25 // TODO(arv): The logic for the name of anonymous functions in ES6 requires
26 // the below to be 'E';
27 var E = class {}
28 assertEquals('', E.name); // Should be 'E'.
29
30 var F = class { constructor() {} };
31 assertEquals('', F.name); // Should be 'F'.
32 })();
33
34
35 (function TestBasicsExtends() {
36 class C extends null {}
37 assertEquals(typeof C, 'function');
38 assertEquals(C.__proto__, Function.prototype);
39 assertEquals(null, Object.getPrototypeOf(C.prototype));
40
41 class D extends C {}
42 assertEquals(typeof D, 'function');
43 assertEquals(D.__proto__, C);
44 assertEquals(C.prototype, Object.getPrototypeOf(D.prototype));
45 })();
46
47
48 (function TestSideEffectInExtends() {
49 var calls = 0;
50 class C {}
51 class D extends (calls++, C) {}
52 assertEquals(1, calls);
53 assertEquals(typeof D, 'function');
54 assertEquals(D.__proto__, C);
55 assertEquals(C.prototype, Object.getPrototypeOf(D.prototype));
56 })();
57
58
59 (function TestInvalidExtends() {
60 assertThrows(function() {
61 class C extends 42 {}
62 }, TypeError);
63
64 assertThrows(function() {
65 // Function but its .prototype is not null or a function.
66 class C extends Math.abs {}
67 }, TypeError);
68
69 assertThrows(function() {
70 Math.abs.prototype = 42;
71 class C extends Math.abs {}
72 }, TypeError);
73 delete Math.abs.prototype;
74
75 assertThrows(function() {
76 function* g() {}
77 class C extends g {}
78 }, TypeError);
79 })();
80
81
82 (function TestConstructorProperty() {
83 class C {}
84 assertEquals(C, C.prototype.constructor);
85 var descr = Object.getOwnPropertyDescriptor(C.prototype, 'constructor');
86 assertTrue(descr.configurable);
87 assertFalse(descr.enumerable);
88 assertTrue(descr.writable);
89 })();
90
91
92 (function TestPrototypeProperty() {
93 class C {}
94 var descr = Object.getOwnPropertyDescriptor(C, 'prototype');
95 assertFalse(descr.configurable);
96 assertFalse(descr.enumerable);
97 assertFalse(descr.writable);
98 })();
99
100
101 (function TestConstructor() {
102 var count = 0;
103 class C {
104 constructor() {
105 assertEquals(Object.getPrototypeOf(this), C.prototype);
106 count++;
107 }
108 }
109 assertEquals(C, C.prototype.constructor);
110 var descr = Object.getOwnPropertyDescriptor(C.prototype, 'constructor');
111 assertTrue(descr.configurable);
112 assertFalse(descr.enumerable);
113 assertTrue(descr.writable);
114
115 var c = new C();
116 assertEquals(1, count);
117 assertEquals(Object.getPrototypeOf(c), C.prototype);
118 })();
119
120
121 (function TestImplicitConstructor() {
122 class C {}
123 var c = new C();
124 assertEquals(Object.getPrototypeOf(c), C.prototype);
125 })();
126
127
128 (function TestConstructorStrict() {
129 class C {
130 constructor() {
131 assertThrows(function() {
132 nonExistingBinding = 42;
133 }, ReferenceError);
134 }
135 }
136 new C();
137 })();
138
139
140 (function TestSuperInConstructor() {
141 var calls = 0;
142 class B {}
143 B.prototype.x = 42;
144
145 class C extends B {
146 constructor() {
147 super();
148 calls++;
149 assertEquals(42, super.x);
150 }
151 }
152
153 new C;
154 assertEquals(1, calls);
155 })();
156
157
158 (function TestStrictMode() {
159 class C {}
160
161 with ({a: 1}) {
162 assertEquals(1, a);
163 }
164
165 assertThrows('class C extends function B() { with ({}); return B; }() {}',
166 SyntaxError);
167
168 var D = class extends function() {
169 arguments.caller;
170 } {};
171 assertThrows(function() {
172 Object.getPrototypeOf(D).arguments;
173 }, TypeError);
174 assertThrows(function() {
175 new D;
176 }, TypeError);
177 })();
178
179
180 (function TestToString() {
181 class C {}
182 assertEquals('class C {}', C.toString());
183
184 class D { constructor() { 42; } }
185 assertEquals('class D { constructor() { 42; } }', D.toString());
186
187 class E { x() { 42; } }
188 assertEquals('class E { x() { 42; } }', E.toString());
189 })();
190
191
192 function assertMethodDescriptor(object, name) {
193 var descr = Object.getOwnPropertyDescriptor(object, name);
194 assertTrue(descr.configurable);
195 assertFalse(descr.enumerable);
196 assertTrue(descr.writable);
197 assertEquals('function', typeof descr.value);
198 assertFalse('prototype' in descr.value);
199 }
200
201
202 function assertGetterDescriptor(object, name) {
203 var descr = Object.getOwnPropertyDescriptor(object, name);
204 assertTrue(descr.configurable);
205 assertFalse(descr.enumerable);
206 assertEquals('function', typeof descr.get);
207 assertFalse('prototype' in descr.get);
208 assertEquals(undefined, descr.set);
209 }
210
211
212 function assertSetterDescriptor(object, name) {
213 var descr = Object.getOwnPropertyDescriptor(object, name);
214 assertTrue(descr.configurable);
215 assertFalse(descr.enumerable);
216 assertEquals(undefined, descr.get);
217 assertEquals('function', typeof descr.set);
218 assertFalse('prototype' in descr.set);
219 }
220
221
222 function assertAccessorDescriptor(object, name) {
223 var descr = Object.getOwnPropertyDescriptor(object, name);
224 assertTrue(descr.configurable);
225 assertFalse(descr.enumerable);
226 assertEquals('function', typeof descr.get);
227 assertEquals('function', typeof descr.set);
228 assertFalse('prototype' in descr.get);
229 assertFalse('prototype' in descr.set);
230 }
231
232
233 (function TestMethods() {
234 class C {
235 method() { return 1; }
236 static staticMethod() { return 2; }
237 method2() { return 3; }
238 static staticMethod2() { return 4; }
239 }
240
241 assertMethodDescriptor(C.prototype, 'method');
242 assertMethodDescriptor(C.prototype, 'method2');
243 assertMethodDescriptor(C, 'staticMethod');
244 assertMethodDescriptor(C, 'staticMethod2');
245
246 assertEquals(1, new C().method());
247 assertEquals(2, C.staticMethod());
248 assertEquals(3, new C().method2());
249 assertEquals(4, C.staticMethod2());
250 })();
251
252
253 (function TestGetters() {
254 class C {
255 get x() { return 1; }
256 static get staticX() { return 2; }
257 get y() { return 3; }
258 static get staticY() { return 4; }
259 }
260
261 assertGetterDescriptor(C.prototype, 'x');
262 assertGetterDescriptor(C.prototype, 'y');
263 assertGetterDescriptor(C, 'staticX');
264 assertGetterDescriptor(C, 'staticY');
265
266 assertEquals(1, new C().x);
267 assertEquals(2, C.staticX);
268 assertEquals(3, new C().y);
269 assertEquals(4, C.staticY);
270 })();
271
272
273
274 (function TestSetters() {
275 var x, staticX, y, staticY;
276 class C {
277 set x(v) { x = v; }
278 static set staticX(v) { staticX = v; }
279 set y(v) { y = v; }
280 static set staticY(v) { staticY = v; }
281 }
282
283 assertSetterDescriptor(C.prototype, 'x');
284 assertSetterDescriptor(C.prototype, 'y');
285 assertSetterDescriptor(C, 'staticX');
286 assertSetterDescriptor(C, 'staticY');
287
288 assertEquals(1, new C().x = 1);
289 assertEquals(1, x);
290 assertEquals(2, C.staticX = 2);
291 assertEquals(2, staticX);
292 assertEquals(3, new C().y = 3);
293 assertEquals(3, y);
294 assertEquals(4, C.staticY = 4);
295 assertEquals(4, staticY);
296 })();
297
298
299 (function TestSideEffectsInPropertyDefine() {
300 function B() {}
301 B.prototype = {
302 constructor: B,
303 set m(v) {
304 throw Error();
305 }
306 };
307
308 class C extends B {
309 m() { return 1; }
310 }
311
312 assertEquals(1, new C().m());
313 })();
314
315
316 (function TestAccessors() {
317 class C {
318 constructor(x) {
319 this._x = x;
320 }
321
322 get x() { return this._x; }
323 set x(v) { this._x = v; }
324
325 static get staticX() { return this._x; }
326 static set staticX(v) { this._x = v; }
327 }
328
329 assertAccessorDescriptor(C.prototype, 'x');
330 assertAccessorDescriptor(C, 'staticX');
331
332 var c = new C(1);
333 c._x = 1;
334 assertEquals(1, c.x);
335 c.x = 2;
336 assertEquals(2, c._x);
337
338 C._x = 3;
339 assertEquals(3, C.staticX);
340 C._x = 4;
341 assertEquals(4, C.staticX );
342 })();
343
344
345 (function TestProto() {
346 class C {
347 __proto__() { return 1; }
348 }
349 assertMethodDescriptor(C.prototype, '__proto__');
350 assertEquals(1, new C().__proto__());
351 })();
352
353
354 (function TestProtoStatic() {
355 class C {
356 static __proto__() { return 1; }
357 }
358 assertMethodDescriptor(C, '__proto__');
359 assertEquals(1, C.__proto__());
360 })();
361
362
363 (function TestProtoAccessor() {
364 class C {
365 get __proto__() { return this._p; }
366 set __proto__(v) { this._p = v; }
367 }
368 assertAccessorDescriptor(C.prototype, '__proto__');
369 var c = new C();
370 c._p = 1;
371 assertEquals(1, c.__proto__);
372 c.__proto__ = 2;
373 assertEquals(2, c.__proto__);
374 })();
375
376
377 (function TestStaticProtoAccessor() {
378 class C {
379 static get __proto__() { return this._p; }
380 static set __proto__(v) { this._p = v; }
381 }
382 assertAccessorDescriptor(C, '__proto__');
383 C._p = 1;
384 assertEquals(1, C.__proto__);
385 C.__proto__ = 2;
386 assertEquals(2, C.__proto__);
387 })();
388
389
390 (function TestSettersOnProto() {
391 function Base() {}
392 Base.prototype = {
393 set constructor(_) {
394 assertUnreachable();
395 },
396 set m(_) {
397 assertUnreachable();
398 }
399 };
400 Object.defineProperty(Base, 'staticM', {
401 set: function() {
402 assertUnreachable();
403 }
404 });
405
406 class C extends Base {
407 m() {
408 return 1;
409 }
410 static staticM() {
411 return 2;
412 }
413 }
414
415 assertEquals(1, new C().m());
416 assertEquals(2, C.staticM());
417 })();
418
419
420 (function TestConstructableButNoPrototype() {
421 var Base = function() {}.bind();
422 assertThrows(function() {
423 class C extends Base {}
424 }, TypeError);
425 })();
426
427
428 (function TestPrototypeGetter() {
429 var calls = 0;
430 var Base = function() {}.bind();
431 Object.defineProperty(Base, 'prototype', {
432 get: function() {
433 calls++;
434 return null;
435 },
436 configurable: true
437 });
438 class C extends Base {}
439 assertEquals(1, calls);
440
441 calls = 0;
442 Object.defineProperty(Base, 'prototype', {
443 get: function() {
444 calls++;
445 return 42;
446 },
447 configurable: true
448 });
449 assertThrows(function() {
450 class C extends Base {}
451 }, TypeError);
452 assertEquals(1, calls);
453 })();
454
455
456 (function TestPrototypeSetter() {
457 var Base = function() {}.bind();
458 Object.defineProperty(Base, 'prototype', {
459 set: function() {
460 assertUnreachable();
461 }
462 });
463 assertThrows(function() {
464 class C extends Base {}
465 }, TypeError);
466 })();
467
468
469 (function TestSuperInMethods() {
470 class B {
471 method() {
472 return 1;
473 }
474 get x() {
475 return 2;
476 }
477 }
478 class C extends B {
479 method() {
480 assertEquals(2, super.x);
481 return super.method();
482 }
483 }
484 assertEquals(1, new C().method());
485 })();
486
487
488 (function TestSuperInGetter() {
489 class B {
490 method() {
491 return 1;
492 }
493 get x() {
494 return 2;
495 }
496 }
497 class C extends B {
498 get y() {
499 assertEquals(2, super.x);
500 return super.method();
501 }
502 }
503 assertEquals(1, new C().y);
504 })();
505
506
507 (function TestSuperInSetter() {
508 class B {
509 method() {
510 return 1;
511 }
512 get x() {
513 return 2;
514 }
515 }
516 class C extends B {
517 set y(v) {
518 assertEquals(3, v);
519 assertEquals(2, super.x);
520 assertEquals(1, super.method());
521 }
522 }
523 assertEquals(3, new C().y = 3);
524 })();
525
526
527 (function TestSuperInStaticMethods() {
528 class B {
529 static method() {
530 return 1;
531 }
532 static get x() {
533 return 2;
534 }
535 }
536 class C extends B {
537 static method() {
538 assertEquals(2, super.x);
539 return super.method();
540 }
541 }
542 assertEquals(1, C.method());
543 })();
544
545
546 (function TestSuperInStaticGetter() {
547 class B {
548 static method() {
549 return 1;
550 }
551 static get x() {
552 return 2;
553 }
554 }
555 class C extends B {
556 static get x() {
557 assertEquals(2, super.x);
558 return super.method();
559 }
560 }
561 assertEquals(1, C.x);
562 })();
563
564
565 (function TestSuperInStaticSetter() {
566 class B {
567 static method() {
568 return 1;
569 }
570 static get x() {
571 return 2;
572 }
573 }
574 class C extends B {
575 static set x(v) {
576 assertEquals(3, v);
577 assertEquals(2, super.x);
578 assertEquals(1, super.method());
579 }
580 }
581 assertEquals(3, C.x = 3);
582 })();
583
584
585 (function TestNumericPropertyNames() {
586 class B {
587 1() { return 1; }
588 get 2() { return 2; }
589 set 3(_) {}
590
591 static 4() { return 4; }
592 static get 5() { return 5; }
593 static set 6(_) {}
594 }
595
596 assertMethodDescriptor(B.prototype, '1');
597 assertGetterDescriptor(B.prototype, '2');
598 assertSetterDescriptor(B.prototype, '3');
599
600 assertMethodDescriptor(B, '4');
601 assertGetterDescriptor(B, '5');
602 assertSetterDescriptor(B, '6');
603
604 class C extends B {
605 1() { return super[1](); }
606 get 2() { return super[2]; }
607
608 static 4() { return super[4](); }
609 static get 5() { return super[5]; }
610 }
611
612 assertEquals(1, new C()[1]());
613 assertEquals(2, new C()[2]);
614 assertEquals(4, C[4]());
615 assertEquals(5, C[5]);
616 })();
617
618
619 (function TestDefaultConstructorNoCrash() {
620 // Regression test for https://code.google.com/p/v8/issues/detail?id=3661
621 class C {}
622 assertThrows(function () {C();}, TypeError);
623 assertThrows(function () {C(1);}, TypeError);
624 assertTrue(new C() instanceof C);
625 assertTrue(new C(1) instanceof C);
626 })();
627
628
629 (function TestDefaultConstructor() {
630 var calls = 0;
631 class Base {
632 constructor() {
633 calls++;
634 }
635 }
636 class Derived extends Base {}
637 var object = new Derived;
638 assertEquals(1, calls);
639
640 calls = 0;
641 assertThrows(function() { Derived(); }, TypeError);
642 assertEquals(0, calls);
643 })();
644
645
646 (function TestDefaultConstructorArguments() {
647 var args, self;
648 class Base {
649 constructor() {
650 self = this;
651 args = arguments;
652 }
653 }
654 class Derived extends Base {}
655
656 new Derived;
657 assertEquals(0, args.length);
658
659 new Derived(0, 1, 2);
660 assertEquals(3, args.length);
661 assertTrue(self instanceof Derived);
662
663 var arr = new Array(100);
664 var obj = {};
665 assertThrows(function() {Derived.apply(obj, arr);}, TypeError);
666 })();
667
668
669 (function TestDefaultConstructorArguments2() {
670 var args;
671 class Base {
672 constructor(x, y) {
673 args = arguments;
674 }
675 }
676 class Derived extends Base {}
677
678 new Derived;
679 assertEquals(0, args.length);
680
681 new Derived(1);
682 assertEquals(1, args.length);
683 assertEquals(1, args[0]);
684
685 new Derived(1, 2, 3);
686 assertEquals(3, args.length);
687 assertEquals(1, args[0]);
688 assertEquals(2, args[1]);
689 assertEquals(3, args[2]);
690 })();
691
692
693 (function TestNameBindingConst() {
694 assertThrows('class C { constructor() { C = 42; } }; new C();', TypeError);
695 assertThrows('new (class C { constructor() { C = 42; } })', TypeError);
696 assertThrows('class C { m() { C = 42; } }; new C().m()', TypeError);
697 assertThrows('new (class C { m() { C = 42; } }).m()', TypeError);
698 assertThrows('class C { get x() { C = 42; } }; new C().x', TypeError);
699 assertThrows('(new (class C { get x() { C = 42; } })).x', TypeError);
700 assertThrows('class C { set x(_) { C = 42; } }; new C().x = 15;', TypeError);
701 assertThrows('(new (class C { set x(_) { C = 42; } })).x = 15;', TypeError);
702 })();
703
704
705 (function TestNameBinding() {
706 var C2;
707 class C {
708 constructor() {
709 C2 = C;
710 }
711 m() {
712 C2 = C;
713 }
714 get x() {
715 C2 = C;
716 }
717 set x(_) {
718 C2 = C;
719 }
720 }
721 new C();
722 assertEquals(C, C2);
723
724 C2 = undefined;
725 new C().m();
726 assertEquals(C, C2);
727
728 C2 = undefined;
729 new C().x;
730 assertEquals(C, C2);
731
732 C2 = undefined;
733 new C().x = 1;
734 assertEquals(C, C2);
735 })();
736
737
738 (function TestNameBindingExpression() {
739 var C3;
740 var C = class C2 {
741 constructor() {
742 assertEquals(C2, C);
743 C3 = C2;
744 }
745 m() {
746 assertEquals(C2, C);
747 C3 = C2;
748 }
749 get x() {
750 assertEquals(C2, C);
751 C3 = C2;
752 }
753 set x(_) {
754 assertEquals(C2, C);
755 C3 = C2;
756 }
757 }
758 new C();
759 assertEquals(C, C3);
760
761 C3 = undefined;
762 new C().m();
763 assertEquals(C, C3);
764
765 C3 = undefined;
766 new C().x;
767 assertEquals(C, C3);
768
769 C3 = undefined;
770 new C().x = 1;
771 assertEquals(C, C3);
772 })();
773
774
775 (function TestNameBindingInExtendsExpression() {
776 assertThrows(function() {
777 class x extends x {}
778 }, ReferenceError);
779
780 assertThrows(function() {
781 (class x extends x {});
782 }, ReferenceError);
783
784 assertThrows(function() {
785 var x = (class x extends x {});
786 }, ReferenceError);
787 })();
788
789
790 (function TestThisAccessRestriction() {
791 class Base {}
792 (function() {
793 class C extends Base {
794 constructor() {
795 var y;
796 super();
797 }
798 }; new C();
799 }());
800 assertThrows(function() {
801 class C extends Base {
802 constructor() {
803 super(this.x);
804 }
805 }; new C();
806 }, ReferenceError);
807 assertThrows(function() {
808 class C extends Base {
809 constructor() {
810 super(this);
811 }
812 }; new C();
813 }, ReferenceError);
814 assertThrows(function() {
815 class C extends Base {
816 constructor() {
817 super.method();
818 super(this);
819 }
820 }; new C();
821 }, ReferenceError);
822 assertThrows(function() {
823 class C extends Base {
824 constructor() {
825 super(super.method());
826 }
827 }; new C();
828 }, ReferenceError);
829 assertThrows(function() {
830 class C extends Base {
831 constructor() {
832 super(super());
833 }
834 }; new C();
835 }, ReferenceError);
836 assertThrows(function() {
837 class C extends Base {
838 constructor() {
839 super(1, 2, Object.getPrototypeOf(this));
840 }
841 }; new C();
842 }, ReferenceError);
843 (function() {
844 class C extends Base {
845 constructor() {
846 { super(1, 2); }
847 }
848 }; new C();
849 }());
850 (function() {
851 class C extends Base {
852 constructor() {
853 if (1) super();
854 }
855 }; new C();
856 }());
857
858 class C1 extends Object {
859 constructor() {
860 'use strict';
861 super();
862 }
863 };
864 new C1();
865
866 class C2 extends Object {
867 constructor() {
868 ; 'use strict';;;;;
869 super();
870 }
871 };
872 new C2();
873
874 class C3 extends Object {
875 constructor() {
876 ; 'use strict';;;;;
877 // This is a comment.
878 super();
879 }
880 };
881 new C3();
882 }());
883
884
885 function testClassRestrictedProperties(C) {
886 assertEquals(false, C.hasOwnProperty("arguments"));
887 assertThrows(function() { return C.arguments; }, TypeError);
888 assertThrows(function() { C.arguments = {}; }, TypeError);
889
890 assertEquals(false, C.hasOwnProperty("caller"));
891 assertThrows(function() { return C.caller; }, TypeError);
892 assertThrows(function() { C.caller = {}; }, TypeError);
893
894 assertEquals(false, (new C).method.hasOwnProperty("arguments"));
895 assertThrows(function() { return new C().method.arguments; }, TypeError);
896 assertThrows(function() { new C().method.arguments = {}; }, TypeError);
897
898 assertEquals(false, (new C).method.hasOwnProperty("caller"));
899 assertThrows(function() { return new C().method.caller; }, TypeError);
900 assertThrows(function() { new C().method.caller = {}; }, TypeError);
901 }
902
903
904 (function testRestrictedPropertiesStrict() {
905 "use strict";
906 class ClassWithDefaultConstructor {
907 method() {}
908 }
909 class Class {
910 constructor() {}
911 method() {}
912 }
913 class DerivedClassWithDefaultConstructor extends Class {}
914 class DerivedClass extends Class { constructor() { super(); } }
915
916 testClassRestrictedProperties(ClassWithDefaultConstructor);
917 testClassRestrictedProperties(Class);
918 testClassRestrictedProperties(DerivedClassWithDefaultConstructor);
919 testClassRestrictedProperties(DerivedClass);
920 testClassRestrictedProperties(class { method() {} });
921 testClassRestrictedProperties(class { constructor() {} method() {} });
922 testClassRestrictedProperties(class extends Class { });
923 testClassRestrictedProperties(
924 class extends Class { constructor() { super(); } });
925 })();
926
927
928 (function testRestrictedPropertiesSloppy() {
929 class ClassWithDefaultConstructor {
930 method() {}
931 }
932 class Class {
933 constructor() {}
934 method() {}
935 }
936 class DerivedClassWithDefaultConstructor extends Class {}
937 class DerivedClass extends Class { constructor() { super(); } }
938
939 testClassRestrictedProperties(ClassWithDefaultConstructor);
940 testClassRestrictedProperties(Class);
941 testClassRestrictedProperties(DerivedClassWithDefaultConstructor);
942 testClassRestrictedProperties(DerivedClass);
943 testClassRestrictedProperties(class { method() {} });
944 testClassRestrictedProperties(class { constructor() {} method() {} });
945 testClassRestrictedProperties(class extends Class { });
946 testClassRestrictedProperties(
947 class extends Class { constructor() { super(); } });
948 })();
OLDNEW
« no previous file with comments | « test/mjsunit/harmony/class-property-name-eval-arguments.js ('k') | test/mjsunit/harmony/classes-experimental.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698