Index: test/mjsunit/harmony/destructuring.js |
diff --git a/test/mjsunit/harmony/destructuring.js b/test/mjsunit/harmony/destructuring.js |
index 3cfb6fc528ec6f981108d16b271251b6a3c6e3b7..83d0563b5ccd091d75a1106d6394fd3f6b0607fb 100644 |
--- a/test/mjsunit/harmony/destructuring.js |
+++ b/test/mjsunit/harmony/destructuring.js |
@@ -18,6 +18,26 @@ |
sum += z; |
} |
assertEquals(6, sum); |
+ |
+ |
+ var log = []; |
+ var o = { |
+ get x() { |
+ log.push("x"); |
+ return 0; |
+ }, |
+ get y() { |
+ log.push("y"); |
+ return { |
+ get z() { log.push("z"); return 1; } |
+ } |
+ } |
+ }; |
+ var { x : x0, y : { z : z1 }, x : x1 } = o; |
+ assertSame(0, x0); |
+ assertSame(1, z1); |
+ assertSame(0, x1); |
+ assertArrayEquals(["x", "y", "z", "x"], log); |
}()); |
@@ -30,6 +50,24 @@ |
let {z} = { z : 3 }; |
assertEquals(3, z); |
+ let log = []; |
+ let o = { |
+ get x() { |
+ log.push("x"); |
+ return 0; |
+ }, |
+ get y() { |
+ log.push("y"); |
+ return { |
+ get z() { log.push("z"); return 1; } |
+ } |
+ } |
+ }; |
+ let { x : x0, y : { z : z1 }, x : x1 } = o; |
+ assertSame(0, x0); |
+ assertSame(1, z1); |
+ assertSame(0, x1); |
+ assertArrayEquals(["x", "y", "z", "x"], log); |
let sum = 0; |
for(let {x, z} = { x : 0, z : 3 }; z != 0; z--) { |
@@ -46,6 +84,9 @@ |
assertEquals(1, x); |
assertEquals(2, y); |
+ assertThrows(function() { x++; }, TypeError); |
+ assertThrows(function() { y++; }, TypeError); |
+ |
const {z} = { z : 3 }; |
assertEquals(3, z); |
@@ -54,3 +95,49 @@ |
assertTrue(false); |
} |
}()); |
+ |
+ |
+(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 TestExceptions() { |
+ for (var val of [null, undefined]) { |
+ assertThrows(function() { var {} = val; }, TypeError); |
+ assertThrows(function() { var {x} = val; }, TypeError); |
+ assertThrows(function() { var { x : {} } = { x : val }; }, TypeError); |
+ assertThrows(function() { 'use strict'; let {} = val; }, TypeError); |
+ assertThrows(function() { 'use strict'; let {x} = val; }, TypeError); |
+ assertThrows(function() { 'use strict'; let { x : {} } = { x : val }; }, |
+ TypeError); |
+ } |
+}()); |