Bug 963641 - Add a test for __proto__ in destructuring patterns as a shorthand. r=jorendorff
authorJeff Walden <jwalden@mit.edu>
Tue, 28 Jan 2014 10:38:29 -0800
changeset 165887 78d5cf8a1ac62b46c48e763baad3414eabaed5eb
parent 165886 1e170276a033e726e0f7e43e1967832c67d79133
child 165888 a7566746035f19fee07ef9959eafca550f1c42a0
push id39064
push userjwalden@mit.edu
push dateThu, 30 Jan 2014 01:03:52 +0000
treeherdermozilla-inbound@f4be2e32a9be [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjorendorff
bugs963641
milestone29.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 963641 - Add a test for __proto__ in destructuring patterns as a shorthand. r=jorendorff
js/src/tests/ecma_5/extensions/destructuring-for-inof-__proto__.js
new file mode 100644
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/destructuring-for-inof-__proto__.js
@@ -0,0 +1,85 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'destructuring-for-inof-__proto__.js';
+var BUGNUMBER = 963641;
+var summary =
+  "__proto__ should work in destructuring patterns as the targets of " +
+  "for-in/for-of loops";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function objectWithProtoProperty(v)
+{
+  var obj = {};
+  return Object.defineProperty(obj, "__proto__",
+                               {
+                                 enumerable: true,
+                                 configurable: true,
+                                 writable: true,
+                                 value: v
+                               });
+}
+
+function* objectWithProtoGenerator(v)
+{
+  yield objectWithProtoProperty(v);
+}
+
+function* identityGenerator(v)
+{
+  yield v;
+}
+
+for (var { __proto__: target } of objectWithProtoGenerator(null))
+  assertEq(target, null);
+
+for ({ __proto__: target } of objectWithProtoGenerator("aacchhorrt"))
+  assertEq(target, "aacchhorrt");
+
+for ({ __proto__: target } of identityGenerator(42))
+  assertEq(target, Number.prototype);
+
+for (var { __proto__: target } in { prop: "kneedle" })
+  assertEq(target, String.prototype);
+
+for ({ __proto__: target } in { prop: "snork" })
+  assertEq(target, String.prototype);
+
+for ({ __proto__: target } in { prop: "ohia" })
+  assertEq(target, String.prototype);
+
+function nested()
+{
+  for (var { __proto__: target } of objectWithProtoGenerator(null))
+    assertEq(target, null);
+
+  for ({ __proto__: target } of objectWithProtoGenerator("aacchhorrt"))
+    assertEq(target, "aacchhorrt");
+
+  for ({ __proto__: target } of identityGenerator(42))
+    assertEq(target, Number.prototype);
+
+  for (var { __proto__: target } in { prop: "kneedle" })
+    assertEq(target, String.prototype);
+
+  for ({ __proto__: target } in { prop: "snork" })
+    assertEq(target, String.prototype);
+
+  for ({ __proto__: target } in { prop: "ohia" })
+    assertEq(target, String.prototype);
+}
+nested();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+  reportCompare(true, true);
+
+print("Tests complete");