1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/tests/ecma_5/Object/mutation-prevention-methods.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,124 @@ 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 = 'mutation-prevention-methods.js'; 1.12 +//----------------------------------------------------------------------------- 1.13 +var BUGNUMBER = 492849; 1.14 +var summary = 'Object.is{Sealed,Frozen}, Object.{seal,freeze}'; 1.15 + 1.16 +print(BUGNUMBER + ": " + summary); 1.17 + 1.18 +/************** 1.19 + * BEGIN TEST * 1.20 + **************/ 1.21 + 1.22 +// Empty object 1.23 + 1.24 +var o1 = {}; 1.25 + 1.26 +assertEq(Object.isExtensible(o1), true); 1.27 +assertEq(Object.isSealed(o1), false); 1.28 +assertEq(Object.isFrozen(o1), false); 1.29 + 1.30 +Object.preventExtensions(o1); 1.31 + 1.32 +// An non-extensible empty object has no properties, so it is vacuously sealed 1.33 +// and frozen. 1.34 +assertEq(Object.isExtensible(o1), false); 1.35 +assertEq(Object.isSealed(o1), true); 1.36 +assertEq(Object.isFrozen(o1), true); 1.37 + 1.38 + 1.39 +// Object with a data property 1.40 + 1.41 +var o2 = { 1: 2 }; 1.42 + 1.43 +assertEq(Object.isExtensible(o2), true); 1.44 +assertEq(Object.isSealed(o2), false); 1.45 +assertEq(Object.isFrozen(o2), false); 1.46 + 1.47 +Object.preventExtensions(o2); 1.48 + 1.49 +assertEq(Object.isExtensible(o2), false); 1.50 +assertEq(Object.isSealed(o2), false); 1.51 +assertEq(Object.isFrozen(o2), false); 1.52 + 1.53 +Object.seal(o2); 1.54 + 1.55 +assertEq(Object.isExtensible(o2), false); 1.56 +assertEq(Object.isSealed(o2), true); 1.57 +assertEq(Object.isFrozen(o2), false); 1.58 + 1.59 +assertEq(o2[1], 2); 1.60 + 1.61 +var desc; 1.62 + 1.63 +desc = Object.getOwnPropertyDescriptor(o2, "1"); 1.64 +assertEq(typeof desc, "object"); 1.65 +assertEq(desc.enumerable, true); 1.66 +assertEq(desc.configurable, false); 1.67 +assertEq(desc.value, 2); 1.68 +assertEq(desc.writable, true); 1.69 + 1.70 +o2[1] = 17; 1.71 + 1.72 +assertEq(o2[1], 17); 1.73 + 1.74 +desc = Object.getOwnPropertyDescriptor(o2, "1"); 1.75 +assertEq(typeof desc, "object"); 1.76 +assertEq(desc.enumerable, true); 1.77 +assertEq(desc.configurable, false); 1.78 +assertEq(desc.value, 17); 1.79 +assertEq(desc.writable, true); 1.80 + 1.81 +Object.freeze(o2); 1.82 + 1.83 +assertEq(o2[1], 17); 1.84 + 1.85 +desc = Object.getOwnPropertyDescriptor(o2, "1"); 1.86 +assertEq(typeof desc, "object"); 1.87 +assertEq(desc.enumerable, true); 1.88 +assertEq(desc.configurable, false); 1.89 +assertEq(desc.value, 17); 1.90 +assertEq(desc.writable, false); 1.91 + 1.92 + 1.93 +// Object with an accessor property 1.94 + 1.95 +var o3 = { get foo() { return 17; } }; 1.96 + 1.97 +assertEq(Object.isExtensible(o3), true); 1.98 +assertEq(Object.isSealed(o3), false); 1.99 +assertEq(Object.isFrozen(o3), false); 1.100 + 1.101 +Object.preventExtensions(o3); 1.102 + 1.103 +assertEq(Object.isExtensible(o3), false); 1.104 +assertEq(Object.isSealed(o3), false); 1.105 +assertEq(Object.isFrozen(o3), false); 1.106 + 1.107 +Object.seal(o3); 1.108 + 1.109 +// An accessor property in a sealed object is unchanged if that object is 1.110 +// frozen, so a sealed object containing only accessor properties is also 1.111 +// vacuously frozen. 1.112 +assertEq(Object.isExtensible(o3), false); 1.113 +assertEq(Object.isSealed(o3), true); 1.114 +assertEq(Object.isFrozen(o3), true); 1.115 + 1.116 +Object.freeze(o3); 1.117 + 1.118 +assertEq(Object.isExtensible(o3), false); 1.119 +assertEq(Object.isSealed(o3), true); 1.120 +assertEq(Object.isFrozen(o3), true); 1.121 + 1.122 + 1.123 +/******************************************************************************/ 1.124 + 1.125 +reportCompare(true, true); 1.126 + 1.127 +print("All tests passed!");