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://creativecommonn.org/licenses/publicdomain/
4 */
6 var BUGNUMBER = 645464;
7 var summary =
8 "[[DefaultValue]] behavior wrong for Number with overridden valueOf/toString";
10 print(BUGNUMBER + ": " + summary);
12 /**************
13 * BEGIN TEST *
14 **************/
17 // equality
19 var n = new Number();
20 assertEq(n == 0, true);
22 var n2 = new Number();
23 n2.valueOf = function() { return 17; };
24 assertEq(n2 == 17, true);
26 var n3 = new Number();
27 n3.toString = function() { return 42; };
28 assertEq(n3 == 0, true);
30 function testEquality()
31 {
32 var n = new Number();
33 assertEq(n == 0, true);
35 var n2 = new Number();
36 n2.valueOf = function() { return 17; };
37 assertEq(n2 == 17, true);
39 var n3 = new Number();
40 n3.toString = function() { return 42; };
41 assertEq(n3 == 0, true);
42 }
43 testEquality();
46 // addition of Number to number
48 var n = new Number();
49 assertEq(n + 5, 5);
51 var n2 = new Number();
52 n2.toString = function() { return 9; };
53 assertEq(n2 + 3, 3);
55 var n3 = new Number();
56 n3.valueOf = function() { return 17; };
57 assertEq(n3 + 5, 22);
59 function testNumberAddition()
60 {
61 var n = new Number();
62 assertEq(n + 5, 5);
64 var n2 = new Number();
65 n2.toString = function() { return 9; };
66 assertEq(n2 + 3, 3);
68 var n3 = new Number();
69 n3.valueOf = function() { return 17; };
70 assertEq(n3 + 5, 22);
71 }
72 testNumberAddition();
75 // addition of Number to Number
77 var n = new Number();
78 assertEq(n + n, 0);
80 var n2 = new Number();
81 n2.toString = function() { return 5; };
82 assertEq(n2 + n2, 0);
84 var n3 = new Number();
85 n3.valueOf = function() { return 8.5; };
86 assertEq(n3 + n3, 17);
88 function testNonNumberAddition()
89 {
90 var n = new Number();
91 assertEq(n + n, 0);
93 var n2 = new Number();
94 n2.toString = function() { return 5; };
95 assertEq(n2 + n2, 0);
97 var n3 = new Number();
98 n3.valueOf = function() { return 8.5; };
99 assertEq(n3 + n3, 17);
100 }
101 testNonNumberAddition();
104 // Number as bracketed property name
106 var obj = { 0: 17, 8: 42, 9: 8675309 };
108 var n = new Number();
109 assertEq(obj[n], 17);
111 var n2 = new Number();
112 n2.valueOf = function() { return 8; }
113 assertEq(obj[n2], 17);
115 var n3 = new Number();
116 n3.toString = function() { return 9; };
117 assertEq(obj[n3], 8675309);
119 function testPropertyNameToNumber()
120 {
121 var obj = { 0: 17, 8: 42, 9: 8675309 };
123 var n = new Number();
124 assertEq(obj[n], 17);
126 var n2 = new Number();
127 n2.valueOf = function() { return 8; }
128 assertEq(obj[n2], 17);
130 var n3 = new Number();
131 n3.toString = function() { return 9; };
132 assertEq(obj[n3], 8675309);
133 }
134 testPropertyNameToNumber();
137 // Number as property name with |in| operator
139 var n = new Number();
140 assertEq(n in { 0: 5 }, true);
142 var n2 = new Number();
143 n2.toString = function() { return "baz"; };
144 assertEq(n2 in { baz: 42 }, true);
146 var n3 = new Number();
147 n3.valueOf = function() { return "quux"; };
148 assertEq(n3 in { 0: 17 }, true);
150 function testInOperatorName()
151 {
152 var n = new Number();
153 assertEq(n in { 0: 5 }, true);
155 var n2 = new Number();
156 n2.toString = function() { return "baz"; };
157 assertEq(n2 in { baz: 42 }, true);
159 var n3 = new Number();
160 n3.valueOf = function() { return "quux"; };
161 assertEq(n3 in { 0: 17 }, true);
162 }
163 testInOperatorName();
165 /******************************************************************************/
167 if (typeof reportCompare === "function")
168 reportCompare(true, true);
170 print("All tests passed!");