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

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

Issue 908883002: new classes: implement new.target passing to superclass constructor. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Test 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
« src/scopes.cc ('K') | « src/x64/full-codegen-x64.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: --experimental-classes --harmony-classes 5 // Flags: --experimental-classes --harmony-classes
6 6
7 'use strict'; 7 'use strict';
8 8 (function TestArgumentsAccess() {
9 class Base { 9 class Base {
10 constructor(a, b) { 10 constructor() {
11 let o = new Object(); 11 assertEquals(2, arguments.length);
12 o.prp = a + b; 12 assertEquals(1, arguments[0]);
13 return o; 13 assertEquals(2, arguments[1]);
14 } 14 }
15 } 15 }
16 16
17 class Subclass extends Base { 17 let b = new Base(1,2);
18 constructor(a, b) { 18
19 var exn; 19 class Subclass extends Base {
20 try { 20 constructor() {
21 this.prp1 = 3; 21 assertEquals(2, arguments.length);
22 } catch (e) { 22 assertEquals(3, arguments[0]);
23 exn = e; 23 assertEquals(4, arguments[1]);
24 } 24 super(1,2);
25 assertTrue(exn instanceof ReferenceError); 25 }
26 super(a, b); 26 }
27 assertSame(a + b, this.prp); 27
28 assertSame(undefined, this.prp1); 28 let s = new Subclass(3,4);
29 assertFalse(this.hasOwnProperty("prp1")); 29 assertEquals(0, Subclass.length);
30 return this; 30
31 } 31 class Subclass2 extends Base {
32 } 32 constructor(x,y) {
arv (Not doing code reviews) 2015/02/10 20:15:18 ws after commma
33 33 assertEquals(2, arguments.length);
34 let b = new Base(1, 2); 34 assertEquals(3, arguments[0]);
35 assertSame(3, b.prp); 35 assertEquals(4, arguments[1]);
36 36 super(1,2);
37 37 }
38 let s = new Subclass(2, -1); 38 }
39 assertSame(1, s.prp); 39
40 assertSame(undefined, s.prp1); 40 let s2 = new Subclass2(3,4);
41 assertFalse(s.hasOwnProperty("prp1")); 41 assertEquals(2, Subclass2.length);
42 42 }());
43 class Subclass2 extends Base { 43
44 constructor(x) { 44 (function TestThisAccessRestriction() {
45 super(1,2); 45 class Base {
46 46 constructor(a, b) {
47 if (x < 0) return; 47 let o = new Object();
48 48 o.prp = a + b;
49 let called = false; 49 return o;
50 function tmp() { called = true; return 3; } 50 }
51 var exn = null; 51 }
52 try { 52
53 super(tmp(),4); 53 class Subclass extends Base {
54 } catch(e) { exn = e; } 54 constructor(a, b) {
55 assertTrue(exn !== null); 55 var exn;
56 assertFalse(called); 56 try {
57 } 57 this.prp1 = 3;
58 } 58 } catch (e) {
59 59 exn = e;
60 var s2 = new Subclass2(1); 60 }
61 assertSame(3, s2.prp); 61 assertTrue(exn instanceof ReferenceError);
62 62 super(a, b);
63 var s3 = new Subclass2(-1); 63 assertSame(a + b, this.prp);
64 assertSame(3, s3.prp); 64 assertSame(undefined, this.prp1);
65 65 assertFalse(this.hasOwnProperty("prp1"));
66 assertThrows(function() { Subclass.call(new Object(), 1, 2); }, TypeError); 66 return this;
67 assertThrows(function() { Base.call(new Object(), 1, 2); }, TypeError); 67 }
68 }
69
70 let b = new Base(1, 2);
71 assertSame(3, b.prp);
72
73
74 let s = new Subclass(2, -1);
75 assertSame(1, s.prp);
76 assertSame(undefined, s.prp1);
77 assertFalse(s.hasOwnProperty("prp1"));
78
79 class Subclass2 extends Base {
80 constructor(x) {
81 super(1,2);
82
83 if (x < 0) return;
84
85 let called = false;
86 function tmp() { called = true; return 3; }
87 var exn = null;
88 try {
89 super(tmp(),4);
arv (Not doing code reviews) 2015/02/10 20:15:18 Because left to right execution?
Dmitry Lomov (no reviews) 2015/02/11 00:58:29 I realized this is not correct under the new spec.
90 } catch(e) { exn = e; }
arv (Not doing code reviews) 2015/02/10 20:15:18 ws after catch
Dmitry Lomov (no reviews) 2015/02/11 00:58:29 Done.
91 assertTrue(exn !== null);
arv (Not doing code reviews) 2015/02/10 20:15:18 instanceof test would be better
Dmitry Lomov (no reviews) 2015/02/11 00:58:29 Done.
92 assertFalse(called);
93 }
94 }
95
96 var s2 = new Subclass2(1);
97 assertSame(3, s2.prp);
98
99 var s3 = new Subclass2(-1);
100 assertSame(3, s3.prp);
101
102 assertThrows(function() { Subclass.call(new Object(), 1, 2); }, TypeError);
103 assertThrows(function() { Base.call(new Object(), 1, 2); }, TypeError);
104
105 class BadSubclass extends Base {
106 constructor() {}
107 }
108
109 assertThrows(function() { new BadSubclass(); }, ReferenceError);
110 }());
111
112 (function TestPrototypeWiring() {
113 class Base {
114 constructor(x) {
115 this.foobar = x;
116 }
117 }
118
119 class Subclass extends Base {
120 constructor(x) {
121 super(x);
122 }
123 }
124
125 let s = new Subclass(1);
126 assertSame(1, s.foobar);
127 assertTrue(s.__proto__ === Subclass.prototype);
arv (Not doing code reviews) 2015/02/10 20:15:18 assertSame here too
Dmitry Lomov (no reviews) 2015/02/11 00:58:29 Done.
128
129 let s1 = new Subclass(1,2);
130 assertSame(1, s1.foobar);
131 assertTrue(s1.__proto__ === Subclass.prototype);
132
133 let s2 = new Subclass();
134 assertSame(undefined, s2.foobar);
135 assertTrue(s2.__proto__ === Subclass.prototype);
136 assertThrows(function() { Subclass(1); }, TypeError);
137 assertThrows(function() { Subclass(1,2,3,4); }, TypeError);
138
139 class Subclass2 extends Subclass {
140 constructor() {
141 super(5,6,7);
142 }
143 }
144
145 let s_2 = new Subclass2();
arv (Not doing code reviews) 2015/02/10 20:15:18 no underscores in js
Dmitry Lomov (no reviews) 2015/02/11 00:58:29 Done.
146 assertSame(5, s_2.foobar);
147 assertTrue(s_2.__proto__ === Subclass2.prototype);
148
149 class Subclass3 extends Base {
150 constructor(x,y) {
151 super(x+y);
arv (Not doing code reviews) 2015/02/10 20:15:18 ws around binops
Dmitry Lomov (no reviews) 2015/02/11 00:58:29 Done.
152 }
153 }
154
155 let s_3 = new Subclass3(27,42-27);
156 assertSame(42, s_3.foobar);
157 assertTrue(s_3.__proto__ === Subclass3.prototype);
158 }());
159
160 (function TestSublclassingBuiltins() {
161 class ExtendedUint8Array extends Uint8Array {
162 constructor() {
163 super(10);
164 this[0] = 255;
165 this[1] = 0xFFA;
166 }
167 }
168
169 var eua = new ExtendedUint8Array();
170 assertEquals(10, eua.length);
171 assertEquals(10, eua.byteLength);
172 assertEquals(0xFF, eua[0]);
173 assertEquals(0xFA, eua[1]);
174 assertTrue(eua.__proto__ === ExtendedUint8Array.prototype);
175 assertEquals("[object Uint8Array]", Object.prototype.toString.call(eua));
176 }());
177
178 (function TestSubclassingNull() {
179 let N = null;
180
181 class Foo extends N {
182 constructor(x,y) {
183 assertSame(1, x);
184 assertSame(2, y);
185 return new Object();
arv (Not doing code reviews) 2015/02/10 20:15:18 in general, prefer {} over new Object()
Dmitry Lomov (no reviews) 2015/02/11 00:58:29 Done.
186 }
187 }
188
189 new Foo(1,2);
190 }());
191
192 (function TestSubclassBinding() {
193 class Base {
194 constructor(x, y) {
195 this.x = x;
196 this.y = y;
197 }
198 }
199 class Subclass extends Base {
200 constructor(x,y) {
201 super(x,y);
202 }
203 }
204
205 let f = Subclass.bind(new Object());
arv (Not doing code reviews) 2015/02/10 20:15:18 Bind a parameter too. let f = Subclass.bind({}, 1
arv (Not doing code reviews) 2015/02/10 20:15:18 maybe let obj = {}; let f = Subclass.bind(obj);
Dmitry Lomov (no reviews) 2015/02/11 00:58:29 Done.
Dmitry Lomov (no reviews) 2015/02/11 00:58:29 Done.
206 assertThrows(function () { f(1,2); }, TypeError);
207 let s = new f(1,2);
208 assertSame(1, s.x);
209 assertSame(2, s.y);
210 assertTrue(s.__proto__ === Subclass.prototype);
211
212 let s1 = new f(1);
213 assertSame(1, s1.x);
214 assertSame(undefined, s1.y);
215 assertTrue(s1.__proto__ === Subclass.prototype);
216 }());
OLDNEW
« src/scopes.cc ('K') | « src/x64/full-codegen-x64.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698