Fix circular tests for JSON.stringify (#2315)

Ref #2168
This commit is contained in:
Leo Balter 2019-08-28 17:37:19 -03:00 committed by GitHub
parent d0b5137c15
commit 71e40aad50
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 21 additions and 64 deletions

View File

@ -25,29 +25,11 @@ info: |
1. If stack contains value, throw a TypeError exception because the structure is cyclical. 1. If stack contains value, throw a TypeError exception because the structure is cyclical.
---*/ ---*/
var direct = []; var circular = [{}];
var directReplacer = function(_key, value) { var circularReplacer = function(k, v) {
if (value === direct) { return circular;
return [direct];
}
return value;
}; };
assert.throws(TypeError, function() { assert.throws(TypeError, function() {
JSON.stringify(direct, directReplacer); JSON.stringify(circular, circularReplacer);
});
var arr = [];
var indirect = [[arr]];
var indirectReplacer = function(_key, value) {
if (value === arr) {
return [indirect];
}
return value;
};
assert.throws(TypeError, function() {
JSON.stringify(indirect, indirectReplacer);
}); });

View File

@ -25,13 +25,9 @@ info: |
1. If stack contains value, throw a TypeError exception because the structure is cyclical. 1. If stack contains value, throw a TypeError exception because the structure is cyclical.
---*/ ---*/
var direct = {}; var direct = {prop: {}};
var directReplacer = function(_key, value) { var directReplacer = function(k, v) {
if (value === direct) { return direct;
return {prop: direct};
}
return value;
}; };
assert.throws(TypeError, function() { assert.throws(TypeError, function() {
@ -39,10 +35,10 @@ assert.throws(TypeError, function() {
}); });
var indirect = {p1: {p2: {}}}; var indirect = {p1: {p2: {}}};
var indirectReplacer = function(_key, value) { var indirectReplacer = function(key, value) {
if (value === indirect.p1.p2) { if (key === 'p2') {
return {p3: indirect}; return indirect;
} }
return value; return value;
}; };

View File

@ -27,21 +27,13 @@ info: |
1. If stack contains value, throw a TypeError exception because the structure is cyclical. 1. If stack contains value, throw a TypeError exception because the structure is cyclical.
---*/ ---*/
var direct = [];
direct.toJSON = function() {
return [direct];
};
assert.throws(TypeError, function() {
JSON.stringify(direct);
});
var arr = []; var arr = [];
var circular = [arr];
arr.toJSON = function() { arr.toJSON = function() {
return [indirect]; return circular;
}; };
var indirect = [[arr]];
assert.throws(TypeError, function() { assert.throws(TypeError, function() {
JSON.stringify(indirect); JSON.stringify(circular);
}); });

View File

@ -27,26 +27,13 @@ info: |
1. If stack contains value, throw a TypeError exception because the structure is cyclical. 1. If stack contains value, throw a TypeError exception because the structure is cyclical.
---*/ ---*/
var direct = { var obj = {};
toJSON: function() { var circular = { prop: obj };
return {prop: direct};
}, obj.toJSON = function() {
return circular;
}; };
assert.throws(TypeError, function() { assert.throws(TypeError, function() {
JSON.stringify(direct); JSON.stringify(circular);
});
var indirect = {
p1: {
p2: {
toJSON: function() {
return {p3: indirect};
},
},
},
};
assert.throws(TypeError, function() {
JSON.stringify(indirect);
}); });