| Index: test/mjsunit/harmony/object-rest-basic.js
|
| diff --git a/test/mjsunit/harmony/object-rest-basic.js b/test/mjsunit/harmony/object-rest-basic.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4c9b564ca7c0ac7d9072261adc8f6f034e47bcef
|
| --- /dev/null
|
| +++ b/test/mjsunit/harmony/object-rest-basic.js
|
| @@ -0,0 +1,122 @@
|
| +// // Copyright 2016 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-object-rest-spread
|
| +var { ...x } = { a: 1 };
|
| +assertEquals({ a: 1 }, x);
|
| +
|
| +var { ...x } = { a: 1, b: 1 };
|
| +assertEquals({ a: 1, b: 1 }, x);
|
| +
|
| +var { x, ...x } = { a: 1, b: 1 };
|
| +assertEquals({ a: 1, b: 1 }, x);
|
| +
|
| +var { x = {}, ...x } = { a: 1, b: 1 };
|
| +assertEquals({ a: 1, b: 1 }, x);
|
| +
|
| +var { y, ...x } = { y: 1, a: 1 };
|
| +assertEquals({ a: 1 }, x);
|
| +assertEquals(1, y);
|
| +
|
| +var { z, y, ...x } = { z:1, y: 1, a: 1, b: 1 };
|
| +assertEquals({ a: 1, b:1 }, x);
|
| +assertEquals(1, y);
|
| +assertEquals(1, z);
|
| +
|
| +({ a, ...b } = { a: 1, b: 2 });
|
| +assertEquals(1, a);
|
| +assertEquals({ b: 2 }, b);
|
| +
|
| +var { ...x } = {};
|
| +assertEquals({}, x);
|
| +
|
| +var key = "b";
|
| +var { [key]: y, ...x } = { b: 1, a: 1 };
|
| +assertEquals({ a: 1 }, x);
|
| +assertEquals(1, y);
|
| +
|
| +var key = 1;
|
| +var { [key++]: y, ...x } = { 1: 1, a: 1 };
|
| +assertEquals({ a: 1 }, x);
|
| +assertEquals(key, 2);
|
| +assertEquals(1, y);
|
| +
|
| +function example({a, ...rest}, { b = rest }) {
|
| + assertEquals(1, a);
|
| + assertEquals({ b: 2, c: 3}, rest);
|
| + assertEquals({ b: 2, c: 3}, b);
|
| +};
|
| +example({ a: 1, b: 2, c: 3}, { b: undefined });
|
| +
|
| +var x = { a: 3 };
|
| +var y = {
|
| + set a(val) { assertUnreachable(); },
|
| + ...x,
|
| +};
|
| +assertEquals(y.a, 3);
|
| +
|
| +var x = {
|
| + get a() { throw new Error(); },
|
| +};
|
| +assertThrows(() => { var { ...y } = x });
|
| +
|
| +var p = new Proxy({}, {
|
| + ownKeys() { throw new Error(); }
|
| +});
|
| +assertThrows(() => { var { ...y } = p });
|
| +
|
| +var p = new Proxy({}, {
|
| + ownKeys() { [1]; },
|
| + get() { throw new Error(); }
|
| +});
|
| +assertThrows(() => { var { ...y } = p });
|
| +
|
| +var p = new Proxy({}, {
|
| + ownKeys() { [1]; },
|
| + getOwnPropertyDescriptor() { throw new Error(); }
|
| +});
|
| +assertThrows(() => { var { ...y } = p });
|
| +
|
| +var z = { b: 1}
|
| +var p = new Proxy(z, {
|
| + ownKeys() { return Object.keys(z); },
|
| + get(_, prop) { return z[prop]; },
|
| + getOwnPropertyDescriptor(_, prop) {
|
| + return Object.getOwnPropertyDescriptor(z, prop);
|
| + },
|
| +});
|
| +var { ...y } = p ;
|
| +assertEquals(z, y);
|
| +
|
| +var z = { b: 1}
|
| +var { ...y } = { ...z} ;
|
| +assertEquals(z, y);
|
| +
|
| +var count = 0;
|
| +class Foo {
|
| + constructor(x) { this.x = x; }
|
| + toString() { count++; return this.x.toString(); }
|
| +}
|
| +var f = new Foo(1);
|
| +var { [f] : x, ...y } = { 1: 1, 2: 2}
|
| +assertEquals(1, count);
|
| +assertEquals({2: 2}, y);
|
| +
|
| +var { 1: x, 2: y, ...z } = { 1: 1, 2: 2, 3:3 };
|
| +assertEquals(1, x);
|
| +assertEquals(2, y);
|
| +assertEquals({ 3: 3 }, z);
|
| +
|
| +var { 1.5: x, 2: y, ...z } = { 1.5: 1, 2: 2, 3:3 };
|
| +assertEquals(1, x);
|
| +assertEquals(2, y);
|
| +assertEquals({ 3: 3 }, z);
|
| +
|
| +(({x, ...z}) => { assertEquals({y: 1}, z); })({ x: 1, y: 1});
|
| +
|
| +var [...{...z}] = [{ x: 1}];
|
| +assertEquals({ 0: { x: 1} }, z);
|
| +
|
| +var {...{x}} = { x: 1};
|
| +assertEquals(1, x);
|
|
|