/* * Any copyright is dedicated to the Public Domain. * http://creativecommons.org/licenses/publicdomain/ * Contributor: * Jeff Walden */ var gTestfile = '15.2.3.10-01.js'; //----------------------------------------------------------------------------- var BUGNUMBER = 492849; var summary = 'ES5: Implement Object.preventExtensions, Object.isExtensible'; print(BUGNUMBER + ": " + summary); /************** * BEGIN TEST * **************/ function trySetProperty(o, p, v, strict) { function strictSetProperty() { "use strict"; o[p] = v; } function setProperty() { o[p] = v; } assertEq(Object.prototype.hasOwnProperty.call(o, p), false); try { if (strict) strictSetProperty(); else setProperty(); if (o[p] === v) return "set"; if (p in o) return "set-converted"; return "swallowed"; } catch (e) { return "throw"; } } function tryDefineProperty(o, p, v) { assertEq(Object.prototype.hasOwnProperty.call(o, p), false); try { Object.defineProperty(o, p, { value: v }); if (o[p] === v) return "set"; if (p in o) return "set-converted"; return "swallowed"; } catch (e) { return "throw"; } } assertEq(typeof Object.preventExtensions, "function"); assertEq(Object.preventExtensions.length, 1); var slowArray = [1, 2, 3]; slowArray.slow = 5; var objs = [{}, { 1: 2 }, { a: 3 }, [], [1], [, 1], slowArray, function a(){}, /a/]; for (var i = 0, sz = objs.length; i < sz; i++) { var o = objs[i]; assertEq(Object.isExtensible(o), true, "object " + i + " not extensible?"); var o2 = Object.preventExtensions(o); assertEq(o, o2); assertEq(Object.isExtensible(o), false, "object " + i + " is extensible?"); assertEq(trySetProperty(o, "baz", 17, true), "throw", "unexpected behavior for strict-mode property-addition to " + "object " + i); assertEq(trySetProperty(o, "baz", 17, false), "swallowed", "unexpected behavior for property-addition to object " + i); assertEq(tryDefineProperty(o, "baz", 17), "throw", "unexpected behavior for new property definition on object " + i); } /******************************************************************************/ reportCompare(true, true); print("All tests passed!");