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

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

Issue 923443003: new classes: no longer experimental. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: One more rebase? Created 5 years, 10 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
1 // Copyright 2014 the V8 project authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Flags: --harmony-classes --harmony-sloppy 5 // Flags: --harmony-classes --harmony-sloppy
6 6
7 (function TestBasics() { 7 (function TestBasics() {
8 var C = class C {} 8 var C = class C {}
9 assertEquals(typeof C, 'function'); 9 assertEquals(typeof C, 'function');
10 assertEquals(C.__proto__, Function.prototype); 10 assertEquals(C.__proto__, Function.prototype);
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 })(); 132 })();
133 133
134 134
135 (function TestSuperInConstructor() { 135 (function TestSuperInConstructor() {
136 var calls = 0; 136 var calls = 0;
137 class B {} 137 class B {}
138 B.prototype.x = 42; 138 B.prototype.x = 42;
139 139
140 class C extends B { 140 class C extends B {
141 constructor() { 141 constructor() {
142 super();
142 calls++; 143 calls++;
143 assertEquals(42, super.x); 144 assertEquals(42, super.x);
144 } 145 }
145 } 146 }
146 147
147 new C; 148 new C;
148 assertEquals(1, calls); 149 assertEquals(1, calls);
149 })(); 150 })();
150 151
151 152
(...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after
606 assertEquals(1, new C()[1]()); 607 assertEquals(1, new C()[1]());
607 assertEquals(2, new C()[2]); 608 assertEquals(2, new C()[2]);
608 assertEquals(4, C[4]()); 609 assertEquals(4, C[4]());
609 assertEquals(5, C[5]); 610 assertEquals(5, C[5]);
610 })(); 611 })();
611 612
612 613
613 (function TestDefaultConstructorNoCrash() { 614 (function TestDefaultConstructorNoCrash() {
614 // Regression test for https://code.google.com/p/v8/issues/detail?id=3661 615 // Regression test for https://code.google.com/p/v8/issues/detail?id=3661
615 class C {} 616 class C {}
616 assertEquals(undefined, C()); 617 assertThrows(function () {C();}, TypeError);
617 assertEquals(undefined, C(1)); 618 assertThrows(function () {C(1);}, TypeError);
618 assertTrue(new C() instanceof C); 619 assertTrue(new C() instanceof C);
619 assertTrue(new C(1) instanceof C); 620 assertTrue(new C(1) instanceof C);
620 })(); 621 })();
621 622
622 623
623 (function TestDefaultConstructor() { 624 (function TestDefaultConstructor() {
624 var calls = 0; 625 var calls = 0;
625 class Base { 626 class Base {
626 constructor() { 627 constructor() {
627 calls++; 628 calls++;
628 } 629 }
629 } 630 }
630 class Derived extends Base {} 631 class Derived extends Base {}
631 var object = new Derived; 632 var object = new Derived;
632 assertEquals(1, calls); 633 assertEquals(1, calls);
633 634
634 calls = 0; 635 calls = 0;
635 Derived(); 636 assertThrows(function() { Derived(); }, TypeError);
636 assertEquals(1, calls); 637 assertEquals(0, calls);
637 })(); 638 })();
638 639
639 640
640 (function TestDefaultConstructorArguments() { 641 (function TestDefaultConstructorArguments() {
641 var args, self; 642 var args, self;
642 class Base { 643 class Base {
643 constructor() { 644 constructor() {
644 self = this; 645 self = this;
645 args = arguments; 646 args = arguments;
646 } 647 }
647 } 648 }
648 class Derived extends Base {} 649 class Derived extends Base {}
649 650
650 new Derived; 651 new Derived;
651 assertEquals(0, args.length); 652 assertEquals(0, args.length);
652 653
653 new Derived(0, 1, 2); 654 new Derived(0, 1, 2);
654 assertEquals(3, args.length); 655 assertEquals(3, args.length);
655 assertTrue(self instanceof Derived); 656 assertTrue(self instanceof Derived);
656 657
657 var arr = new Array(100); 658 var arr = new Array(100);
658 var obj = {}; 659 var obj = {};
659 Derived.apply(obj, arr); 660 assertThrows(function() {Derived.apply(obj, arr);}, TypeError);
660 assertEquals(100, args.length);
661 assertEquals(obj, self);
662 })(); 661 })();
663 662
664 663
665 (function TestDefaultConstructorArguments2() { 664 (function TestDefaultConstructorArguments2() {
666 var args; 665 var args;
667 class Base { 666 class Base {
668 constructor(x, y) { 667 constructor(x, y) {
669 args = arguments; 668 args = arguments;
670 } 669 }
671 } 670 }
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
776 assertThrows(function() { 775 assertThrows(function() {
777 (class x extends x {}); 776 (class x extends x {});
778 }, ReferenceError); 777 }, ReferenceError);
779 778
780 assertThrows(function() { 779 assertThrows(function() {
781 var x = (class x extends x {}); 780 var x = (class x extends x {});
782 }, ReferenceError); 781 }, ReferenceError);
783 })(); 782 })();
784 783
785 784
786 (function TestSuperCallSyntacticRestriction() { 785 (function TestThisAccessRestriction() {
787 assertThrows(function() { 786 class Base {}
788 class C { 787 (function() {
788 class C extends Base {
789 constructor() { 789 constructor() {
790 var y; 790 var y;
791 super(); 791 super();
792 } 792 }
793 }; new C(); 793 }; new C();
794 }, TypeError); 794 }());
795 assertThrows(function() { 795 assertThrows(function() {
796 class C { 796 class C extends Base {
797 constructor() { 797 constructor() {
798 super(this.x); 798 super(this.x);
799 } 799 }
800 }; new C(); 800 }; new C();
801 }, TypeError); 801 }, ReferenceError);
802 assertThrows(function() { 802 assertThrows(function() {
803 class C { 803 class C extends Base {
804 constructor() { 804 constructor() {
805 super(this); 805 super(this);
806 } 806 }
807 }; new C(); 807 }; new C();
808 }, TypeError); 808 }, ReferenceError);
809 assertThrows(function() { 809 assertThrows(function() {
810 class C { 810 class C extends Base {
811 constructor() { 811 constructor() {
812 super.method(); 812 super.method();
813 super(this); 813 super(this);
814 } 814 }
815 }; new C(); 815 }; new C();
816 }, TypeError); 816 }, ReferenceError);
817 assertThrows(function() { 817 assertThrows(function() {
818 class C { 818 class C extends Base {
819 constructor() { 819 constructor() {
820 super(super.method()); 820 super(super.method());
821 } 821 }
822 }; new C(); 822 }; new C();
823 }, TypeError); 823 }, ReferenceError);
824 assertThrows(function() { 824 assertThrows(function() {
825 class C { 825 class C extends Base {
826 constructor() { 826 constructor() {
827 super(super()); 827 super(super());
828 } 828 }
829 }; new C(); 829 }; new C();
830 }, TypeError); 830 }, ReferenceError);
831 assertThrows(function() { 831 assertThrows(function() {
832 class C { 832 class C extends Base {
833 constructor() { 833 constructor() {
834 super(1, 2, Object.getPrototypeOf(this)); 834 super(1, 2, Object.getPrototypeOf(this));
835 } 835 }
836 }; new C(); 836 }; new C();
837 }, TypeError); 837 }, ReferenceError);
838 assertThrows(function() { 838 (function() {
839 class C { 839 class C extends Base {
840 constructor() { 840 constructor() {
841 { super(1, 2); } 841 { super(1, 2); }
842 } 842 }
843 }; new C(); 843 }; new C();
844 }, TypeError); 844 }());
845 assertThrows(function() { 845 (function() {
846 class C { 846 class C extends Base {
847 constructor() { 847 constructor() {
848 if (1) super(); 848 if (1) super();
849 } 849 }
850 }; new C(); 850 }; new C();
851 }, TypeError); 851 }());
852 852
853 class C1 extends Object { 853 class C1 extends Object {
854 constructor() { 854 constructor() {
855 'use strict'; 855 'use strict';
856 super(); 856 super();
857 } 857 }
858 }; 858 };
859 new C1(); 859 new C1();
860 860
861 class C2 extends Object { 861 class C2 extends Object {
862 constructor() { 862 constructor() {
863 ; 'use strict';;;;; 863 ; 'use strict';;;;;
864 super(); 864 super();
865 } 865 }
866 }; 866 };
867 new C2(); 867 new C2();
868 868
869 class C3 extends Object { 869 class C3 extends Object {
870 constructor() { 870 constructor() {
871 ; 'use strict';;;;; 871 ; 'use strict';;;;;
872 // This is a comment. 872 // This is a comment.
873 super(); 873 super();
874 } 874 }
875 }; 875 };
876 new C3(); 876 new C3();
877 }()); 877 }());
OLDNEW
« no previous file with comments | « test/message/super-constructor-extra-statement.out ('k') | test/mjsunit/harmony/classes-experimental.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698