new Date(NaN).toJSON() must return null instead of throwing a TypeError
[WebKit-https.git] / LayoutTests / js / dom / JSON-stringify-expected.txt
1 function (jsonObject){
2         return jsonObject.stringify(1);
3     }
4 PASS tests[i](nativeJSON) is tests[i](JSON)
5 function (jsonObject){
6         return jsonObject.stringify(1.5);
7     }
8 PASS tests[i](nativeJSON) is tests[i](JSON)
9 function (jsonObject){
10         return jsonObject.stringify(-1);
11     }
12 PASS tests[i](nativeJSON) is tests[i](JSON)
13 function (jsonObject){
14         return jsonObject.stringify(-1.5);
15     }
16 PASS tests[i](nativeJSON) is tests[i](JSON)
17 function (jsonObject){
18         return jsonObject.stringify(null);
19     }
20 PASS tests[i](nativeJSON) is tests[i](JSON)
21 function (jsonObject){
22         return jsonObject.stringify("string");
23     }
24 PASS tests[i](nativeJSON) is tests[i](JSON)
25 function (jsonObject){
26         return jsonObject.stringify(new Number(0));
27     }
28 PASS tests[i](nativeJSON) is tests[i](JSON)
29 function (jsonObject){
30         return jsonObject.stringify(new Number(1));
31     }
32 PASS tests[i](nativeJSON) is tests[i](JSON)
33 function (jsonObject){
34         return jsonObject.stringify(new Number(1.5));
35     }
36 PASS tests[i](nativeJSON) is tests[i](JSON)
37 function (jsonObject){
38         return jsonObject.stringify(new Number(-1));
39     }
40 PASS tests[i](nativeJSON) is tests[i](JSON)
41 function (jsonObject){
42         return jsonObject.stringify(new Number(-1.5));
43     }
44 PASS tests[i](nativeJSON) is tests[i](JSON)
45 function (jsonObject){
46         return jsonObject.stringify(new String("a string object"));
47     }
48 PASS tests[i](nativeJSON) is tests[i](JSON)
49 function (jsonObject){
50         return jsonObject.stringify(new Boolean(true));
51     }
52 PASS tests[i](nativeJSON) is tests[i](JSON)
53 function (jsonObject){
54         var value = new Number(1);
55         value.valueOf = function() { return 2; }
56         return jsonObject.stringify(value);
57     }
58 PASS tests[i](nativeJSON) is tests[i].expected
59 function (jsonObject){
60         var value = new Boolean(true);
61         value.valueOf = function() { return 2; }
62         return jsonObject.stringify(value);
63     }
64 PASS tests[i](nativeJSON) is tests[i].expected
65 function (jsonObject){
66         var value = new String("fail");
67         value.toString = function() { return "converted string"; }
68         return jsonObject.stringify(value);
69     }
70 PASS tests[i](nativeJSON) is tests[i].expected
71 function (jsonObject){
72         return jsonObject.stringify(true);
73     }
74 PASS tests[i](nativeJSON) is tests[i](JSON)
75 function (jsonObject){
76         return jsonObject.stringify(false);
77     }
78 PASS tests[i](nativeJSON) is tests[i](JSON)
79 function (jsonObject){
80         return jsonObject.stringify(new Date(0));
81     }
82 PASS tests[i](nativeJSON) is tests[i](JSON)
83 function (jsonObject){
84         return jsonObject.stringify({toJSON: Date.prototype.toJSON});
85     }
86 PASS tests[i](nativeJSON) threw exception TypeError: toISOString is not a function.
87 function (jsonObject){
88         return jsonObject.stringify({toJSON: Date.prototype.toJSON, toISOString: function(){ return "custom toISOString"; }});
89     }
90 PASS tests[i](nativeJSON) is tests[i](JSON)
91 function (jsonObject){
92         return jsonObject.stringify({toJSON: Date.prototype.toJSON, toISOString: function(){ return {}; }});
93     }
94 PASS tests[i](nativeJSON) threw exception TypeError: toISOString did not return a primitive value.
95 function (jsonObject){
96         return jsonObject.stringify({toJSON: Date.prototype.toJSON, toISOString: function(){ throw "An exception"; }});
97     }
98 PASS tests[i](nativeJSON) threw exception An exception.
99 function (jsonObject){
100         return jsonObject.stringify(new Date(NaN));
101     }
102 PASS tests[i](nativeJSON) is tests[i].expected
103 function (jsonObject){
104         var d = new Date(0);
105         d.toISOString = null;
106         return jsonObject.stringify(d);
107     }
108 PASS tests[i](nativeJSON) threw exception TypeError: toISOString is not a function.
109 function (jsonObject){
110         var d = new Date(0);
111         d.toJSON = undefined;
112         return jsonObject.stringify(d);
113     }
114 PASS tests[i](nativeJSON) is tests[i](JSON)
115 function (jsonObject){
116         return jsonObject.stringify({get Foo() { return "bar"; }});
117     }
118 PASS tests[i](nativeJSON) is tests[i](JSON)
119 function (jsonObject){
120         return jsonObject.stringify({get Foo() { this.foo="wibble"; return "bar"; }});
121     }
122 PASS tests[i](nativeJSON) is tests[i](JSON)
123 function (jsonObject){
124         var count = 0;
125         jsonObject.stringify({get Foo() { count++; return "bar"; }});
126         return count;
127     }
128 PASS tests[i](nativeJSON) is tests[i](JSON)
129 function (jsonObject){
130         var count = 0;
131         return jsonObject.stringify({get Foo() { count++; delete this.bar; return "bar"; }, bar: "wibble"});
132     }
133 PASS tests[i](nativeJSON) is tests[i](JSON)
134 function (jsonObject){
135         var count = 0;
136         return jsonObject.stringify({a:"1", b:"2", c:"3", 5:4, 4:5, 2:6, 1:7});
137     }
138 PASS tests[i](nativeJSON) is tests[i](JSON)
139 function (jsonObject){
140         var allString = true;
141         jsonObject.stringify({a:"1", b:"2", c:"3", 5:4, 4:5, 2:6, 1:7}, function(k,v){allString = allString && (typeof k == "string"); return v});
142         return allString;
143     }
144 PASS tests[i](nativeJSON) is tests[i](JSON)
145 function (jsonObject){
146         var allString = true;
147         jsonObject.stringify([1,2,3,4,5], function(k,v){allString = allString && (typeof k == "string"); return v});
148         return allString;
149     }
150 PASS tests[i](nativeJSON) is tests[i](JSON)
151 function (jsonObject){
152         var allString = true;
153         var array = [];
154         return jsonObject.stringify({a:"1", b:"2", c:"3", 5:4, 4:5, 2:6, 1:7}, array);
155     }
156 PASS tests[i](nativeJSON) is tests[i](JSON)
157 function (jsonObject){
158         var allString = true;
159         var array = ["a"];
160         return jsonObject.stringify({get a(){return 1;array[1]="b";array[2]="c"}, b:"2", c:"3"}, array);
161     }
162 PASS tests[i](nativeJSON) is tests[i](JSON)
163 function (jsonObject){
164         var allString = true;
165         var array = [{toString:function(){array[0]='a'; array[1]='c'; array[2]='b'; return 'a'}}];
166         return jsonObject.stringify(simpleObject, array);
167     }
168 PASS tests[i](nativeJSON) is tests[i](JSON)
169 function (jsonObject){
170         var allString = true;
171         var array = [{toString:function(){array[0]='a'; array[1]='c'; array[2]='b'; return 'a'}}];
172         return jsonObject.stringify(simpleObjectWithProto, array);
173     }
174 PASS tests[i](nativeJSON) is tests[i](JSON)
175 function (jsonObject){
176         var allString = true;
177         var array = [1, new Number(2), NaN, Infinity, -Infinity, new String("str")];
178         return jsonObject.stringify({"1":"1","2":"2","NaN":"NaN","Infinity":"Infinity","-Infinity":"-Infinity","str":"str"}, array);
179     }
180 PASS tests[i](nativeJSON) is tests[i].expected
181 function (jsonObject){
182         var allString = true;
183         var array = ["1","2","3"];
184         return jsonObject.stringify({1:'a', 2:'b', 3:'c'}, array);
185     }
186 PASS tests[i](nativeJSON) is tests[i](JSON)
187 function (jsonObject){
188         var allString = true;
189         var array = ["1","2","3"];
190         return jsonObject.stringify(simpleArray, array);
191     }
192 PASS tests[i](nativeJSON) is tests[i](JSON)
193 function (jsonObject){
194         return jsonObject.stringify(simpleArray, null, "  ");
195     }
196 PASS tests[i](nativeJSON) is tests[i](JSON)
197 function (jsonObject){
198         return jsonObject.stringify(simpleArray, null, 4);
199     }
200 PASS tests[i](nativeJSON) is tests[i](JSON)
201 function (jsonObject){
202         return jsonObject.stringify(simpleArray, null, "ab");
203     }
204 PASS tests[i](nativeJSON) is tests[i](JSON)
205 function (jsonObject){
206         return jsonObject.stringify(simpleArray, null, 4);
207     }
208 PASS tests[i](nativeJSON) is tests[i](JSON)
209 function (jsonObject){
210         return jsonObject.stringify(simpleObject, null, "  ");
211     }
212 PASS tests[i](nativeJSON) is tests[i](JSON)
213 function (jsonObject){
214         return jsonObject.stringify(simpleObject, null, 4);
215     }
216 PASS tests[i](nativeJSON) is tests[i](JSON)
217 function (jsonObject){
218         return jsonObject.stringify(simpleObject, null, "ab");
219     }
220 PASS tests[i](nativeJSON) is tests[i](JSON)
221 function (jsonObject){
222         return jsonObject.stringify(simpleObject, null, 4);
223     }
224 PASS tests[i](nativeJSON) is tests[i](JSON)
225 function (jsonObject){
226         return jsonObject.stringify(simpleObject, null, 10);
227     }
228 PASS tests[i](nativeJSON) is tests[i](JSON)
229 function (jsonObject){
230         return jsonObject.stringify(simpleObject, null, 11);
231     }
232 PASS tests[i](nativeJSON) is tests[i].expected
233 function (jsonObject){
234         return jsonObject.stringify(simpleObject, null, "          ");
235     }
236 PASS tests[i](nativeJSON) is tests[i].expected
237 function (jsonObject){
238         return jsonObject.stringify(simpleObject, null, "           ");
239     }
240 PASS tests[i](nativeJSON) is tests[i].expected
241 function (jsonObject){
242         return jsonObject.stringify(complexArray, null, "  ");
243     }
244 PASS tests[i](nativeJSON) is tests[i](JSON)
245 function (jsonObject){
246         return jsonObject.stringify(complexArray, null, 4);
247     }
248 PASS tests[i](nativeJSON) is tests[i](JSON)
249 function (jsonObject){
250         return jsonObject.stringify(complexArray, null, "ab");
251     }
252 PASS tests[i](nativeJSON) is tests[i](JSON)
253 function (jsonObject){
254         return jsonObject.stringify(complexArray, null, 4);
255     }
256 PASS tests[i](nativeJSON) is tests[i](JSON)
257 function (jsonObject){
258         return jsonObject.stringify(complexObject, null, "  ");
259     }
260 PASS tests[i](nativeJSON) is tests[i](JSON)
261 function (jsonObject){
262         return jsonObject.stringify(complexObject, null, 4);
263     }
264 PASS tests[i](nativeJSON) is tests[i](JSON)
265 function (jsonObject){
266         return jsonObject.stringify(complexObject, null, "ab");
267     }
268 PASS tests[i](nativeJSON) is tests[i](JSON)
269 function (jsonObject){
270         return jsonObject.stringify(complexObject, null, 4);
271     }
272 PASS tests[i](nativeJSON) is tests[i](JSON)
273 function (jsonObject){
274         var allString = true;
275         var array = ["1","2","3"];
276         return jsonObject.stringify(simpleArrayWithProto, array);
277     }
278 PASS tests[i](nativeJSON) is tests[i](JSON)
279 function (jsonObject){
280         return jsonObject.stringify(simpleArrayWithProto, null, "  ");
281     }
282 PASS tests[i](nativeJSON) is tests[i](JSON)
283 function (jsonObject){
284         return jsonObject.stringify(simpleArrayWithProto, null, 4);
285     }
286 PASS tests[i](nativeJSON) is tests[i](JSON)
287 function (jsonObject){
288         return jsonObject.stringify(simpleArrayWithProto, null, "ab");
289     }
290 PASS tests[i](nativeJSON) is tests[i](JSON)
291 function (jsonObject){
292         return jsonObject.stringify(simpleArrayWithProto, null, 4);
293     }
294 PASS tests[i](nativeJSON) is tests[i](JSON)
295 function (jsonObject){
296         return jsonObject.stringify(simpleObjectWithProto, null, "  ");
297     }
298 PASS tests[i](nativeJSON) is tests[i](JSON)
299 function (jsonObject){
300         return jsonObject.stringify(simpleObjectWithProto, null, 4);
301     }
302 PASS tests[i](nativeJSON) is tests[i](JSON)
303 function (jsonObject){
304         return jsonObject.stringify(simpleObjectWithProto, null, "ab");
305     }
306 PASS tests[i](nativeJSON) is tests[i](JSON)
307 function (jsonObject){
308         return jsonObject.stringify(simpleObjectWithProto, null, 4);
309     }
310 PASS tests[i](nativeJSON) is tests[i](JSON)
311 function (jsonObject){
312         return jsonObject.stringify(simpleObjectWithProto, null, 10);
313     }
314 PASS tests[i](nativeJSON) is tests[i](JSON)
315 function (jsonObject){
316         return jsonObject.stringify(simpleObjectWithProto, null, 11);
317     }
318 PASS tests[i](nativeJSON) is tests[i].expected
319 function (jsonObject){
320         return jsonObject.stringify(simpleObjectWithProto, null, "          ");
321     }
322 PASS tests[i](nativeJSON) is tests[i].expected
323 function (jsonObject){
324         return jsonObject.stringify(simpleObjectWithProto, null, "           ");
325     }
326 PASS tests[i](nativeJSON) is tests[i].expected
327 function (jsonObject){
328         return jsonObject.stringify(complexArrayWithProto, null, "  ");
329     }
330 PASS tests[i](nativeJSON) is tests[i](JSON)
331 function (jsonObject){
332         return jsonObject.stringify(complexArrayWithProto, null, 4);
333     }
334 PASS tests[i](nativeJSON) is tests[i](JSON)
335 function (jsonObject){
336         return jsonObject.stringify(complexArrayWithProto, null, "ab");
337     }
338 PASS tests[i](nativeJSON) is tests[i](JSON)
339 function (jsonObject){
340         return jsonObject.stringify(complexArrayWithProto, null, 4);
341     }
342 PASS tests[i](nativeJSON) is tests[i](JSON)
343 function (jsonObject){
344         return jsonObject.stringify(complexObjectWithProto, null, "  ");
345     }
346 PASS tests[i](nativeJSON) is tests[i](JSON)
347 function (jsonObject){
348         return jsonObject.stringify(complexObjectWithProto, null, 4);
349     }
350 PASS tests[i](nativeJSON) is tests[i](JSON)
351 function (jsonObject){
352         return jsonObject.stringify(complexObjectWithProto, null, "ab");
353     }
354 PASS tests[i](nativeJSON) is tests[i](JSON)
355 function (jsonObject){
356         return jsonObject.stringify(complexObjectWithProto, null, 4);
357     }
358 PASS tests[i](nativeJSON) is tests[i](JSON)
359 function (jsonObject){
360             return jsonObject.stringify(clientRect);
361     }
362 PASS tests[i](nativeJSON) is tests[i].expected
363 function (jsonObject){
364         return jsonObject.stringify(objectWithSideEffectGetter);
365     }
366 PASS tests[i](nativeJSON) is tests[i].expected
367 function (jsonObject){
368         return jsonObject.stringify(objectWithSideEffectGetter);
369     }
370 PASS tests[i](nativeJSON) is tests[i](JSON)
371 function (jsonObject){
372         return jsonObject.stringify(objectWithSideEffectGetterAndProto);
373     }
374 PASS tests[i](nativeJSON) is tests[i].expected
375 function (jsonObject){
376         return jsonObject.stringify(objectWithSideEffectGetterAndProto);
377     }
378 PASS tests[i](nativeJSON) is tests[i](JSON)
379 function (jsonObject){
380         return jsonObject.stringify(arrayWithSideEffectGetter);
381     }
382 PASS tests[i](nativeJSON) is tests[i](JSON)
383 function (jsonObject){
384         return jsonObject.stringify(arrayWithSideEffectGetterAndProto);
385     }
386 PASS tests[i](nativeJSON) is tests[i](JSON)
387 function (jsonObject){
388         replaceTracker = "";
389         jsonObject.stringify([1,2,3,,,,4,5,6], replaceFunc);
390         return replaceTracker;
391     }
392 PASS tests[i](nativeJSON) is tests[i].expected
393 function (jsonObject){
394         replaceTracker = "";
395         jsonObject.stringify({a:"a", b:"b", c:"c", 3: "d", 2: "e", 1: "f"}, replaceFunc);
396         return replaceTracker;
397     }
398 PASS tests[i](nativeJSON) is tests[i].expected
399 function (jsonObject){
400         var count = 0;
401         var array = [{toString:function(){count++; array[0]='a'; array[1]='c'; array[2]='b'; return 'a'}}];
402         jsonObject.stringify(simpleObject, array);
403         return count;
404     }
405 PASS tests[i](nativeJSON) is tests[i](JSON)
406 function (jsonObject){
407         var allString = true;
408         var array = [{toString:function(){array[0]='a'; array[1]='c'; array[2]='b'; return 'a'}}, 'b', 'c'];
409         return jsonObject.stringify(simpleObject, array);
410     }
411 PASS tests[i](nativeJSON) is tests[i](JSON)
412 function (jsonObject){
413         var count = 0;
414         var array = [{toString:function(){count++; array[0]='a'; array[1]='c'; array[2]='b'; return 'a'}}, 'b', 'c'];
415         jsonObject.stringify(simpleObject, array);
416         return count;
417     }
418 PASS tests[i](nativeJSON) is tests[i](JSON)
419 function (jsonObject){
420         return jsonObject.stringify({a:"1", get b() { this.a="foo"; return "getter"; }, c:"3"});
421     }
422 PASS tests[i](nativeJSON) is tests[i](JSON)
423 function (jsonObject){
424         return jsonObject.stringify({a:"1", get b() { this.c="foo"; return "getter"; }, c:"3"});
425     }
426 PASS tests[i](nativeJSON) is tests[i](JSON)
427 function (jsonObject){
428         var setterCalled = false;
429         jsonObject.stringify({a:"1", set b(s) { setterCalled = true; return "setter"; }, c:"3"});
430         return setterCalled;
431     }
432 PASS tests[i](nativeJSON) is tests[i](JSON)
433 function (jsonObject){
434         return jsonObject.stringify({a:"1", get b(){ return "getter"; }, set b(s) { return "setter"; }, c:"3"});
435     }
436 PASS tests[i](nativeJSON) is tests[i](JSON)
437 function (jsonObject){
438         return jsonObject.stringify(new Array(10));
439     }
440 PASS tests[i](nativeJSON) is tests[i](JSON)
441 function (jsonObject){
442         return jsonObject.stringify([undefined,,null,0,false]);
443     }
444 PASS tests[i](nativeJSON) is tests[i](JSON)
445 function (jsonObject){
446         return jsonObject.stringify({p1:undefined,p2:null,p3:0,p4:false});
447     }
448 PASS tests[i](nativeJSON) is tests[i](JSON)
449 function (jsonObject){
450         cycleTracker = "";
451         return jsonObject.stringify(cyclicObject);
452     }
453 PASS tests[i](nativeJSON) threw exception TypeError: JSON.stringify cannot serialize cyclic structures..
454 function (jsonObject){
455         cycleTracker = "";
456         try { jsonObject.stringify(cyclicObject); } catch(e) { cycleTracker += " -> exception" }
457         return cycleTracker;
458     }
459 PASS tests[i](nativeJSON) is tests[i].expected
460 function (jsonObject){
461         cycleTracker = "";
462         return jsonObject.stringify(cyclicArray);
463     }
464 PASS tests[i](nativeJSON) threw exception TypeError: JSON.stringify cannot serialize cyclic structures..
465 function (jsonObject){
466         cycleTracker = "";
467         try { jsonObject.stringify(cyclicArray); } catch(e) { cycleTracker += " -> exception" }
468         return cycleTracker;
469     }
470 PASS tests[i](nativeJSON) is tests[i].expected
471 function (jsonObject){
472         getterCalls = 0;
473         return jsonObject.stringify(magicObject) + " :: getter calls = " + getterCalls;
474     }
475 PASS tests[i](nativeJSON) is tests[i](JSON)
476 function (jsonObject){
477         return jsonObject.stringify(undefined);
478     }
479 PASS tests[i](nativeJSON) is tests[i](JSON)
480 function (jsonObject){
481         return jsonObject.stringify(null);
482     }
483 PASS tests[i](nativeJSON) is tests[i](JSON)
484 function (jsonObject){
485         return jsonObject.stringify({toJSON:function(){ return undefined; }});
486     }
487 PASS tests[i](nativeJSON) is tests[i](JSON)
488 function (jsonObject){
489         return jsonObject.stringify({toJSON:function(){ return null; }});
490     }
491 PASS tests[i](nativeJSON) is tests[i](JSON)
492 function (jsonObject){
493         return jsonObject.stringify([{toJSON:function(){ return undefined; }}]);
494     }
495 PASS tests[i](nativeJSON) is tests[i](JSON)
496 function (jsonObject){
497         return jsonObject.stringify([{toJSON:function(){ return null; }}]);
498     }
499 PASS tests[i](nativeJSON) is tests[i](JSON)
500 function (jsonObject){
501         return jsonObject.stringify({a:{toJSON:function(){ return undefined; }}});
502     }
503 PASS tests[i](nativeJSON) is tests[i](JSON)
504 function (jsonObject){
505         return jsonObject.stringify({a:{toJSON:function(){ return null; }}});
506     }
507 PASS tests[i](nativeJSON) is tests[i](JSON)
508 function (jsonObject){
509         return jsonObject.stringify({a:{toJSON:function(){ return function(){}; }}});
510     }
511 PASS tests[i](nativeJSON) is tests[i](JSON)
512 function (jsonObject){
513         return jsonObject.stringify({a:function(){}});
514     }
515 PASS tests[i](nativeJSON) is tests[i](JSON)
516 function (jsonObject){
517         var deepObject = {};
518         for (var i = 0; i < 2048; i++)
519             deepObject = {next:deepObject};
520         return jsonObject.stringify(deepObject);
521     }
522 PASS tests[i](nativeJSON) is tests[i](JSON)
523 function (jsonObject){
524         var deepArray = [];
525         for (var i = 0; i < 2048; i++)
526             deepArray = [deepArray];
527         return jsonObject.stringify(deepArray);
528     }
529 PASS tests[i](nativeJSON) is tests[i](JSON)
530 function (jsonObject){
531         var depth = 0;
532         function toDeepVirtualJSONObject() {
533             if (++depth >= 2048)
534                 return {};
535             var r = {};
536             r.toJSON = toDeepVirtualJSONObject;
537             return {recurse: r};
538         }
539         return jsonObject.stringify(toDeepVirtualJSONObject());
540     }
541 PASS tests[i](nativeJSON) is tests[i](JSON)
542 function (jsonObject){
543         var depth = 0;
544         function toDeepVirtualJSONArray() {
545             if (++depth >= 2048)
546                 return [];
547             var r = [];
548             r.toJSON = toDeepJSONArray;
549             return [r];
550         }
551         return jsonObject.stringify(toDeepVirtualJSONArray());
552     }
553 function (jsonObject){
554         return jsonObject.stringify(fullCharsetString);
555     }
556 PASS tests[i](nativeJSON) is tests[i](JSON)
557 PASS successfullyParsed is true
558
559 TEST COMPLETE
560