From 963917618fc8a9cd99da1b89a7430d110cf13e21 Mon Sep 17 00:00:00 2001 From: Alexey Shvayka Date: Fri, 17 Jan 2020 22:23:29 +0200 Subject: [PATCH] Test that JSON.stringify calls replacer on deleted properties --- ...placer-function-object-deleted-property.js | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 test/built-ins/JSON/stringify/replacer-function-object-deleted-property.js diff --git a/test/built-ins/JSON/stringify/replacer-function-object-deleted-property.js b/test/built-ins/JSON/stringify/replacer-function-object-deleted-property.js new file mode 100644 index 0000000000..7bc52cc69d --- /dev/null +++ b/test/built-ins/JSON/stringify/replacer-function-object-deleted-property.js @@ -0,0 +1,41 @@ +// Copyright (C) 2020 Alexey 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 on properties, deleted during stringification. +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 »). +---*/ + +var obj = { + get a() { + delete this.b; + return 1; + }, + b: 2, +}; + +var replacer = function(key, value) { + if (key === 'b') { + assert.sameValue(value, undefined); + return ''; + } + + return value; +}; + +assert.sameValue( + JSON.stringify(obj, replacer), + '{"a":1,"b":""}' +);