| Index: test/mjsunit/json.js
|
| diff --git a/test/mjsunit/json.js b/test/mjsunit/json.js
|
| index 79826dbef181dc6f7b467443a04080bfd5db8bce..c72c153688c76312c273e0cfb20e63bc8df89170 100644
|
| --- a/test/mjsunit/json.js
|
| +++ b/test/mjsunit/json.js
|
| @@ -225,23 +225,28 @@ TestInvalid('"Garbage""After string"');
|
|
|
| // Stringify
|
|
|
| -assertEquals("true", JSON.stringify(true));
|
| -assertEquals("false", JSON.stringify(false));
|
| -assertEquals("null", JSON.stringify(null));
|
| -assertEquals("false", JSON.stringify({toJSON: function () { return false; }}));
|
| -assertEquals("4", JSON.stringify(4));
|
| -assertEquals('"foo"', JSON.stringify("foo"));
|
| -assertEquals("null", JSON.stringify(Infinity));
|
| -assertEquals("null", JSON.stringify(-Infinity));
|
| -assertEquals("null", JSON.stringify(NaN));
|
| -assertEquals("4", JSON.stringify(new Number(4)));
|
| -assertEquals('"bar"', JSON.stringify(new String("bar")));
|
| -
|
| -assertEquals('"foo\\u0000bar"', JSON.stringify("foo\0bar"));
|
| -assertEquals('"f\\"o\'o\\\\b\\ba\\fr\\nb\\ra\\tz"',
|
| - JSON.stringify("f\"o\'o\\b\ba\fr\nb\ra\tz"));
|
| -
|
| -assertEquals("[1,2,3]", JSON.stringify([1, 2, 3]));
|
| +function TestStringify(expected, input) {
|
| + assertEquals(expected, JSON.stringify(input));
|
| + assertEquals(expected, JSON.stringify(input, null, 0));
|
| +}
|
| +
|
| +TestStringify("true", true);
|
| +TestStringify("false", false);
|
| +TestStringify("null", null);
|
| +TestStringify("false", {toJSON: function () { return false; }});
|
| +TestStringify("4", 4);
|
| +TestStringify('"foo"', "foo");
|
| +TestStringify("null", Infinity);
|
| +TestStringify("null", -Infinity);
|
| +TestStringify("null", NaN);
|
| +TestStringify("4", new Number(4));
|
| +TestStringify('"bar"', new String("bar"));
|
| +
|
| +TestStringify('"foo\\u0000bar"', "foo\0bar");
|
| +TestStringify('"f\\"o\'o\\\\b\\ba\\fr\\nb\\ra\\tz"',
|
| + "f\"o\'o\\b\ba\fr\nb\ra\tz");
|
| +
|
| +TestStringify("[1,2,3]", [1, 2, 3]);
|
| assertEquals("[\n 1,\n 2,\n 3\n]", JSON.stringify([1, 2, 3], null, 1));
|
| assertEquals("[\n 1,\n 2,\n 3\n]", JSON.stringify([1, 2, 3], null, 2));
|
| assertEquals("[\n 1,\n 2,\n 3\n]",
|
| @@ -256,33 +261,38 @@ assertEquals("[1,2,[3,[4],5],6,7]",
|
| JSON.stringify([1, 2, [3, [4], 5], 6, 7], null));
|
| assertEquals("[2,4,[6,[8],10],12,14]",
|
| JSON.stringify([1, 2, [3, [4], 5], 6, 7], DoubleNumbers));
|
| -assertEquals('["a","ab","abc"]', JSON.stringify(["a","ab","abc"]));
|
| -assertEquals('{"a":1,"c":true}',
|
| - JSON.stringify({ a : 1,
|
| - b : function() { 1 },
|
| - c : true,
|
| - d : function() { 2 } }));
|
| -assertEquals('[1,null,true,null]',
|
| - JSON.stringify([1, function() { 1 }, true, function() { 2 }]));
|
| -assertEquals('"toJSON 123"',
|
| - JSON.stringify({ toJSON : function() { return 'toJSON 123'; } }));
|
| -assertEquals('{"a":321}',
|
| - JSON.stringify({ a : { toJSON : function() { return 321; } } }));
|
| +TestStringify('["a","ab","abc"]', ["a","ab","abc"]);
|
| +TestStringify('{"a":1,"c":true}', { a : 1,
|
| + b : function() { 1 },
|
| + c : true,
|
| + d : function() { 2 } });
|
| +TestStringify('[1,null,true,null]',
|
| + [1, function() { 1 }, true, function() { 2 }]);
|
| +TestStringify('"toJSON 123"',
|
| + { toJSON : function() { return 'toJSON 123'; } });
|
| +TestStringify('{"a":321}',
|
| + { a : { toJSON : function() { return 321; } } });
|
| var counter = 0;
|
| assertEquals('{"getter":123}',
|
| JSON.stringify({ get getter() { counter++; return 123; } }));
|
| assertEquals(1, counter);
|
| -assertEquals('{"a":"abc","b":"\u1234bc"}',
|
| - JSON.stringify({ a : "abc", b : "\u1234bc" }));
|
| +assertEquals('{"getter":123}',
|
| + JSON.stringify({ get getter() { counter++; return 123; } },
|
| + null,
|
| + 0));
|
| +assertEquals(2, counter);
|
| +
|
| +TestStringify('{"a":"abc","b":"\u1234bc"}',
|
| + { a : "abc", b : "\u1234bc" });
|
|
|
|
|
| var a = { a : 1, b : 2 };
|
| delete a.a;
|
| -assertEquals('{"b":2}', JSON.stringify(a));
|
| +TestStringify('{"b":2}', a);
|
|
|
| var b = {};
|
| b.__proto__ = { toJSON : function() { return 321;} };
|
| -assertEquals("321", JSON.stringify(b));
|
| +TestStringify("321", b);
|
|
|
| var array = [""];
|
| var expected = '""';
|
| @@ -291,18 +301,19 @@ for (var i = 0; i < 10000; i++) {
|
| expected = '"",' + expected;
|
| }
|
| expected = '[' + expected + ']';
|
| -assertEquals(expected, JSON.stringify(array));
|
| +TestStringify(expected, array);
|
|
|
|
|
| var circular = [1, 2, 3];
|
| circular[2] = circular;
|
| assertThrows(function () { JSON.stringify(circular); }, TypeError);
|
| +assertThrows(function () { JSON.stringify(circular, null, 0); }, TypeError);
|
|
|
| var singleton = [];
|
| var multiOccurrence = [singleton, singleton, singleton];
|
| -assertEquals("[[],[],[]]", JSON.stringify(multiOccurrence));
|
| +TestStringify("[[],[],[]]", multiOccurrence);
|
|
|
| -assertEquals('{"x":5,"y":6}', JSON.stringify({x:5,y:6}));
|
| +TestStringify('{"x":5,"y":6}', {x:5,y:6});
|
| assertEquals('{"x":5}', JSON.stringify({x:5,y:6}, ['x']));
|
| assertEquals('{\n "a": "b",\n "c": "d"\n}',
|
| JSON.stringify({a:"b",c:"d"}, null, 1));
|
| @@ -312,7 +323,7 @@ assertEquals('{"y":6,"x":5}', JSON.stringify({x:5,y:6}, ['y', 'x']));
|
| var checker = {};
|
| var array = [checker];
|
| checker.toJSON = function(key) { return 1 + key; };
|
| -assertEquals('["10"]', JSON.stringify(array));
|
| +TestStringify('["10"]', array);
|
|
|
| // The gap is capped at ten characters if specified as string.
|
| assertEquals('{\n "a": "b",\n "c": "d"\n}',
|
| @@ -329,12 +340,11 @@ assertEquals('{"x":"42"}', JSON.stringify({x: String}, newx));
|
| assertEquals('{"x":42}', JSON.stringify({x: Number}, newx));
|
| assertEquals('{"x":true}', JSON.stringify({x: Boolean}, newx));
|
|
|
| -assertEquals(undefined, JSON.stringify(undefined));
|
| -assertEquals(undefined, JSON.stringify(function () { }));
|
| +TestStringify(undefined, undefined);
|
| +TestStringify(undefined, function () { });
|
| // Arrays with missing, undefined or function elements have those elements
|
| // replaced by null.
|
| -assertEquals("[null,null,null]",
|
| - JSON.stringify([undefined,,function(){}]));
|
| +TestStringify("[null,null,null]", [undefined,,function(){}]);
|
|
|
| // Objects with undefined or function properties (including replaced properties)
|
| // have those properties ignored.
|
| @@ -415,16 +425,15 @@ var re = /Is callable/;
|
| var reJSON = /Is callable/;
|
| reJSON.toJSON = function() { return "has toJSON"; };
|
|
|
| -assertEquals(
|
| - '[37,null,1,"foo","37","true",null,"has toJSON",{},"has toJSON"]',
|
| - JSON.stringify([num37, numFoo, numTrue,
|
| - strFoo, str37, strTrue,
|
| - func, funcJSON, re, reJSON]));
|
| +TestStringify('[37,null,1,"foo","37","true",null,"has toJSON",{},"has toJSON"]',
|
| + [num37, numFoo, numTrue,
|
| + strFoo, str37, strTrue,
|
| + func, funcJSON, re, reJSON]);
|
|
|
|
|
| var oddball = Object(42);
|
| oddball.__proto__ = { __proto__: null, toString: function() { return true; } };
|
| -assertEquals('1', JSON.stringify(oddball));
|
| +TestStringify('1', oddball);
|
|
|
| var getCount = 0;
|
| var callCount = 0;
|
| @@ -433,10 +442,10 @@ var counter = { get toJSON() { getCount++;
|
| return 42; }; } };
|
|
|
| // RegExps are not callable, so they are stringified as objects.
|
| -assertEquals('{}', JSON.stringify(/regexp/));
|
| -assertEquals('42', JSON.stringify(counter));
|
| -assertEquals(1, getCount);
|
| -assertEquals(1, callCount);
|
| +TestStringify('{}', /regexp/);
|
| +TestStringify('42', counter);
|
| +assertEquals(2, getCount);
|
| +assertEquals(2, callCount);
|
|
|
| var oddball2 = Object(42);
|
| var oddball3 = Object("foo");
|
| @@ -445,13 +454,13 @@ oddball3.__proto__ = { __proto__: null,
|
| valueOf: function() { return true; } };
|
| oddball2.__proto__ = { __proto__: null,
|
| toJSON: function () { return oddball3; } }
|
| -assertEquals('"true"', JSON.stringify(oddball2));
|
| +TestStringify('"true"', oddball2);
|
|
|
|
|
| var falseNum = Object("37");
|
| falseNum.__proto__ = Number.prototype;
|
| falseNum.toString = function() { return 42; };
|
| -assertEquals('"42"', JSON.stringify(falseNum));
|
| +TestStringify('"42"', falseNum);
|
|
|
| // Parse an object value as __proto__.
|
| var o1 = JSON.parse('{"__proto__":[]}');
|
| @@ -472,4 +481,4 @@ assertTrue(o2.hasOwnProperty("__proto__"));
|
| assertTrue(Object.prototype.isPrototypeOf(o2));
|
|
|
| var json = '{"stuff before slash\\\\stuff after slash":"whatever"}';
|
| -assertEquals(json, JSON.stringify(JSON.parse(json)));
|
| +TestStringify(json, JSON.parse(json));
|
|
|