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

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

Issue 1146683002: [destructuring] Implement initializers in patterns. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebased onto ToT Created 5 years, 7 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 | « test/cctest/test-parsing.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 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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-destructuring 5 // Flags: --harmony-destructuring
6 6
7 (function TestObjectLiteralPattern() { 7 (function TestObjectLiteralPattern() {
8 var { x : x, y : y } = { x : 1, y : 2 }; 8 var { x : x, y : y } = { x : 1, y : 2 };
9 assertEquals(1, x); 9 assertEquals(1, x);
10 assertEquals(2, y); 10 assertEquals(2, y);
11 11
12 var {z} = { z : 3 }; 12 var {z} = { z : 3 };
13 assertEquals(3, z); 13 assertEquals(3, z);
14 14
15 15
16 var sum = 0; 16 var sum = 0;
17 for(var {z} = { z : 3 }; z != 0; z--) { 17 for (var {z} = { z : 3 }; z != 0; z--) {
18 sum += z; 18 sum += z;
19 } 19 }
20 assertEquals(6, sum); 20 assertEquals(6, sum);
21 21
22 22
23 var log = []; 23 var log = [];
24 var o = { 24 var o = {
25 get x() { 25 get x() {
26 log.push("x"); 26 log.push("x");
27 return 0; 27 return 0;
28 }, 28 },
29 get y() { 29 get y() {
30 log.push("y"); 30 log.push("y");
31 return { 31 return {
32 get z() { log.push("z"); return 1; } 32 get z() { log.push("z"); return 1; }
33 } 33 }
34 } 34 }
35 }; 35 };
36 var { x : x0, y : { z : z1 }, x : x1 } = o; 36 var { x : x0, y : { z : z1 }, x : x1 } = o;
37 assertSame(0, x0); 37 assertSame(0, x0);
38 assertSame(1, z1); 38 assertSame(1, z1);
39 assertSame(0, x1); 39 assertSame(0, x1);
40 assertArrayEquals(["x", "y", "z", "x"], log); 40 assertArrayEquals(["x", "y", "z", "x"], log);
41 }()); 41 }());
42 42
43 43
44 (function TestObjectLiteralPatternInitializers() {
45 var { x : x, y : y = 2 } = { x : 1 };
46 assertEquals(1, x);
47 assertEquals(2, y);
48
49 var {z = 3} = {};
50 assertEquals(3, z);
51
52 var sum = 0;
53 for (var {z = 3} = {}; z != 0; z--) {
54 sum += z;
55 }
56 assertEquals(6, sum);
57
58 var log = [];
59 var o = {
60 get x() {
61 log.push("x");
62 return undefined;
63 },
64 get y() {
65 log.push("y");
66 return {
67 get z() { log.push("z"); return undefined; }
68 }
69 }
70 };
71 var { x : x0 = 0, y : { z : z1 = 1}, x : x1 = 0} = o;
72 assertSame(0, x0);
73 assertSame(1, z1);
74 assertSame(0, x1);
75 assertArrayEquals(["x", "y", "z", "x"], log);
76 }());
77
78
79 (function TestObjectLiteralPatternLexicalInitializers() {
80 'use strict';
81 let { x : x, y : y = 2 } = { x : 1 };
82 assertEquals(1, x);
83 assertEquals(2, y);
84
85 let {z = 3} = {};
86 assertEquals(3, z);
87
88 let log = [];
89 let o = {
90 get x() {
91 log.push("x");
92 return undefined;
93 },
94 get y() {
95 log.push("y");
96 return {
97 get z() { log.push("z"); return undefined; }
98 }
99 }
100 };
101
102 let { x : x0 = 0, y : { z : z1 = 1 }, x : x1 = 5} = o;
103 assertSame(0, x0);
104 assertSame(1, z1);
105 assertSame(5, x1);
106 assertArrayEquals(["x", "y", "z", "x"], log);
107
108 let sum = 0;
109 for (let {x = 0, z = 3} = {}; z != 0; z--) {
110 assertEquals(0, x);
111 sum += z;
112 }
113 assertEquals(6, sum);
114 }());
115
116
44 (function TestObjectLiteralPatternLexical() { 117 (function TestObjectLiteralPatternLexical() {
45 'use strict'; 118 'use strict';
46 let { x : x, y : y } = { x : 1, y : 2 }; 119 let { x : x, y : y } = { x : 1, y : 2 };
47 assertEquals(1, x); 120 assertEquals(1, x);
48 assertEquals(2, y); 121 assertEquals(2, y);
49 122
50 let {z} = { z : 3 }; 123 let {z} = { z : 3 };
51 assertEquals(3, z); 124 assertEquals(3, z);
52 125
53 let log = []; 126 let log = [];
54 let o = { 127 let o = {
55 get x() { 128 get x() {
56 log.push("x"); 129 log.push("x");
57 return 0; 130 return 0;
58 }, 131 },
59 get y() { 132 get y() {
60 log.push("y"); 133 log.push("y");
61 return { 134 return {
62 get z() { log.push("z"); return 1; } 135 get z() { log.push("z"); return 1; }
63 } 136 }
64 } 137 }
65 }; 138 };
66 let { x : x0, y : { z : z1 }, x : x1 } = o; 139 let { x : x0, y : { z : z1 }, x : x1 } = o;
67 assertSame(0, x0); 140 assertSame(0, x0);
68 assertSame(1, z1); 141 assertSame(1, z1);
69 assertSame(0, x1); 142 assertSame(0, x1);
70 assertArrayEquals(["x", "y", "z", "x"], log); 143 assertArrayEquals(["x", "y", "z", "x"], log);
71 144
72 let sum = 0; 145 let sum = 0;
73 for(let {x, z} = { x : 0, z : 3 }; z != 0; z--) { 146 for (let {x, z} = { x : 0, z : 3 }; z != 0; z--) {
74 assertEquals(0, x); 147 assertEquals(0, x);
75 sum += z; 148 sum += z;
76 } 149 }
77 assertEquals(6, sum); 150 assertEquals(6, sum);
78 }()); 151 }());
79 152
80 153
81 (function TestObjectLiteralPatternLexicalConst() { 154 (function TestObjectLiteralPatternLexicalConst() {
82 'use strict'; 155 'use strict';
83 const { x : x, y : y } = { x : 1, y : 2 }; 156 const { x : x, y : y } = { x : 1, y : 2 };
84 assertEquals(1, x); 157 assertEquals(1, x);
85 assertEquals(2, y); 158 assertEquals(2, y);
86 159
87 assertThrows(function() { x++; }, TypeError); 160 assertThrows(function() { x++; }, TypeError);
88 assertThrows(function() { y++; }, TypeError); 161 assertThrows(function() { y++; }, TypeError);
89 162
90 const {z} = { z : 3 }; 163 const {z} = { z : 3 };
91 assertEquals(3, z); 164 assertEquals(3, z);
92 165
93 166 for (const {x, z} = { x : 0, z : 3 }; z != 3 || x != 0;) {
94 for(const {x, z} = { x : 0, z : 3 }; z != 3 || x != 0;) {
95 assertTrue(false); 167 assertTrue(false);
96 } 168 }
97 }()); 169 }());
98 170
99 171
100 (function TestFailingMatchesSloppy() { 172 (function TestFailingMatchesSloppy() {
101 var {x, y} = {}; 173 var {x, y} = {};
102 assertSame(undefined, x); 174 assertSame(undefined, x);
103 assertSame(undefined, y); 175 assertSame(undefined, y);
104 176
(...skipping 18 matching lines...) Expand all
123 assertSame(undefined, x1); 195 assertSame(undefined, x1);
124 assertSame(undefined, y1); 196 assertSame(undefined, y1);
125 197
126 let { x : { z1 }, y2} = { x : {}, y2 : 42 } 198 let { x : { z1 }, y2} = { x : {}, y2 : 42 }
127 assertSame(undefined, z1); 199 assertSame(undefined, z1);
128 assertSame(42, y2); 200 assertSame(42, y2);
129 } 201 }
130 }()); 202 }());
131 203
132 204
205 (function TestTDZInIntializers() {
206 'use strict';
207 {
208 let {x, y = x} = {x : 42, y : 27};
209 assertSame(42, x);
210 assertSame(27, y);
211 }
212
213 {
214 let {x, y = x + 1} = { x : 42 };
215 assertSame(42, x);
216 assertSame(43, y);
217 }
218 assertThrows(function() {
219 let {x = y, y} = { y : 42 };
220 }, ReferenceError);
221
222 {
223 let {x, y = eval("x+1")} = {x:42};
224 assertEquals(42, x);
225 assertEquals(43, y);
226 }
227
228 {
229 let {x = function() {return y+1;}, y} = {y:42};
230 assertEquals(43, x());
231 assertEquals(42, y);
232 }
233 {
234 let {x = function() {return eval("y+1");}, y} = {y:42};
235 assertEquals(43, x());
236 assertEquals(42, y);
237 }
238 }());
239
240
241 (function TestSideEffectsInInitializers() {
242 var callCount = 0;
243 function f(v) { callCount++; return v; }
244
245 callCount = 0;
246 var { x = f(42) } = { x : 27 };
247 assertSame(27, x);
248 assertEquals(0, callCount);
249
250 callCount = 0;
251 var { x = f(42) } = {};
252 assertSame(42, x);
253 assertEquals(1, callCount);
254 }());
255
256
257 (function TestMultipleAccesses() {
258 assertThrows(
259 "'use strict';"+
260 "const {x,x} = {x:1};",
261 SyntaxError);
262
263 assertThrows(
264 "'use strict';"+
265 "let {x,x} = {x:1};",
266 SyntaxError);
267
268 (function() {
269 var {x,x = 2} = {x : 1};
270 assertSame(1, x);
271 }());
272
273 assertThrows(function () {
274 'use strict';
275 let {x = (function() { x = 2; }())} = {};
276 }, ReferenceError);
277
278 (function() {
279 'use strict';
280 let {x = (function() { x = 2; }())} = {x:1};
281 assertSame(1, x);
282 }());
283 }());
284
285
133 (function TestExceptions() { 286 (function TestExceptions() {
134 for (var val of [null, undefined]) { 287 for (var val of [null, undefined]) {
135 assertThrows(function() { var {} = val; }, TypeError); 288 assertThrows(function() { var {} = val; }, TypeError);
136 assertThrows(function() { var {x} = val; }, TypeError); 289 assertThrows(function() { var {x} = val; }, TypeError);
137 assertThrows(function() { var { x : {} } = { x : val }; }, TypeError); 290 assertThrows(function() { var { x : {} } = { x : val }; }, TypeError);
138 assertThrows(function() { 'use strict'; let {} = val; }, TypeError); 291 assertThrows(function() { 'use strict'; let {} = val; }, TypeError);
139 assertThrows(function() { 'use strict'; let {x} = val; }, TypeError); 292 assertThrows(function() { 'use strict'; let {x} = val; }, TypeError);
140 assertThrows(function() { 'use strict'; let { x : {} } = { x : val }; }, 293 assertThrows(function() { 'use strict'; let { x : {} } = { x : val }; },
141 TypeError); 294 TypeError);
142 } 295 }
143 }()); 296 }());
OLDNEW
« no previous file with comments | « test/cctest/test-parsing.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698