blob: 283dee3147d6d99c10d8f6f5427b83f9ae12dd1e [file] [log] [blame]
/*
* 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");