| 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 |