// Copyright (C) 2019 Aleksey Shvayka. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- esid: sec-serializejsonproperty description: > Replacer function is called with correct context and arguments. info: | JSON.stringify ( value [ , replacer [ , space ] ] ) [...] 12. Return ? SerializeJSONProperty(the empty String, wrapper). SerializeJSONProperty ( key, holder ) 1. Let value be ? Get(holder, key). [...] 3. If ReplacerFunction is not undefined, then a. Set value to ? Call(ReplacerFunction, holder, « key, value »). includes: [compareArray.js] ---*/ var calls = []; var replacer = function(key, value) { if (key !== '') { calls.push([this, key, value]); } return value; }; var b1 = [1, 2]; var b2 = {c1: true, c2: false}; var a1 = { b1: b1, b2: { toJSON: function() { return b2; }, }, }; var obj = {a1: a1, a2: 'a2'}; assert.sameValue( JSON.stringify(obj, replacer), JSON.stringify(obj) ); assert.compareArray(calls[0], [obj, 'a1', a1]); assert.compareArray(calls[1], [a1, 'b1', b1]); assert.compareArray(calls[2], [b1, '0', 1]); assert.compareArray(calls[3], [b1, '1', 2]); assert.compareArray(calls[4], [a1, 'b2', b2]); assert.compareArray(calls[5], [b2, 'c1', true]); assert.compareArray(calls[6], [b2, 'c2', false]); assert.compareArray(calls[7], [obj, 'a2', 'a2']); reportCompare(0, 0);