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 */
6 //-----------------------------------------------------------------------------
7 var BUGNUMBER = 430133;
8 var summary = 'ES5 Object.defineProperties(O, Properties)';
10 print(BUGNUMBER + ": " + summary);
12 /**************
13 * BEGIN TEST *
14 **************/
16 assertEq("defineProperties" in Object, true);
17 assertEq(Object.defineProperties.length, 2);
19 var o, props, desc, passed;
21 o = {};
22 props =
23 {
24 a: { value: 17, enumerable: true, configurable: true, writable: true },
25 b: { value: 42, enumerable: false, configurable: false, writable: false }
26 };
27 Object.defineProperties(o, props);
28 assertEq("a" in o, true);
29 assertEq("b" in o, true);
30 desc = Object.getOwnPropertyDescriptor(o, "a");
31 assertEq(desc.value, 17);
32 assertEq(desc.enumerable, true);
33 assertEq(desc.configurable, true);
34 assertEq(desc.writable, true);
35 desc = Object.getOwnPropertyDescriptor(o, "b");
36 assertEq(desc.value, 42);
37 assertEq(desc.enumerable, false);
38 assertEq(desc.configurable, false);
39 assertEq(desc.writable, false);
41 props =
42 {
43 c: { value: NaN, enumerable: false, configurable: true, writable: true },
44 b: { value: 44 }
45 };
46 var error = "before";
47 try
48 {
49 Object.defineProperties(o, props);
50 error = "no exception thrown";
51 }
52 catch (e)
53 {
54 if (e instanceof TypeError)
55 error = "typeerror";
56 else
57 error = "bad exception: " + e;
58 }
59 assertEq(error, "typeerror", "didn't throw or threw wrongly");
60 assertEq("c" in o, true, "new property added");
61 assertEq(o.b, 42, "old property value preserved");
63 function Properties() { }
64 Properties.prototype = { b: { value: 42, enumerable: true } };
65 props = new Properties();
66 Object.defineProperty(props, "a", { enumerable: false });
67 o = {};
68 Object.defineProperties(o, props);
69 assertEq("a" in o, false);
70 assertEq(Object.getOwnPropertyDescriptor(o, "a"), undefined,
71 "Object.defineProperties(O, Properties) should only use enumerable " +
72 "properties on Properties");
73 assertEq("b" in o, false);
74 assertEq(Object.getOwnPropertyDescriptor(o, "b"), undefined,
75 "Object.defineProperties(O, Properties) should only use enumerable " +
76 "properties directly on Properties");
78 Number.prototype.foo = { value: 17, enumerable: true };
79 Boolean.prototype.bar = { value: 8675309, enumerable: true };
80 String.prototype.quux = { value: "Are you HAPPY yet?", enumerable: true };
81 o = {};
82 Object.defineProperties(o, 5); // ToObject only throws for null/undefined
83 assertEq("foo" in o, false, "foo is not an enumerable own property");
84 Object.defineProperties(o, false);
85 assertEq("bar" in o, false, "bar is not an enumerable own property");
86 Object.defineProperties(o, "");
87 assertEq("quux" in o, false, "quux is not an enumerable own property");
89 error = "before";
90 try
91 {
92 Object.defineProperties(o, "1");
93 }
94 catch (e)
95 {
96 if (e instanceof TypeError)
97 error = "typeerror";
98 else
99 error = "bad exception: " + e;
100 }
101 assertEq(error, "typeerror",
102 "should throw on Properties == '1' due to '1'[0] not being a " +
103 "property descriptor");
105 error = "before";
106 try
107 {
108 Object.defineProperties(o, null);
109 }
110 catch (e)
111 {
112 if (e instanceof TypeError)
113 error = "typeerror";
114 else
115 error = "bad exception: " + e;
116 }
117 assertEq(error, "typeerror", "should throw on Properties == null");
119 error = "before";
120 try
121 {
122 Object.defineProperties(o, undefined);
123 }
124 catch (e)
125 {
126 if (e instanceof TypeError)
127 error = "typeerror";
128 else
129 error = "bad exception: " + e;
130 }
131 assertEq(error, "typeerror", "should throw on Properties == undefined");
133 /******************************************************************************/
135 reportCompare(true, true);
137 print("All tests passed!");