js/src/tests/ecma_5/Date/defaultvalue.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:7588ec162f62
1 /*
2 * Any copyright is dedicated to the Public Domain.
3 * http://creativecommonn.org/licenses/publicdomain/
4 */
5
6 var BUGNUMBER = 645464;
7 var summary =
8 "[[DefaultValue]] behavior wrong for Date with overridden valueOf/toString";
9
10 print(BUGNUMBER + ": " + summary);
11
12 /**************
13 * BEGIN TEST *
14 **************/
15
16 function allTests()
17 {
18 var DS = new Date(2010, 1, 1).toString();
19
20 // equality
21
22 var d = new Date(2010, 1, 1);
23 assertEq(d == DS, true);
24
25 var d2 = new Date(2010, 1, 1);
26 d2.valueOf = function() { assertEq(arguments.length, 0); return 17; };
27 assertEq(d2 == DS, true);
28
29 var d3 = new Date(2010, 1, 1);
30 d3.toString = function() { return 42; };
31 assertEq(d3 == 42, true);
32
33 function testEquality()
34 {
35 var d = new Date(2010, 1, 1);
36 assertEq(d == DS, true);
37
38 var d2 = new Date(2010, 1, 1);
39 d2.valueOf = function() { assertEq(arguments.length, 0); return 17; };
40 assertEq(d2 == DS, true);
41
42 var d3 = new Date(2010, 1, 1);
43 d3.toString = function() { return 42; };
44 assertEq(d3 == 42, true);
45 }
46 testEquality();
47
48
49 // addition of Date to number
50
51 var d = new Date(2010, 1, 1);
52 assertEq(d + 5, DS + "5");
53
54 var d2 = new Date(2010, 1, 1);
55 d2.toString = function() { return 9; };
56 assertEq(d2 + 3, 9 + 3);
57
58 var d3 = new Date(2010, 1, 1);
59 d3.valueOf = function() { assertEq(arguments.length, 0); return 17; };
60 assertEq(d3 + 5, DS + "5");
61
62 function testDateNumberAddition()
63 {
64 var d = new Date(2010, 1, 1);
65 assertEq(d + 5, DS + "5");
66
67 var d2 = new Date(2010, 1, 1);
68 d2.toString = function() { return 9; };
69 assertEq(d2 + 3, 9 + 3);
70
71 var d3 = new Date(2010, 1, 1);
72 d3.valueOf = function() { assertEq(arguments.length, 0); return 17; };
73 assertEq(d3 + 5, DS + "5");
74 }
75 testDateNumberAddition();
76
77
78 // addition of Date to Date
79
80 var d = new Date(2010, 1, 1);
81 assertEq(d + d, DS + DS);
82
83 var d2 = new Date(2010, 1, 1);
84 d2.toString = function() { return 5; };
85 assertEq(d2 + d2, 10);
86
87 var d3 = new Date(2010, 1, 1);
88 d3.valueOf = function() { assertEq(arguments.length, 0); return 8.5; };
89 assertEq(d3 + d3, DS + DS);
90
91 function testDateDateAddition()
92 {
93 var d = new Date(2010, 1, 1);
94 assertEq(d + d, DS + DS);
95
96 var d2 = new Date(2010, 1, 1);
97 d2.toString = function() { return 5; };
98 assertEq(d2 + d2, 10);
99
100 var d3 = new Date(2010, 1, 1);
101 d3.valueOf = function() { assertEq(arguments.length, 0); return 8.5; };
102 assertEq(d3 + d3, DS + DS);
103 }
104 testDateDateAddition();
105
106
107 // Date as bracketed property name
108
109 var obj = { 8: 42, 9: 73 };
110 obj[DS] = 17;
111
112 var d = new Date(2010, 1, 1);
113 assertEq(obj[d], 17);
114
115 var d2 = new Date(2010, 1, 1);
116 d2.valueOf = function() { assertEq(arguments.length, 0); return 8; }
117 assertEq(obj[d2], 17);
118
119 var d3 = new Date(2010, 1, 1);
120 d3.toString = function() { return 9; };
121 assertEq(obj[d3], 73);
122
123 function testPropertyName()
124 {
125 var obj = { 8: 42, 9: 73 };
126 obj[DS] = 17;
127
128 var d = new Date(2010, 1, 1);
129 assertEq(obj[d], 17);
130
131 var d2 = new Date(2010, 1, 1);
132 d2.valueOf = function() { assertEq(arguments.length, 0); return 8; }
133 assertEq(obj[d2], 17);
134
135 var d3 = new Date(2010, 1, 1);
136 d3.toString = function() { return 9; };
137 assertEq(obj[d3], 73);
138 }
139 testPropertyName();
140
141
142 // Date as property name with |in| operator
143
144 var obj = {};
145 obj[DS] = 5;
146
147 var d = new Date(2010, 1, 1);
148 assertEq(d in obj, true);
149
150 var d2 = new Date(2010, 1, 1);
151 d2.toString = function() { return "baz"; };
152 assertEq(d2 in { baz: 42 }, true);
153
154 var d3 = new Date(2010, 1, 1);
155 d3.valueOf = function() { assertEq(arguments.length, 0); return "quux"; };
156 assertEq(d3 in obj, true);
157
158 function testInOperatorName()
159 {
160 var obj = {};
161 obj[DS] = 5;
162
163 var d = new Date(2010, 1, 1);
164 assertEq(d in obj, true);
165
166 var d2 = new Date(2010, 1, 1);
167 d2.toString = function() { return "baz"; };
168 assertEq(d2 in { baz: 42 }, true);
169
170 var d3 = new Date(2010, 1, 1);
171 d3.valueOf = function() { assertEq(arguments.length, 0); return "quux"; };
172 assertEq(d3 in obj, true);
173 }
174 testInOperatorName();
175 }
176
177 allTests();
178
179 if (typeof newGlobal === "function")
180 {
181 Date = newGlobal().Date;
182 allTests();
183 }
184
185 /******************************************************************************/
186
187 if (typeof reportCompare === "function")
188 reportCompare(true, true);
189
190 print("All tests passed!");

mercurial