OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 }()); |
OLD | NEW |