 Chromium Code Reviews
 Chromium Code Reviews Issue 1146683002:
  [destructuring] Implement initializers in patterns.  (Closed) 
  Base URL: https://chromium.googlesource.com/v8/v8.git@master
    
  
    Issue 1146683002:
  [destructuring] Implement initializers in patterns.  (Closed) 
  Base URL: https://chromium.googlesource.com/v8/v8.git@master| Index: test/mjsunit/harmony/destructuring.js | 
| diff --git a/test/mjsunit/harmony/destructuring.js b/test/mjsunit/harmony/destructuring.js | 
| index 015b6dee93e0cc399bd2151aa2c643f7984eb1d0..d15200804166709e42f45418949d19c35953b129 100644 | 
| --- a/test/mjsunit/harmony/destructuring.js | 
| +++ b/test/mjsunit/harmony/destructuring.js | 
| @@ -23,12 +23,12 @@ | 
| var countX = 0; | 
| var countY = 0; | 
| var countZ = 0; | 
| - var o = { get x() { | 
| - countX++; | 
| + var o = { get x() { | 
| + countX++; | 
| return 0; | 
| }, | 
| - get y() { | 
| - countY++; | 
| + get y() { | 
| + countY++; | 
| return { | 
| get z() { countZ++; return 1; } | 
| } | 
| @@ -41,8 +41,87 @@ | 
| assertEquals(2, countX); | 
| assertEquals(1, countY); | 
| assertEquals(1, countZ); | 
| +}()); | 
| + | 
| + | 
| +(function TestObjectLiteralPatternInitializers() { | 
| + var { x : x, y : y = 2 } = { x : 1 }; | 
| + assertEquals(1, x); | 
| + assertEquals(2, y); | 
| + | 
| + var {z = 3} = {}; | 
| + assertEquals(3, z); | 
| + | 
| 
arv (Not doing code reviews)
2015/05/18 14:36:20
-1 newline
 
Dmitry Lomov (no reviews)
2015/05/18 17:31:23
Done.
 | 
| + | 
| + var sum = 0; | 
| + for(var {z = 3} = {}; z != 0; z--) { | 
| 
arv (Not doing code reviews)
2015/05/18 14:36:20
ws
 
Dmitry Lomov (no reviews)
2015/05/18 17:31:23
Done.
 | 
| + sum += z; | 
| + } | 
| + assertEquals(6, sum); | 
| 
rossberg
2015/05/18 16:17:20
Nit: newline
 
Dmitry Lomov (no reviews)
2015/05/18 17:31:23
Done.
 | 
| + var countX = 0; | 
| + var countY = 0; | 
| + var countZ = 0; | 
| + var o = { get x() { | 
| 
rossberg
2015/05/18 16:17:19
Can we modify this test (and below) such that it a
 
Dmitry Lomov (no reviews)
2015/05/18 17:31:23
Done.
 | 
| + countX++; | 
| + return undefined; | 
| + }, | 
| + get y() { | 
| + countY++; | 
| + return { | 
| + get z() { countZ++; return undefined; } | 
| + } | 
| + } | 
| + }; | 
| + var { x : x0 = 0, y : { z : z1 = 1}, x : x1 = 0} = o; | 
| + assertSame(0, x0); | 
| + assertSame(1, z1); | 
| + assertSame(0, x1); | 
| + assertEquals(2, countX); | 
| + assertEquals(1, countY); | 
| + assertEquals(1, countZ); | 
| +}()); | 
| + | 
| + | 
| +(function TestObjectLiteralPatternLexicalInitializers() { | 
| + 'use strict'; | 
| + let { x : x, y : y = 2 } = { x : 1 }; | 
| + assertEquals(1, x); | 
| + assertEquals(2, y); | 
| + | 
| + let {z = 3} = {}; | 
| + assertEquals(3, z); | 
| + | 
| + let countX = 0; | 
| + let countY = 0; | 
| + let countZ = 0; | 
| + let o = { get x() { | 
| + countX++; | 
| + return undefined; | 
| + }, | 
| + get y() { | 
| + countY++; | 
| + return { | 
| + get z() { countZ++; return undefined; } | 
| + } | 
| + } | 
| + }; | 
| + let { x : x0 = 0, y : { z : z1 = 1 }, x : x1 = 5} = o; | 
| + assertSame(0, x0); | 
| + assertSame(1, z1); | 
| + assertSame(5, x1); | 
| + assertEquals(2, countX); | 
| + assertEquals(1, countY); | 
| + assertEquals(1, countZ); | 
| + | 
| + | 
| + let sum = 0; | 
| + for(let {x = 0, z = 3} = {}; z != 0; z--) { | 
| + assertEquals(0, x); | 
| + sum += z; | 
| + } | 
| + assertEquals(6, sum); | 
| }()); | 
| @@ -58,12 +137,12 @@ | 
| let countX = 0; | 
| let countY = 0; | 
| let countZ = 0; | 
| - let o = { get x() { | 
| - countX++; | 
| + let o = { get x() { | 
| + countX++; | 
| return 0; | 
| }, | 
| - get y() { | 
| - countY++; | 
| + get y() { | 
| + countY++; | 
| return { | 
| get z() { countZ++; return 1; } | 
| } | 
| @@ -105,6 +184,73 @@ | 
| } | 
| }()); | 
| +(function TestFailingMatchesSloppy() { | 
| + var {x, y} = {}; | 
| + assertSame(undefined, x); | 
| + assertSame(undefined, y); | 
| + | 
| + var { x : { z1 }, y2} = { x : {}, y2 : 42 } | 
| + assertSame(undefined, z1); | 
| + assertSame(42, y2); | 
| +}()); | 
| + | 
| + | 
| +(function TestFailingMatchesStrict() { | 
| + 'use strict'; | 
| + var {x, y} = {}; | 
| + assertSame(undefined, x); | 
| + assertSame(undefined, y); | 
| + | 
| + var { x : { z1 }, y2} = { x : {}, y2 : 42 } | 
| + assertSame(undefined, z1); | 
| + assertSame(42, y2); | 
| + | 
| + { | 
| + let {x1,y1} = {}; | 
| + assertSame(undefined, x1); | 
| + assertSame(undefined, y1); | 
| + | 
| + let { x : { z1 }, y2} = { x : {}, y2 : 42 } | 
| + assertSame(undefined, z1); | 
| + assertSame(42, y2); | 
| + } | 
| +}()); | 
| + | 
| + | 
| +(function TestTDZInIntializers() { | 
| 
rossberg
2015/05/18 16:17:19
Add tests like
let {x, y = eval("x")} = {x:42}
le
 
Dmitry Lomov (no reviews)
2015/05/18 17:31:23
Done.
 | 
| + 'use strict'; | 
| + { | 
| + let {x, y = x} = {x : 42, y : 27}; | 
| + assertSame(42, x); | 
| + assertSame(27, y); | 
| + } | 
| + | 
| + { | 
| + let {x, y = x + 1} = { x : 42 }; | 
| + assertSame(42, x); | 
| + assertSame(43, y); | 
| + } | 
| + assertThrows(function() { | 
| + let {x = y, y} = { y : 42 }; | 
| + }, ReferenceError); | 
| +}()); | 
| + | 
| + | 
| +(function TestSideEffectsInInitializers() { | 
| + var callCount = 0; | 
| + function f(v) { callCount++; return v; } | 
| + | 
| + callCount = 0; | 
| + var { x = f(42) } = { x : 27 }; | 
| + assertSame(27, x); | 
| + assertEquals(0, callCount); | 
| + | 
| + callCount = 0; | 
| + var { x = f(42) } = {}; | 
| + assertSame(42, x); | 
| + assertEquals(1, callCount); | 
| +}()); | 
| + | 
| 
arv (Not doing code reviews)
2015/05/18 14:36:20
Did you want to add tests for 
let {x, x} = {x: 1
 
Dmitry Lomov (no reviews)
2015/05/18 17:31:23
Done.
 | 
| (function TestExceptions() { | 
| assertThrows(function() { var {} = null; }, TypeError); |