1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/tests/ecma_5/Object/extensibility-01.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,103 @@ 1.4 +/* 1.5 + * Any copyright is dedicated to the Public Domain. 1.6 + * http://creativecommons.org/licenses/publicdomain/ 1.7 + * Contributor: 1.8 + * Jeff Walden <jwalden+code@mit.edu> 1.9 + */ 1.10 + 1.11 +var gTestfile = '15.2.3.10-01.js'; 1.12 +//----------------------------------------------------------------------------- 1.13 +var BUGNUMBER = 492849; 1.14 +var summary = 'ES5: Implement Object.preventExtensions, Object.isExtensible'; 1.15 + 1.16 +print(BUGNUMBER + ": " + summary); 1.17 + 1.18 +/************** 1.19 + * BEGIN TEST * 1.20 + **************/ 1.21 + 1.22 +function trySetProperty(o, p, v, strict) 1.23 +{ 1.24 + function strictSetProperty() 1.25 + { 1.26 + "use strict"; 1.27 + o[p] = v; 1.28 + } 1.29 + 1.30 + function setProperty() 1.31 + { 1.32 + o[p] = v; 1.33 + } 1.34 + 1.35 + assertEq(Object.prototype.hasOwnProperty.call(o, p), false); 1.36 + 1.37 + try 1.38 + { 1.39 + if (strict) 1.40 + strictSetProperty(); 1.41 + else 1.42 + setProperty(); 1.43 + if (o[p] === v) 1.44 + return "set"; 1.45 + if (p in o) 1.46 + return "set-converted"; 1.47 + return "swallowed"; 1.48 + } 1.49 + catch (e) 1.50 + { 1.51 + return "throw"; 1.52 + } 1.53 +} 1.54 + 1.55 +function tryDefineProperty(o, p, v) 1.56 +{ 1.57 + assertEq(Object.prototype.hasOwnProperty.call(o, p), false); 1.58 + 1.59 + try 1.60 + { 1.61 + Object.defineProperty(o, p, { value: v }); 1.62 + if (o[p] === v) 1.63 + return "set"; 1.64 + if (p in o) 1.65 + return "set-converted"; 1.66 + return "swallowed"; 1.67 + } 1.68 + catch (e) 1.69 + { 1.70 + return "throw"; 1.71 + } 1.72 +} 1.73 + 1.74 +assertEq(typeof Object.preventExtensions, "function"); 1.75 +assertEq(Object.preventExtensions.length, 1); 1.76 + 1.77 +var slowArray = [1, 2, 3]; 1.78 +slowArray.slow = 5; 1.79 +var objs = 1.80 + [{}, { 1: 2 }, { a: 3 }, [], [1], [, 1], slowArray, function a(){}, /a/]; 1.81 + 1.82 +for (var i = 0, sz = objs.length; i < sz; i++) 1.83 +{ 1.84 + var o = objs[i]; 1.85 + assertEq(Object.isExtensible(o), true, "object " + i + " not extensible?"); 1.86 + 1.87 + var o2 = Object.preventExtensions(o); 1.88 + assertEq(o, o2); 1.89 + 1.90 + assertEq(Object.isExtensible(o), false, "object " + i + " is extensible?"); 1.91 + 1.92 + assertEq(trySetProperty(o, "baz", 17, true), "throw", 1.93 + "unexpected behavior for strict-mode property-addition to " + 1.94 + "object " + i); 1.95 + assertEq(trySetProperty(o, "baz", 17, false), "swallowed", 1.96 + "unexpected behavior for property-addition to object " + i); 1.97 + 1.98 + assertEq(tryDefineProperty(o, "baz", 17), "throw", 1.99 + "unexpected behavior for new property definition on object " + i); 1.100 +} 1.101 + 1.102 +/******************************************************************************/ 1.103 + 1.104 +reportCompare(true, true); 1.105 + 1.106 +print("All tests passed!");