cf9492ddd8
R=arv@chromium.org,rossberg@chromium.org BUG=v8:811 LOG=N Review URL: https://codereview.chromium.org/1139773005 Cr-Commit-Position: refs/heads/master@{#28457}
144 lines
3.0 KiB
JavaScript
144 lines
3.0 KiB
JavaScript
// Copyright 2015 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
//
|
|
// Flags: --harmony-destructuring
|
|
|
|
(function TestObjectLiteralPattern() {
|
|
var { x : x, y : y } = { x : 1, y : 2 };
|
|
assertEquals(1, x);
|
|
assertEquals(2, y);
|
|
|
|
var {z} = { z : 3 };
|
|
assertEquals(3, z);
|
|
|
|
|
|
var sum = 0;
|
|
for(var {z} = { z : 3 }; z != 0; z--) {
|
|
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);
|
|
}());
|
|
|
|
|
|
(function TestObjectLiteralPatternLexical() {
|
|
'use strict';
|
|
let { x : x, y : y } = { x : 1, y : 2 };
|
|
assertEquals(1, x);
|
|
assertEquals(2, y);
|
|
|
|
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--) {
|
|
assertEquals(0, x);
|
|
sum += z;
|
|
}
|
|
assertEquals(6, sum);
|
|
}());
|
|
|
|
|
|
(function TestObjectLiteralPatternLexicalConst() {
|
|
'use strict';
|
|
const { x : x, y : y } = { x : 1, y : 2 };
|
|
assertEquals(1, x);
|
|
assertEquals(2, y);
|
|
|
|
assertThrows(function() { x++; }, TypeError);
|
|
assertThrows(function() { y++; }, TypeError);
|
|
|
|
const {z} = { z : 3 };
|
|
assertEquals(3, z);
|
|
|
|
|
|
for(const {x, z} = { x : 0, z : 3 }; z != 3 || x != 0;) {
|
|
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);
|
|
}
|
|
}());
|