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

Unified Diff: test/mjsunit/harmony/object-rest-basic.js

Issue 2620943002: [ESnext] Implement Object Rest (Closed)
Patch Set: fix nits Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/cctest/test-parsing.cc ('k') | test/mjsunit/harmony/object-spread-basic.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « test/cctest/test-parsing.cc ('k') | test/mjsunit/harmony/object-spread-basic.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698