// Any copyright is dedicated to the Public Domain.
// http://creativecommons.org/licenses/publicdomain/
//-----------------------------------------------------------------------------
var BUGNUMBER = 430133;
var summary =
'ES5 Object.defineProperty(O, P, Attributes)';
print(BUGNUMBER +
": " + summary);
/**************
* BEGIN TEST *
**************/
var o = [];
Object.defineProperty(o, 0, { value: 17 });
var desc = Object.getOwnPropertyDescriptor(o, 0);
assertEq(desc !== undefined,
true);
assertEq(desc.value, 17);
assertEq(desc.enumerable,
false);
assertEq(desc.configurable,
false);
assertEq(desc.writable,
false);
desc = Object.getOwnPropertyDescriptor(o,
"length");
assertEq(desc !== undefined,
true);
assertEq(desc.enumerable,
false);
assertEq(desc.configurable,
false);
assertEq(desc.writable,
true);
assertEq(desc.value, 1);
assertEq(o.length, 1);
Object.defineProperty(o,
"foobar",
{ value: 42, enumerable:
false, configurable:
true });
assertEq(o.foobar, 42);
desc = Object.getOwnPropertyDescriptor(o,
"foobar");
assertEq(desc !== undefined,
true);
assertEq(desc.value, 42);
assertEq(desc.configurable,
true);
assertEq(desc.enumerable,
false);
assertEq(desc.writable,
false);
var called =
false;
o = { set x(a) { called =
true; } };
Object.defineProperty(o,
"x", { get:
function() {
return "get"; } });
desc = Object.getOwnPropertyDescriptor(o,
"x");
assertEq(
"set" in desc,
true);
assertEq(
"get" in desc,
true);
assertEq(called,
false);
o.x = 13;
assertEq(called,
true);
var toSource = Object.prototype.toSource ||
function() { };
toSource.call(o);
// a test for this not crashing
var called =
false;
var o =
Object.defineProperty({},
"foo",
{ get:
function() {
return 17; },
set:
function(v) { called =
true; } });
assertEq(o.foo, 17);
o.foo = 42;
assertEq(called,
true);
/*
* XXX need tests for Object.defineProperty(array, "length", { ... }) when we
* support it!
*/
/******************************************************************************/
if (
typeof reportCompare ===
"function")
reportCompare(
true,
true);
print(
"All tests passed!");