js/src/tests/ecma_5/Object/add-property-non-extensible.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/js/src/tests/ecma_5/Object/add-property-non-extensible.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,118 @@
     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 = 'add-property-non-extensible.js';
    1.12 +//-----------------------------------------------------------------------------
    1.13 +var BUGNUMBER = 602144;
    1.14 +var summary =
    1.15 +  'Properly method-compile attempted addition of properties to ' +
    1.16 +  'non-extensible objects';
    1.17 +
    1.18 +print(BUGNUMBER + ": " + summary);
    1.19 +
    1.20 +/**************
    1.21 + * BEGIN TEST *
    1.22 + **************/
    1.23 +
    1.24 +// No property
    1.25 +
    1.26 +var o1 = {};
    1.27 +for (var i = 0; i < 5; i++)
    1.28 +  o1.a = 3;
    1.29 +assertEq(o1.a, 3);
    1.30 +
    1.31 +var o2 = Object.preventExtensions({});
    1.32 +for (var i = 0; i < 5; i++)
    1.33 +  o2.a = 3;
    1.34 +assertEq(Object.getOwnPropertyDescriptor(o2, "a"), undefined);
    1.35 +
    1.36 +var o3 = Object.seal({});
    1.37 +for (var i = 0; i < 5; i++)
    1.38 +  o3.a = 3;
    1.39 +assertEq(Object.getOwnPropertyDescriptor(o3, "a"), undefined);
    1.40 +
    1.41 +var o4 = Object.freeze({});
    1.42 +for (var i = 0; i < 5; i++)
    1.43 +  o4.a = 3;
    1.44 +assertEq(Object.getOwnPropertyDescriptor(o4, "a"), undefined);
    1.45 +
    1.46 +
    1.47 +// Has property
    1.48 +
    1.49 +var o5 = { a: 2 };
    1.50 +for (var i = 0; i < 5; i++)
    1.51 +  o5.a = 3;
    1.52 +assertEq(o5.a, 3);
    1.53 +
    1.54 +var o6 = Object.preventExtensions({ a: 2 });
    1.55 +for (var i = 0; i < 5; i++)
    1.56 +  o6.a = 3;
    1.57 +assertEq(o6.a, 3);
    1.58 +
    1.59 +var o7 = Object.seal({ a: 2 });
    1.60 +for (var i = 0; i < 5; i++)
    1.61 +  o7.a = 3;
    1.62 +assertEq(o7.a, 3);
    1.63 +
    1.64 +var o8 = Object.freeze({ a: 2 });
    1.65 +for (var i = 0; i < 5; i++)
    1.66 +  o8.a = 3;
    1.67 +assertEq(o8.a, 2);
    1.68 +
    1.69 +
    1.70 +// Extensible, hit up the prototype chain
    1.71 +
    1.72 +var o9 = Object.create({ a: 2 });
    1.73 +for (var i = 0; i < 5; i++)
    1.74 +  o9.a = 3;
    1.75 +assertEq(o9.a, 3);
    1.76 +
    1.77 +var o10 = Object.create(Object.preventExtensions({ a: 2 }));
    1.78 +for (var i = 0; i < 5; i++)
    1.79 +  o10.a = 3;
    1.80 +assertEq(o10.a, 3);
    1.81 +
    1.82 +var o11 = Object.create(Object.seal({ a: 2 }));
    1.83 +for (var i = 0; i < 5; i++)
    1.84 +  o11.a = 3;
    1.85 +assertEq(o11.a, 3);
    1.86 +
    1.87 +var o12 = Object.create(Object.freeze({ a: 2 }));
    1.88 +for (var i = 0; i < 5; i++)
    1.89 +  o12.a = 3;
    1.90 +assertEq(Object.getOwnPropertyDescriptor(o12, "a"), undefined);
    1.91 +
    1.92 +
    1.93 +// Not extensible, hit up the prototype chain
    1.94 +
    1.95 +var o13 = Object.preventExtensions(Object.create({ a: 2 }));
    1.96 +for (var i = 0; i < 5; i++)
    1.97 +  o13.a = 3;
    1.98 +assertEq(Object.getOwnPropertyDescriptor(o13, "a"), undefined);
    1.99 +
   1.100 +var o14 =
   1.101 +  Object.preventExtensions(Object.create(Object.preventExtensions({ a: 2 })));
   1.102 +for (var i = 0; i < 5; i++)
   1.103 +  o14.a = 3;
   1.104 +assertEq(Object.getOwnPropertyDescriptor(o14, "a"), undefined);
   1.105 +
   1.106 +var o15 = Object.preventExtensions(Object.create(Object.seal({ a: 2 })));
   1.107 +for (var i = 0; i < 5; i++)
   1.108 +  o15.a = 3;
   1.109 +assertEq(Object.getOwnPropertyDescriptor(o15, "a"), undefined);
   1.110 +
   1.111 +var o16 = Object.preventExtensions(Object.create(Object.freeze({ a: 2 })));
   1.112 +for (var i = 0; i < 5; i++)
   1.113 +  o16.a = 3;
   1.114 +assertEq(Object.getOwnPropertyDescriptor(o16, "a"), undefined);
   1.115 +
   1.116 +
   1.117 +/******************************************************************************/
   1.118 +
   1.119 +reportCompare(true, true);
   1.120 +
   1.121 +print("All tests passed!");

mercurial