1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/tests/ecma_5/Object/15.2.3.6-miscellaneous.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,74 @@ 1.4 +// Any copyright is dedicated to the Public Domain. 1.5 +// http://creativecommons.org/licenses/publicdomain/ 1.6 + 1.7 +//----------------------------------------------------------------------------- 1.8 +var BUGNUMBER = 430133; 1.9 +var summary = 'ES5 Object.defineProperty(O, P, Attributes)'; 1.10 + 1.11 +print(BUGNUMBER + ": " + summary); 1.12 + 1.13 +/************** 1.14 + * BEGIN TEST * 1.15 + **************/ 1.16 + 1.17 +var o = []; 1.18 +Object.defineProperty(o, 0, { value: 17 }); 1.19 +var desc = Object.getOwnPropertyDescriptor(o, 0); 1.20 +assertEq(desc !== undefined, true); 1.21 +assertEq(desc.value, 17); 1.22 +assertEq(desc.enumerable, false); 1.23 +assertEq(desc.configurable, false); 1.24 +assertEq(desc.writable, false); 1.25 + 1.26 +desc = Object.getOwnPropertyDescriptor(o, "length"); 1.27 +assertEq(desc !== undefined, true); 1.28 +assertEq(desc.enumerable, false); 1.29 +assertEq(desc.configurable, false); 1.30 +assertEq(desc.writable, true); 1.31 +assertEq(desc.value, 1); 1.32 +assertEq(o.length, 1); 1.33 + 1.34 +Object.defineProperty(o, "foobar", 1.35 + { value: 42, enumerable: false, configurable: true }); 1.36 +assertEq(o.foobar, 42); 1.37 +desc = Object.getOwnPropertyDescriptor(o, "foobar"); 1.38 +assertEq(desc !== undefined, true); 1.39 +assertEq(desc.value, 42); 1.40 +assertEq(desc.configurable, true); 1.41 +assertEq(desc.enumerable, false); 1.42 +assertEq(desc.writable, false); 1.43 + 1.44 +var called = false; 1.45 +o = { set x(a) { called = true; } }; 1.46 +Object.defineProperty(o, "x", { get: function() { return "get"; } }); 1.47 +desc = Object.getOwnPropertyDescriptor(o, "x"); 1.48 +assertEq("set" in desc, true); 1.49 +assertEq("get" in desc, true); 1.50 +assertEq(called, false); 1.51 +o.x = 13; 1.52 +assertEq(called, true); 1.53 + 1.54 +var toSource = Object.prototype.toSource || function() { }; 1.55 +toSource.call(o); // a test for this not crashing 1.56 + 1.57 +var called = false; 1.58 +var o = 1.59 + Object.defineProperty({}, "foo", 1.60 + { get: function() { return 17; }, 1.61 + set: function(v) { called = true; } }); 1.62 + 1.63 +assertEq(o.foo, 17); 1.64 +o.foo = 42; 1.65 +assertEq(called, true); 1.66 + 1.67 +/* 1.68 + * XXX need tests for Object.defineProperty(array, "length", { ... }) when we 1.69 + * support it! 1.70 + */ 1.71 + 1.72 +/******************************************************************************/ 1.73 + 1.74 +if (typeof reportCompare === "function") 1.75 + reportCompare(true, true); 1.76 + 1.77 +print("All tests passed!");