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

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

Issue 934463003: super.property store (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: git 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
« no previous file with comments | « src/runtime/runtime-classes.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 --allow-natives-syntax 5 // Flags: --harmony-classes --allow-natives-syntax
6 6
7 (function TestSuperNamedLoads() { 7 (function TestSuperNamedLoads() {
8 function Base() { } 8 function Base() { }
9 function fBase() { } 9 function fBase() { }
10 Base.prototype = { 10 Base.prototype = {
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after
588 }; 588 };
589 589
590 function Derived() {} 590 function Derived() {}
591 Derived.prototype = { 591 Derived.prototype = {
592 __proto__: Base.prototype, 592 __proto__: Base.prototype,
593 constructor: Derived, 593 constructor: Derived,
594 testSetter() { 594 testSetter() {
595 setCalled = 0; 595 setCalled = 0;
596 getCalled = 0; 596 getCalled = 0;
597 assertEquals('object', typeof this); 597 assertEquals('object', typeof this);
598 assertTrue(this instanceof Number) 598 assertInstanceof(this, Number)
599 assertEquals(42, this.valueOf()); 599 assertEquals(42, this.valueOf());
600 assertEquals(1, super.x); 600 assertEquals(1, super.x);
601 assertEquals(1, getCalled); 601 assertEquals(1, getCalled);
602 assertEquals(0, setCalled); 602 assertEquals(0, setCalled);
603 603
604 assertEquals(5, super.x = 5); 604 assertEquals(5, super.x = 5);
605 assertEquals(1, getCalled); 605 assertEquals(1, getCalled);
606 assertEquals(1, setCalled); 606 assertEquals(1, setCalled);
607 607
608 assertEquals(6, super.x += 5); 608 assertEquals(6, super.x += 5);
(...skipping 19 matching lines...) Expand all
628 assertEquals(1, setCalled); 628 assertEquals(1, setCalled);
629 629
630 assertEquals(6, super.x += 5); 630 assertEquals(6, super.x += 5);
631 assertEquals(2, getCalled); 631 assertEquals(2, getCalled);
632 assertEquals(2, setCalled); 632 assertEquals(2, setCalled);
633 633
634 var ex; 634 var ex;
635 try { 635 try {
636 super.newProperty = 15; 636 super.newProperty = 15;
637 } catch (e) { ex = e; } 637 } catch (e) { ex = e; }
638 assertTrue(ex instanceof TypeError); 638 assertInstanceof(ex, TypeError);
639 } 639 }
640 } 640 }
641 641
642 Derived.prototype.testSetter.call(42); 642 Derived.prototype.testSetter.call(42);
643 Derived.prototype.testSetterStrict.call(42); 643 Derived.prototype.testSetterStrict.call(42);
644 644
645 function DerivedFromString() {} 645 function DerivedFromString() {}
646 DerivedFromString.prototype = { 646 DerivedFromString.prototype = {
647 __proto__: String.prototype, 647 __proto__: String.prototype,
648 f() { 648 f() {
649 'use strict'; 649 'use strict';
650 assertTrue(42 === this); 650 assertTrue(42 === this);
651 assertEquals(String.prototype.toString, super.toString); 651 assertEquals(String.prototype.toString, super.toString);
652 var ex; 652 var ex;
653 try { 653 try {
654 super.toString(); 654 super.toString();
655 } catch(e) { ex = e; } 655 } catch(e) { ex = e; }
656 656
657 assertTrue(ex instanceof TypeError); 657 assertInstanceof(ex, TypeError);
658 } 658 }
659 }; 659 };
660 660
661 DerivedFromString.prototype.f.call(42); 661 DerivedFromString.prototype.f.call(42);
662 }()); 662 }());
663 663
664 664
665 (function TestKeyedAccessorsOnPrimitives() { 665 (function TestKeyedAccessorsOnPrimitives() {
666 var x = 'x'; 666 var x = 'x';
667 var newProperty = 'newProperty'; 667 var newProperty = 'newProperty';
(...skipping 14 matching lines...) Expand all
682 }; 682 };
683 683
684 function Derived() {} 684 function Derived() {}
685 Derived.prototype = { 685 Derived.prototype = {
686 __proto__: Base.prototype, 686 __proto__: Base.prototype,
687 constructor: Derived, 687 constructor: Derived,
688 testSetter() { 688 testSetter() {
689 setCalled = 0; 689 setCalled = 0;
690 getCalled = 0; 690 getCalled = 0;
691 assertEquals('object', typeof this); 691 assertEquals('object', typeof this);
692 assertTrue(this instanceof Number) 692 assertInstanceof(this, Number)
693 assertEquals(42, this.valueOf()); 693 assertEquals(42, this.valueOf());
694 assertEquals(1, super[x]); 694 assertEquals(1, super[x]);
695 assertEquals(1, getCalled); 695 assertEquals(1, getCalled);
696 assertEquals(0, setCalled); 696 assertEquals(0, setCalled);
697 697
698 assertEquals(5, super[x] = 5); 698 assertEquals(5, super[x] = 5);
699 assertEquals(1, getCalled); 699 assertEquals(1, getCalled);
700 assertEquals(1, setCalled); 700 assertEquals(1, setCalled);
701 701
702 assertEquals(6, super[x] += 5); 702 assertEquals(6, super[x] += 5);
(...skipping 19 matching lines...) Expand all
722 assertEquals(1, setCalled); 722 assertEquals(1, setCalled);
723 723
724 assertEquals(6, super[x] += 5); 724 assertEquals(6, super[x] += 5);
725 assertEquals(2, getCalled); 725 assertEquals(2, getCalled);
726 assertEquals(2, setCalled); 726 assertEquals(2, setCalled);
727 727
728 var ex; 728 var ex;
729 try { 729 try {
730 super[newProperty] = 15; 730 super[newProperty] = 15;
731 } catch (e) { ex = e; } 731 } catch (e) { ex = e; }
732 assertTrue(ex instanceof TypeError); 732 assertInstanceof(ex,TypeError);
733 } 733 }
734 }; 734 };
735 735
736 Derived.prototype.testSetter.call(42); 736 Derived.prototype.testSetter.call(42);
737 Derived.prototype.testSetterStrict.call(42); 737 Derived.prototype.testSetterStrict.call(42);
738 738
739 function DerivedFromString() {} 739 function DerivedFromString() {}
740 DerivedFromString.prototype = { 740 DerivedFromString.prototype = {
741 __proto__: String.prototype, 741 __proto__: String.prototype,
742 f() { 742 f() {
743 'use strict'; 743 'use strict';
744 assertTrue(42 === this); 744 assertTrue(42 === this);
745 assertEquals(String.prototype.toString, super[toString]); 745 assertEquals(String.prototype.toString, super[toString]);
746 var ex; 746 var ex;
747 try { 747 try {
748 super[toString](); 748 super[toString]();
749 } catch(e) { ex = e; } 749 } catch(e) { ex = e; }
750 750
751 assertTrue(ex instanceof TypeError); 751 assertInstanceof(ex, TypeError);
752 } 752 }
753 }; 753 };
754 DerivedFromString.prototype.f.call(42); 754 DerivedFromString.prototype.f.call(42);
755 }()); 755 }());
756 756
757 757
758 (function TestNumericKeyedAccessorsOnPrimitives() { 758 (function TestNumericKeyedAccessorsOnPrimitives() {
759 var x = 42; 759 var x = 42;
760 var newProperty = 43; 760 var newProperty = 43;
761 var getCalled = 0; 761 var getCalled = 0;
(...skipping 15 matching lines...) Expand all
777 }); 777 });
778 778
779 function Derived() {} 779 function Derived() {}
780 Derived.prototype = { 780 Derived.prototype = {
781 __proto__: Base.prototype, 781 __proto__: Base.prototype,
782 constructor: Derived, 782 constructor: Derived,
783 testSetter() { 783 testSetter() {
784 setCalled = 0; 784 setCalled = 0;
785 getCalled = 0; 785 getCalled = 0;
786 assertEquals('object', typeof this); 786 assertEquals('object', typeof this);
787 assertTrue(this instanceof Number) 787 assertInstanceof(this, Number)
788 assertEquals(42, this.valueOf()); 788 assertEquals(42, this.valueOf());
789 assertEquals(1, super[x]); 789 assertEquals(1, super[x]);
790 assertEquals(1, getCalled); 790 assertEquals(1, getCalled);
791 assertEquals(0, setCalled); 791 assertEquals(0, setCalled);
792 792
793 assertEquals(5, super[x] = 5); 793 assertEquals(5, super[x] = 5);
794 assertEquals(1, getCalled); 794 assertEquals(1, getCalled);
795 assertEquals(1, setCalled); 795 assertEquals(1, setCalled);
796 796
797 assertEquals(6, super[x] += 5); 797 assertEquals(6, super[x] += 5);
(...skipping 19 matching lines...) Expand all
817 assertEquals(1, setCalled); 817 assertEquals(1, setCalled);
818 818
819 assertEquals(6, super[x] += 5); 819 assertEquals(6, super[x] += 5);
820 assertEquals(2, getCalled); 820 assertEquals(2, getCalled);
821 assertEquals(2, setCalled); 821 assertEquals(2, setCalled);
822 822
823 var ex; 823 var ex;
824 try { 824 try {
825 super[newProperty] = 15; 825 super[newProperty] = 15;
826 } catch (e) { ex = e; } 826 } catch (e) { ex = e; }
827 assertTrue(ex instanceof TypeError); 827 assertInstanceof(ex, TypeError);
828 } 828 }
829 }; 829 };
830 830
831 Derived.prototype.testSetter.call(42); 831 Derived.prototype.testSetter.call(42);
832 Derived.prototype.testSetterStrict.call(42); 832 Derived.prototype.testSetterStrict.call(42);
833 }()); 833 }());
834 834
835 835
836 (function TestKeyedNumericSetterOnExotics() { 836 (function TestKeyedNumericSetterOnExotics() {
837 function Base() {} 837 function Base() {}
838 function Derived() {} 838 function Derived() {}
839 Derived.prototype = { 839 Derived.prototype = {
840 __proto__: Base.prototype, 840 __proto__: Base.prototype,
841 callSetterOnArray() { 841 callSetterOnArray() {
842 super[42] = 1; 842 super[42] = 1;
843 }, 843 },
844 callStrictSetterOnString() { 844 callStrictSetterOnString() {
845 'use strict'; 845 'use strict';
846 assertEquals('string', typeof this); 846 assertEquals('string', typeof this);
847 assertTrue('abcdef' === this); 847 assertTrue('abcdef' === this);
848 var ex = null; 848 var ex = null;
849 try { 849 try {
850 super[5] = 'q'; 850 super[5] = 'q';
851 } catch(e) { ex = e; } 851 } catch(e) { ex = e; }
852 assertTrue(ex instanceof TypeError); 852 assertInstanceof(ex, TypeError);
853 853
854 ex = null; 854 ex = null;
855 try { 855 try {
856 super[1024] = 'q'; 856 super[1024] = 'q';
857 } catch(e) { ex = e; } 857 } catch(e) { ex = e; }
858 assertTrue(ex instanceof TypeError); 858 assertInstanceof(ex, TypeError);
859 } 859 }
860 }; 860 };
861 861
862 var x = []; 862 var x = [];
863 assertEquals(0, x.length); 863 assertEquals(0, x.length);
864 Derived.prototype.callSetterOnArray.call(x); 864 Derived.prototype.callSetterOnArray.call(x);
865 assertEquals(43, x.length); 865 assertEquals(43, x.length);
866 assertEquals(1, x[42]); 866 assertEquals(1, x[42]);
867 867
868 var s = 'abcdef'; 868 var s = 'abcdef';
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 }; 956 };
957 var d = new Derived(); 957 var d = new Derived();
958 d.mSloppy(); 958 d.mSloppy();
959 assertEquals(10, d[x]); 959 assertEquals(10, d[x]);
960 var d1 = new Derived(); 960 var d1 = new Derived();
961 d1.mStrict(); 961 d1.mStrict();
962 assertEquals(10, d[x]); 962 assertEquals(10, d[x]);
963 }()); 963 }());
964 964
965 965
966 (function TestSetterCreatingOwnProperties() { 966 (function TestSetterCreatingOwnPropertiesReconfigurable() {
967 var setterCalled;
968 function Base() {} 967 function Base() {}
969 function Derived() {} 968 function Derived() {}
970 Derived.prototype = { 969 Derived.prototype = {
971 __proto__: Base.prototype, 970 __proto__: Base.prototype,
972 mSloppy() { 971 mSloppy() {
973 assertEquals(42, this.ownReadOnly); 972 assertEquals(42, this.ownReadOnly);
974 super.ownReadOnly = 55; 973 super.ownReadOnly = 55;
974 assertEquals(55, this.ownReadOnly);
975 var descr = Object.getOwnPropertyDescriptor(this, 'ownReadOnly');
976 assertEquals(55, descr.value);
977 assertTrue(descr.configurable);
978 assertFalse(descr.enumerable);
979 assertFalse(descr.writable);
980 assertFalse(Base.prototype.hasOwnProperty('ownReadOnly'));
981
982 assertEquals(15, this.ownReadonlyAccessor);
983 super.ownReadonlyAccessor = 25;
984 assertEquals(25, this.ownReadonlyAccessor);
985 var descr = Object.getOwnPropertyDescriptor(this, 'ownReadonlyAccessor');
986 assertEquals(25, descr.value);
987 assertTrue(descr.configurable);
988 assertFalse(descr.enumerable);
989 assertTrue(descr.writable);
990 assertFalse(Base.prototype.hasOwnProperty('ownReadonlyAccessor'));
991
992 super.ownSetter = 35;
993 assertEquals(35, this.ownSetter);
994 var descr = Object.getOwnPropertyDescriptor(this, 'ownSetter');
995 assertEquals(35, descr.value);
996 assertTrue(descr.configurable);
997 assertFalse(descr.enumerable);
998 assertTrue(descr.writable);
999 assertFalse(Base.prototype.hasOwnProperty('ownSetter'));
1000 },
1001 mStrict() {
1002 'use strict';
1003 assertEquals(42, this.ownReadOnly);
1004 super.ownReadOnly = 55;
1005 assertEquals(55, this.ownReadOnly);
1006 var descr = Object.getOwnPropertyDescriptor(this, 'ownReadOnly');
1007 assertEquals(55, descr.value);
1008 assertTrue(descr.configurable);
1009 assertFalse(descr.enumerable);
1010 assertFalse(descr.writable);
1011 assertFalse(Base.prototype.hasOwnProperty('ownReadOnly'));
1012
1013 assertEquals(15, this.ownReadonlyAccessor);
1014 super.ownReadonlyAccessor = 25;
1015 assertEquals(25, this.ownReadonlyAccessor);
1016 var descr = Object.getOwnPropertyDescriptor(this, 'ownReadonlyAccessor');
1017 assertEquals(25, descr.value);
1018 assertTrue(descr.configurable);
1019 assertFalse(descr.enumerable);
1020 assertTrue(descr.writable);
1021 assertFalse(Base.prototype.hasOwnProperty('ownReadonlyAccessor'));
1022
1023 super.ownSetter = 35;
1024 assertEquals(35, this.ownSetter);
1025 var descr = Object.getOwnPropertyDescriptor(this, 'ownSetter');
1026 assertEquals(35, descr.value);
1027 assertTrue(descr.configurable);
1028 assertFalse(descr.enumerable);
1029 assertTrue(descr.writable);
1030 assertFalse(Base.prototype.hasOwnProperty('ownSetter'));
1031 },
1032 };
1033
1034 var d = new Derived();
1035 Object.defineProperty(d, 'ownReadOnly', {
1036 value: 42,
1037 writable: false,
1038 configurable: true
1039 });
1040 Object.defineProperty(d, 'ownSetter', {
1041 set: function() { assertUnreachable(); },
1042 configurable: true
1043 });
1044 Object.defineProperty(d, 'ownReadonlyAccessor', {
1045 get: function() { return 15; },
1046 configurable: true
1047 });
1048
1049 d.mSloppy();
1050
1051 var d = new Derived();
1052 Object.defineProperty(d, 'ownReadOnly', {
1053 value: 42,
1054 writable: false,
1055 configurable: true
1056 });
1057 Object.defineProperty(d, 'ownSetter', {
1058 set: function() { assertUnreachable(); },
1059 configurable: true
1060 });
1061 Object.defineProperty(d, 'ownReadonlyAccessor', {
1062 get: function() { return 15; },
1063 configurable: true
1064 });
1065 d.mStrict();
1066 }());
1067
1068
1069 (function TestSetterCreatingOwnPropertiesNonConfigurable() {
1070 function Base() {}
1071 function Derived() {}
1072 Derived.prototype = {
1073 __proto__: Base.prototype,
1074 mSloppy() {
1075 assertEquals(42, this.ownReadOnly);
1076 super.ownReadOnly = 55;
975 assertEquals(42, this.ownReadOnly); 1077 assertEquals(42, this.ownReadOnly);
1078 var descr = Object.getOwnPropertyDescriptor(this, 'ownReadOnly');
1079 assertEquals(42, descr.value);
1080 assertFalse(descr.configurable);
1081 assertFalse(descr.enumerable);
1082 assertFalse(descr.writable);
1083 assertFalse(Base.prototype.hasOwnProperty('ownReadOnly'));
976 1084
977 assertEquals(15, this.ownReadonlyAccessor); 1085 assertEquals(15, this.ownReadonlyAccessor);
978 super.ownReadonlyAccessor = 55; 1086 super.ownReadonlyAccessor = 25;
979 assertEquals(15, this.ownReadonlyAccessor); 1087 assertEquals(15, this.ownReadonlyAccessor);
1088 var descr = Object.getOwnPropertyDescriptor(this, 'ownReadonlyAccessor');
1089 assertFalse(descr.configurable);
1090 assertFalse(descr.enumerable);
1091 assertFalse(Base.prototype.hasOwnProperty('ownReadonlyAccessor'));
980 1092
981 setterCalled = 0; 1093 super.ownSetter = 35;
982 super.ownSetter = 42; 1094 var descr = Object.getOwnPropertyDescriptor(this, 'ownSetter');
983 assertEquals(1, setterCalled); 1095 assertFalse(descr.configurable);
1096 assertFalse(descr.enumerable);
1097 assertFalse(Base.prototype.hasOwnProperty('ownSetter'));
984 }, 1098 },
985 mStrict() { 1099 mStrict() {
986 'use strict'; 1100 'use strict';
1101 var ex;
987 assertEquals(42, this.ownReadOnly); 1102 assertEquals(42, this.ownReadOnly);
988 var ex;
989 try { 1103 try {
990 super.ownReadOnly = 55; 1104 super.ownReadOnly = 55;
991 } catch(e) { ex = e; } 1105 } catch (e) {
992 assertTrue(ex instanceof TypeError); 1106 ex = e;
1107 }
1108 assertInstanceof(ex, TypeError);
1109 assertEquals(
1110 "Cannot assign to read only property 'ownReadOnly' of #<Base>",
1111 ex.message);
993 assertEquals(42, this.ownReadOnly); 1112 assertEquals(42, this.ownReadOnly);
994 1113
1114 ex = null;
995 assertEquals(15, this.ownReadonlyAccessor); 1115 assertEquals(15, this.ownReadonlyAccessor);
1116 try {
1117 super.ownReadonlyAccessor = 25;
1118 } catch (e) {
1119 ex = e;
1120 }
1121 assertInstanceof(ex, TypeError);
1122 assertEquals('Cannot redefine property: ownReadonlyAccessor', ex.message);
1123 assertEquals(15, this.ownReadonlyAccessor);
1124
996 ex = null; 1125 ex = null;
997 try { 1126 try {
998 super.ownReadonlyAccessor = 55; 1127 super.ownSetter = 35;
999 } catch(e) { ex = e; } 1128 } catch (e) {
1000 assertTrue(ex instanceof TypeError); 1129 ex = e;
1001 assertEquals(15, this.ownReadonlyAccessor); 1130 }
1002 1131 assertInstanceof(ex, TypeError);
1003 setterCalled = 0; 1132 assertEquals('Cannot redefine property: ownSetter', ex.message);
1004 super.ownSetter = 42;
1005 assertEquals(1, setterCalled);
1006 } 1133 }
1007 }; 1134 };
1008 1135
1009 var d = new Derived(); 1136 var d = new Derived();
1010 Object.defineProperty(d, 'ownReadOnly', { value : 42, writable : false }); 1137 Object.defineProperty(d, 'ownReadOnly', { value : 42, writable : false });
1011 Object.defineProperty(d, 'ownSetter', 1138 Object.defineProperty(d, 'ownSetter',
1012 { set : function() { setterCalled++; } }); 1139 { set : function() { assertUnreachable(); } });
1013 Object.defineProperty(d, 'ownReadonlyAccessor', 1140 Object.defineProperty(d, 'ownReadonlyAccessor',
1014 { get : function() { return 15; }}); 1141 { get : function() { return 15; }});
1015 d.mSloppy(); 1142 d.mSloppy();
1016 d.mStrict(); 1143 d.mStrict();
1017 }()); 1144 }());
1018 1145
1019 1146
1020 (function TestSetterInForIn() { 1147 (function TestSetterInForIn() {
1021 var setCalled = 0; 1148 var setCalled = 0;
1022 var getCalled = 0; 1149 var getCalled = 0;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1069 }; 1196 };
1070 1197
1071 new Derived().testIter(); 1198 new Derived().testIter();
1072 1199
1073 var x = 'x'; 1200 var x = 'x';
1074 1201
1075 new Derived().testIterKeyed(); 1202 new Derived().testIterKeyed();
1076 }()); 1203 }());
1077 1204
1078 1205
1079 (function TestKeyedSetterCreatingOwnProperties() { 1206 function TestKeyedSetterCreatingOwnPropertiesReconfigurable(ownReadOnly,
1080 var ownReadOnly = 'ownReadOnly'; 1207 ownReadonlyAccessor, ownSetter) {
1081 var ownReadonlyAccessor = 'ownReadonlyAccessor';
1082 var ownSetter = 'ownSetter';
1083 var setterCalled;
1084 function Base() {} 1208 function Base() {}
1085 function Derived() {} 1209 function Derived() {}
1086 Derived.prototype = { 1210 Derived.prototype = {
1087 __proto__: Base.prototype, 1211 __proto__: Base.prototype,
1088 mSloppy() { 1212 mSloppy() {
1089 assertEquals(42, this[ownReadOnly]); 1213 assertEquals(42, this[ownReadOnly]);
1090 super[ownReadOnly] = 55; 1214 super[ownReadOnly] = 55;
1091 assertEquals(42, this[ownReadOnly]); 1215 assertEquals(55, this[ownReadOnly]);
1216 var descr = Object.getOwnPropertyDescriptor(this, ownReadOnly);
1217 assertEquals(55, descr.value);
1218 assertTrue(descr.configurable);
1219 assertFalse(descr.enumerable);
1220 assertFalse(descr.writable);
1221 assertFalse(Base.prototype.hasOwnProperty(ownReadOnly));
1092 1222
1093 assertEquals(15, this[ownReadonlyAccessor]); 1223 assertEquals(15, this[ownReadonlyAccessor]);
1094 super[ownReadonlyAccessor] = 55; 1224 super[ownReadonlyAccessor] = 25;
1095 assertEquals(15, this[ownReadonlyAccessor]); 1225 assertEquals(25, this[ownReadonlyAccessor]);
1226 var descr = Object.getOwnPropertyDescriptor(this, ownReadonlyAccessor);
1227 assertEquals(25, descr.value);
1228 assertTrue(descr.configurable);
1229 assertFalse(descr.enumerable);
1230 assertTrue(descr.writable);
1231 assertFalse(Base.prototype.hasOwnProperty(ownReadonlyAccessor));
1096 1232
1097 setterCalled = 0; 1233 super[ownSetter] = 35;
1098 super[ownSetter] = 42; 1234 assertEquals(35, this[ownSetter]);
1099 assertEquals(1, setterCalled); 1235 var descr = Object.getOwnPropertyDescriptor(this, ownSetter);
1236 assertEquals(35, descr.value);
1237 assertTrue(descr.configurable);
1238 assertFalse(descr.enumerable);
1239 assertTrue(descr.writable);
1240 assertFalse(Base.prototype.hasOwnProperty(ownSetter));
1100 }, 1241 },
1101 mStrict() { 1242 mStrict() {
1102 'use strict'; 1243 'use strict';
1103 assertEquals(42, this[ownReadOnly]); 1244 assertEquals(42, this[ownReadOnly]);
1104 var ex; 1245 super[ownReadOnly] = 55;
1105 try { 1246 assertEquals(55, this[ownReadOnly]);
1106 super[ownReadOnly] = 55; 1247 var descr = Object.getOwnPropertyDescriptor(this, ownReadOnly);
1107 } catch(e) { ex = e; } 1248 assertEquals(55, descr.value);
1108 assertTrue(ex instanceof TypeError); 1249 assertTrue(descr.configurable);
1109 assertEquals(42, this[ownReadOnly]); 1250 assertFalse(descr.enumerable);
1251 assertFalse(descr.writable);
1252 assertFalse(Base.prototype.hasOwnProperty(ownReadOnly));
1110 1253
1111 assertEquals(15, this[ownReadonlyAccessor]); 1254 assertEquals(15, this[ownReadonlyAccessor]);
1112 ex = null; 1255 super[ownReadonlyAccessor] = 25;
1113 try { 1256 assertEquals(25, this[ownReadonlyAccessor]);
1114 super[ownReadonlyAccessor] = 55; 1257 var descr = Object.getOwnPropertyDescriptor(this, ownReadonlyAccessor);
1115 } catch(e) { ex = e; } 1258 assertEquals(25, descr.value);
1116 assertTrue(ex instanceof TypeError); 1259 assertTrue(descr.configurable);
1117 assertEquals(15, this[ownReadonlyAccessor]); 1260 assertFalse(descr.enumerable);
1261 assertTrue(descr.writable);
1262 assertFalse(Base.prototype.hasOwnProperty(ownReadonlyAccessor));
1118 1263
1119 setterCalled = 0; 1264 super[ownSetter] = 35;
1120 super[ownSetter] = 42; 1265 assertEquals(35, this[ownSetter]);
1121 assertEquals(1, setterCalled); 1266 var descr = Object.getOwnPropertyDescriptor(this, ownSetter);
1122 } 1267 assertEquals(35, descr.value);
1268 assertTrue(descr.configurable);
1269 assertFalse(descr.enumerable);
1270 assertTrue(descr.writable);
1271 assertFalse(Base.prototype.hasOwnProperty(ownSetter));
1272 },
1123 }; 1273 };
1124 1274
1125 var d = new Derived(); 1275 var d = new Derived();
1126 Object.defineProperty(d, 'ownReadOnly', { value : 42, writable : false }); 1276 Object.defineProperty(d, ownReadOnly, {
1127 Object.defineProperty(d, 'ownSetter', 1277 value: 42,
1128 { set : function() { setterCalled++; } }); 1278 writable: false,
1129 Object.defineProperty(d, 'ownReadonlyAccessor', 1279 configurable: true
1130 { get : function() { return 15; }}); 1280 });
1281 Object.defineProperty(d, ownSetter, {
1282 set: function() { assertUnreachable(); },
1283 configurable: true
1284 });
1285 Object.defineProperty(d, ownReadonlyAccessor, {
1286 get: function() { return 15; },
1287 configurable: true
1288 });
1289
1131 d.mSloppy(); 1290 d.mSloppy();
1291
1292 var d = new Derived();
1293 Object.defineProperty(d, ownReadOnly, {
1294 value: 42,
1295 writable: false,
1296 configurable: true
1297 });
1298 Object.defineProperty(d, ownSetter, {
1299 set: function() { assertUnreachable(); },
1300 configurable: true
1301 });
1302 Object.defineProperty(d, ownReadonlyAccessor, {
1303 get: function() { return 15; },
1304 configurable: true
1305 });
1132 d.mStrict(); 1306 d.mStrict();
1133 }()); 1307 }
1308 TestKeyedSetterCreatingOwnPropertiesReconfigurable('ownReadOnly',
1309 'ownReadonlyAccessor',
1310 'ownSetter');
1311 TestKeyedSetterCreatingOwnPropertiesReconfigurable(42, 43, 44);
1134 1312
1135 1313
1136 (function TestKeyedNumericSetterCreatingOwnProperties() { 1314 function TestKeyedSetterCreatingOwnPropertiesNonConfigurable(
1137 var ownReadOnly = 42; 1315 ownReadOnly, ownReadonlyAccessor, ownSetter) {
1138 var ownReadonlyAccessor = 43;
1139 var ownSetter = 44;
1140 var setterCalled;
1141 function Base() {} 1316 function Base() {}
1142 function Derived() {} 1317 function Derived() {}
1143 Derived.prototype = { 1318 Derived.prototype = {
1144 __proto__: Base.prototype, 1319 __proto__: Base.prototype,
1145 mSloppy() { 1320 mSloppy() {
1146 assertEquals(42, this[ownReadOnly]); 1321 assertEquals(42, this[ownReadOnly]);
1147 super[ownReadOnly] = 55; 1322 super[ownReadOnly] = 55;
1148 assertEquals(42, this[ownReadOnly]); 1323 assertEquals(42, this[ownReadOnly]);
1324 var descr = Object.getOwnPropertyDescriptor(this, ownReadOnly);
1325 assertEquals(42, descr.value);
1326 assertFalse(descr.configurable);
1327 assertFalse(descr.enumerable);
1328 assertFalse(descr.writable);
1329 assertFalse(Base.prototype.hasOwnProperty(ownReadOnly));
1149 1330
1150 assertEquals(15, this[ownReadonlyAccessor]); 1331 assertEquals(15, this[ownReadonlyAccessor]);
1151 super[ownReadonlyAccessor] = 55; 1332 super[ownReadonlyAccessor] = 25;
1152 assertEquals(15, this[ownReadonlyAccessor]); 1333 assertEquals(15, this[ownReadonlyAccessor]);
1334 var descr = Object.getOwnPropertyDescriptor(this, ownReadonlyAccessor);
1335 assertFalse(descr.configurable);
1336 assertFalse(descr.enumerable);
1337 assertFalse(Base.prototype.hasOwnProperty(ownReadonlyAccessor));
1153 1338
1154 setterCalled = 0; 1339 super[ownSetter] = 35;
1155 super[ownSetter] = 42; 1340 var descr = Object.getOwnPropertyDescriptor(this, ownSetter);
1156 assertEquals(1, setterCalled); 1341 assertFalse(descr.configurable);
1342 assertFalse(descr.enumerable);
1343 assertFalse(Base.prototype.hasOwnProperty(ownSetter));
1157 }, 1344 },
1158 mStrict() { 1345 mStrict() {
1159 'use strict'; 1346 'use strict';
1347 var ex;
1160 assertEquals(42, this[ownReadOnly]); 1348 assertEquals(42, this[ownReadOnly]);
1161 var ex;
1162 try { 1349 try {
1163 super[ownReadOnly] = 55; 1350 super[ownReadOnly] = 55;
1164 } catch(e) { ex = e; } 1351 } catch (e) {
1165 assertTrue(ex instanceof TypeError); 1352 ex = e;
1353 }
1354 assertInstanceof(ex, TypeError);
1355 assertEquals(
1356 "Cannot assign to read only property '" + ownReadOnly +
1357 "' of #<Base>",
1358 ex.message);
1166 assertEquals(42, this[ownReadOnly]); 1359 assertEquals(42, this[ownReadOnly]);
1167 1360
1361 ex = null;
1168 assertEquals(15, this[ownReadonlyAccessor]); 1362 assertEquals(15, this[ownReadonlyAccessor]);
1363 try {
1364 super[ownReadonlyAccessor] = 25;
1365 } catch (e) {
1366 ex = e;
1367 }
1368 assertInstanceof(ex, TypeError);
1369 assertEquals('Cannot redefine property: ' + ownReadonlyAccessor,
1370 ex.message);
1371 assertEquals(15, this[ownReadonlyAccessor]);
1372
1169 ex = null; 1373 ex = null;
1170 try { 1374 try {
1171 super[ownReadonlyAccessor] = 55; 1375 super[ownSetter] = 35;
1172 } catch(e) { ex = e; } 1376 } catch (e) {
1173 assertTrue(ex instanceof TypeError); 1377 ex = e;
1174 assertEquals(15, this[ownReadonlyAccessor]); 1378 }
1175 1379 assertInstanceof(ex, TypeError);
1176 setterCalled = 0; 1380 assertEquals('Cannot redefine property: ' + ownSetter, ex.message);
1177 super[ownSetter] = 42;
1178 assertEquals(1, setterCalled);
1179 } 1381 }
1180 } 1382 };
1181 1383
1182 var d = new Derived(); 1384 var d = new Derived();
1183 Object.defineProperty(d, ownReadOnly, { value : 42, writable : false }); 1385 Object.defineProperty(d, ownReadOnly, { value : 42, writable : false });
1184 Object.defineProperty(d, ownSetter, 1386 Object.defineProperty(d, ownSetter,
1185 { set : function() { setterCalled++; } }); 1387 { set : function() { assertUnreachable(); } });
1186 Object.defineProperty(d, ownReadonlyAccessor, 1388 Object.defineProperty(d, ownReadonlyAccessor,
1187 { get : function() { return 15; }}); 1389 { get : function() { return 15; }});
1188 d.mSloppy(); 1390 d.mSloppy();
1189 d.mStrict(); 1391 d.mStrict();
1190 }()); 1392 }
1393 TestKeyedSetterCreatingOwnPropertiesNonConfigurable('ownReadOnly',
1394 'ownReadonlyAccessor', 'ownSetter');
1395 TestKeyedSetterCreatingOwnPropertiesNonConfigurable(42, 43, 44);
1191 1396
1192 1397
1193 (function TestSetterNoProtoWalk() { 1398 (function TestSetterNoProtoWalk() {
1194 function Base() {} 1399 function Base() {}
1195 function Derived() {} 1400 function Derived() {}
1196 var getCalled; 1401 var getCalled;
1197 var setCalled; 1402 var setCalled;
1198 Derived.prototype = { 1403 Derived.prototype = {
1199 __proto__: Base.prototype, 1404 __proto__: Base.prototype,
1200 get x() { getCalled++; return 42; }, 1405 get x() { getCalled++; return 42; },
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
1677 super.x = 10; 1882 super.x = 10;
1678 assertEquals(27, super.x); 1883 assertEquals(27, super.x);
1679 assertEquals(27, this.x); 1884 assertEquals(27, this.x);
1680 }, 1885 },
1681 mStrict() { 1886 mStrict() {
1682 'use strict'; 1887 'use strict';
1683 assertEquals(27, super.x); 1888 assertEquals(27, super.x);
1684 assertEquals(27, this.x); 1889 assertEquals(27, this.x);
1685 var ex = null; 1890 var ex = null;
1686 try { super.x = 10; } catch(e) { ex = e; } 1891 try { super.x = 10; } catch(e) { ex = e; }
1687 assertTrue(ex instanceof TypeError); 1892 assertInstanceof(ex, TypeError);
1688 assertEquals(27, super.x); 1893 assertEquals(27, super.x);
1689 assertEquals(27, this.x); 1894 assertEquals(27, this.x);
1690 } 1895 }
1691 }; 1896 };
1692 new Derived().mSloppy(); 1897 new Derived().mSloppy();
1693 new Derived().mStrict(); 1898 new Derived().mStrict();
1694 }()); 1899 }());
1695 1900
1696 1901
1697 (function TestSetterKeyedSuperNonWritable() { 1902 (function TestSetterKeyedSuperNonWritable() {
(...skipping 11 matching lines...) Expand all
1709 super[x] = 10; 1914 super[x] = 10;
1710 assertEquals(27, super[x]); 1915 assertEquals(27, super[x]);
1711 assertEquals(27, this[x]); 1916 assertEquals(27, this[x]);
1712 }, 1917 },
1713 mStrict() { 1918 mStrict() {
1714 'use strict'; 1919 'use strict';
1715 assertEquals(27, super[x]); 1920 assertEquals(27, super[x]);
1716 assertEquals(27, this[x]); 1921 assertEquals(27, this[x]);
1717 var ex = null; 1922 var ex = null;
1718 try { super[x] = 10; } catch(e) { ex = e; } 1923 try { super[x] = 10; } catch(e) { ex = e; }
1719 assertTrue(ex instanceof TypeError); 1924 assertInstanceof(ex, TypeError);
1720 assertEquals(27, super[x]); 1925 assertEquals(27, super[x]);
1721 assertEquals(27, this[x]); 1926 assertEquals(27, this[x]);
1722 } 1927 }
1723 }; 1928 };
1724 new Derived().mSloppy(); 1929 new Derived().mSloppy();
1725 new Derived().mStrict(); 1930 new Derived().mStrict();
1726 }()); 1931 }());
1727 1932
1728 1933
1729 (function TestSetterKeyedNumericSuperNonWritable() { 1934 (function TestSetterKeyedNumericSuperNonWritable() {
(...skipping 11 matching lines...) Expand all
1741 super[x] = 10; 1946 super[x] = 10;
1742 assertEquals(27, super[x]); 1947 assertEquals(27, super[x]);
1743 assertEquals(27, this[x]); 1948 assertEquals(27, this[x]);
1744 }, 1949 },
1745 mStrict() { 1950 mStrict() {
1746 'use strict'; 1951 'use strict';
1747 assertEquals(27, super[x]); 1952 assertEquals(27, super[x]);
1748 assertEquals(27, this[x]); 1953 assertEquals(27, this[x]);
1749 var ex = null; 1954 var ex = null;
1750 try { super[x] = 10; } catch(e) { ex = e; } 1955 try { super[x] = 10; } catch(e) { ex = e; }
1751 assertTrue(ex instanceof TypeError); 1956 assertInstanceof(ex, TypeError);
1752 assertEquals(27, super[x]); 1957 assertEquals(27, super[x]);
1753 assertEquals(27, this[x]); 1958 assertEquals(27, this[x]);
1754 } 1959 }
1755 }; 1960 };
1756 new Derived().mSloppy(); 1961 new Derived().mSloppy();
1757 new Derived().mStrict(); 1962 new Derived().mStrict();
1758 }()); 1963 }());
1759 1964
1760 1965
1761 (function TestSuperCall() { 1966 (function TestSuperCall() {
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1838 assertEquals(1, calls); 2043 assertEquals(1, calls);
1839 }()); 2044 }());
1840 2045
1841 2046
1842 (function TestExtendsObject() { 2047 (function TestExtendsObject() {
1843 'use strict'; 2048 'use strict';
1844 class F extends Object { } 2049 class F extends Object { }
1845 var f = new F(42); 2050 var f = new F(42);
1846 2051
1847 // TODO(dslomov,arv): Fix this. BUG=v8:3886. 2052 // TODO(dslomov,arv): Fix this. BUG=v8:3886.
1848 assertTrue(f instanceof Number); 2053 assertInstanceof(f, Number);
1849 }()); 2054 }());
1850 2055
1851 (function TestSuperCallErrorCases() { 2056 (function TestSuperCallErrorCases() {
1852 'use strict'; 2057 'use strict';
1853 class T extends Object { 2058 class T extends Object {
1854 constructor() { 2059 constructor() {
1855 super(); 2060 super();
1856 } 2061 }
1857 } 2062 }
1858 2063
1859 T.__proto__ = null; 2064 T.__proto__ = null;
1860 assertThrows(function() { new T(); }, TypeError); 2065 assertThrows(function() { new T(); }, TypeError);
1861 }()); 2066 }());
OLDNEW
« no previous file with comments | « src/runtime/runtime-classes.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698