1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/tests/ecma_5/Object/15.2.3.7-01.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,137 @@ 1.4 +/* 1.5 + * Any copyright is dedicated to the Public Domain. 1.6 + * http://creativecommons.org/licenses/publicdomain/ 1.7 + */ 1.8 + 1.9 +//----------------------------------------------------------------------------- 1.10 +var BUGNUMBER = 430133; 1.11 +var summary = 'ES5 Object.defineProperties(O, Properties)'; 1.12 + 1.13 +print(BUGNUMBER + ": " + summary); 1.14 + 1.15 +/************** 1.16 + * BEGIN TEST * 1.17 + **************/ 1.18 + 1.19 +assertEq("defineProperties" in Object, true); 1.20 +assertEq(Object.defineProperties.length, 2); 1.21 + 1.22 +var o, props, desc, passed; 1.23 + 1.24 +o = {}; 1.25 +props = 1.26 + { 1.27 + a: { value: 17, enumerable: true, configurable: true, writable: true }, 1.28 + b: { value: 42, enumerable: false, configurable: false, writable: false } 1.29 + }; 1.30 +Object.defineProperties(o, props); 1.31 +assertEq("a" in o, true); 1.32 +assertEq("b" in o, true); 1.33 +desc = Object.getOwnPropertyDescriptor(o, "a"); 1.34 +assertEq(desc.value, 17); 1.35 +assertEq(desc.enumerable, true); 1.36 +assertEq(desc.configurable, true); 1.37 +assertEq(desc.writable, true); 1.38 +desc = Object.getOwnPropertyDescriptor(o, "b"); 1.39 +assertEq(desc.value, 42); 1.40 +assertEq(desc.enumerable, false); 1.41 +assertEq(desc.configurable, false); 1.42 +assertEq(desc.writable, false); 1.43 + 1.44 +props = 1.45 + { 1.46 + c: { value: NaN, enumerable: false, configurable: true, writable: true }, 1.47 + b: { value: 44 } 1.48 + }; 1.49 +var error = "before"; 1.50 +try 1.51 +{ 1.52 + Object.defineProperties(o, props); 1.53 + error = "no exception thrown"; 1.54 +} 1.55 +catch (e) 1.56 +{ 1.57 + if (e instanceof TypeError) 1.58 + error = "typeerror"; 1.59 + else 1.60 + error = "bad exception: " + e; 1.61 +} 1.62 +assertEq(error, "typeerror", "didn't throw or threw wrongly"); 1.63 +assertEq("c" in o, true, "new property added"); 1.64 +assertEq(o.b, 42, "old property value preserved"); 1.65 + 1.66 +function Properties() { } 1.67 +Properties.prototype = { b: { value: 42, enumerable: true } }; 1.68 +props = new Properties(); 1.69 +Object.defineProperty(props, "a", { enumerable: false }); 1.70 +o = {}; 1.71 +Object.defineProperties(o, props); 1.72 +assertEq("a" in o, false); 1.73 +assertEq(Object.getOwnPropertyDescriptor(o, "a"), undefined, 1.74 + "Object.defineProperties(O, Properties) should only use enumerable " + 1.75 + "properties on Properties"); 1.76 +assertEq("b" in o, false); 1.77 +assertEq(Object.getOwnPropertyDescriptor(o, "b"), undefined, 1.78 + "Object.defineProperties(O, Properties) should only use enumerable " + 1.79 + "properties directly on Properties"); 1.80 + 1.81 +Number.prototype.foo = { value: 17, enumerable: true }; 1.82 +Boolean.prototype.bar = { value: 8675309, enumerable: true }; 1.83 +String.prototype.quux = { value: "Are you HAPPY yet?", enumerable: true }; 1.84 +o = {}; 1.85 +Object.defineProperties(o, 5); // ToObject only throws for null/undefined 1.86 +assertEq("foo" in o, false, "foo is not an enumerable own property"); 1.87 +Object.defineProperties(o, false); 1.88 +assertEq("bar" in o, false, "bar is not an enumerable own property"); 1.89 +Object.defineProperties(o, ""); 1.90 +assertEq("quux" in o, false, "quux is not an enumerable own property"); 1.91 + 1.92 +error = "before"; 1.93 +try 1.94 +{ 1.95 + Object.defineProperties(o, "1"); 1.96 +} 1.97 +catch (e) 1.98 +{ 1.99 + if (e instanceof TypeError) 1.100 + error = "typeerror"; 1.101 + else 1.102 + error = "bad exception: " + e; 1.103 +} 1.104 +assertEq(error, "typeerror", 1.105 + "should throw on Properties == '1' due to '1'[0] not being a " + 1.106 + "property descriptor"); 1.107 + 1.108 +error = "before"; 1.109 +try 1.110 +{ 1.111 + Object.defineProperties(o, null); 1.112 +} 1.113 +catch (e) 1.114 +{ 1.115 + if (e instanceof TypeError) 1.116 + error = "typeerror"; 1.117 + else 1.118 + error = "bad exception: " + e; 1.119 +} 1.120 +assertEq(error, "typeerror", "should throw on Properties == null"); 1.121 + 1.122 +error = "before"; 1.123 +try 1.124 +{ 1.125 + Object.defineProperties(o, undefined); 1.126 +} 1.127 +catch (e) 1.128 +{ 1.129 + if (e instanceof TypeError) 1.130 + error = "typeerror"; 1.131 + else 1.132 + error = "bad exception: " + e; 1.133 +} 1.134 +assertEq(error, "typeerror", "should throw on Properties == undefined"); 1.135 + 1.136 +/******************************************************************************/ 1.137 + 1.138 +reportCompare(true, true); 1.139 + 1.140 +print("All tests passed!");