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.
---*/
var direct = [];
var directReplacer = function(_key, value) {
if (value === direct) {
return [direct];
}
return value;
var circular = [{}];
var circularReplacer = function(k, v) {
return circular;
};
assert.throws(TypeError, function() {
JSON.stringify(direct, directReplacer);
});
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);
JSON.stringify(circular, circularReplacer);
});

View File

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

View File

@ -27,21 +27,13 @@ info: |
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 circular = [arr];
arr.toJSON = function() {
return [indirect];
return circular;
};
var indirect = [[arr]];
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.
---*/
var direct = {
toJSON: function() {
return {prop: direct};
},
var obj = {};
var circular = { prop: obj };
obj.toJSON = function() {
return circular;
};
assert.throws(TypeError, function() {
JSON.stringify(direct);
});
var indirect = {
p1: {
p2: {
toJSON: function() {
return {p3: indirect};
},
},
},
};
assert.throws(TypeError, function() {
JSON.stringify(indirect);
JSON.stringify(circular);
});