Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 /*
2 * Any copyright is dedicated to the Public Domain.
3 * http://creativecommons.org/licenses/publicdomain/
4 * Contributor:
5 * Jeff Walden <jwalden+code@mit.edu>
6 */
8 var gTestfile = '15.2.3.10-01.js';
9 //-----------------------------------------------------------------------------
10 var BUGNUMBER = 492849;
11 var summary = 'ES5: Implement Object.preventExtensions, Object.isExtensible';
13 print(BUGNUMBER + ": " + summary);
15 /**************
16 * BEGIN TEST *
17 **************/
19 function trySetProperty(o, p, v, strict)
20 {
21 function strictSetProperty()
22 {
23 "use strict";
24 o[p] = v;
25 }
27 function setProperty()
28 {
29 o[p] = v;
30 }
32 assertEq(Object.prototype.hasOwnProperty.call(o, p), false);
34 try
35 {
36 if (strict)
37 strictSetProperty();
38 else
39 setProperty();
40 if (o[p] === v)
41 return "set";
42 if (p in o)
43 return "set-converted";
44 return "swallowed";
45 }
46 catch (e)
47 {
48 return "throw";
49 }
50 }
52 function tryDefineProperty(o, p, v)
53 {
54 assertEq(Object.prototype.hasOwnProperty.call(o, p), false);
56 try
57 {
58 Object.defineProperty(o, p, { value: v });
59 if (o[p] === v)
60 return "set";
61 if (p in o)
62 return "set-converted";
63 return "swallowed";
64 }
65 catch (e)
66 {
67 return "throw";
68 }
69 }
71 assertEq(typeof Object.preventExtensions, "function");
72 assertEq(Object.preventExtensions.length, 1);
74 var slowArray = [1, 2, 3];
75 slowArray.slow = 5;
76 var objs =
77 [{}, { 1: 2 }, { a: 3 }, [], [1], [, 1], slowArray, function a(){}, /a/];
79 for (var i = 0, sz = objs.length; i < sz; i++)
80 {
81 var o = objs[i];
82 assertEq(Object.isExtensible(o), true, "object " + i + " not extensible?");
84 var o2 = Object.preventExtensions(o);
85 assertEq(o, o2);
87 assertEq(Object.isExtensible(o), false, "object " + i + " is extensible?");
89 assertEq(trySetProperty(o, "baz", 17, true), "throw",
90 "unexpected behavior for strict-mode property-addition to " +
91 "object " + i);
92 assertEq(trySetProperty(o, "baz", 17, false), "swallowed",
93 "unexpected behavior for property-addition to object " + i);
95 assertEq(tryDefineProperty(o, "baz", 17), "throw",
96 "unexpected behavior for new property definition on object " + i);
97 }
99 /******************************************************************************/
101 reportCompare(true, true);
103 print("All tests passed!");