Source code

Revision control

Copy as Markdown

Other Tools

/*
* Any copyright is dedicated to the Public Domain.
*/
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");