diff options
Diffstat (limited to 'js/src/tests/test262/built-ins/JSON/stringify/replacer-function-result.js')
-rw-r--r-- | js/src/tests/test262/built-ins/JSON/stringify/replacer-function-result.js | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/JSON/stringify/replacer-function-result.js b/js/src/tests/test262/built-ins/JSON/stringify/replacer-function-result.js new file mode 100644 index 0000000000..be705fdcd1 --- /dev/null +++ b/js/src/tests/test262/built-ins/JSON/stringify/replacer-function-result.js @@ -0,0 +1,56 @@ +// Copyright (C) 2012 Ecma International. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-serializejsonproperty +description: > + Result of replacer function is stringified. +info: | + JSON.stringify ( value [ , replacer [ , space ] ] ) + + [...] + 12. Return ? SerializeJSONProperty(the empty String, wrapper). + + SerializeJSONProperty ( key, holder ) + + [...] + 3. If ReplacerFunction is not undefined, then + a. Set value to ? Call(ReplacerFunction, holder, « key, value »). +---*/ + +var obj = { + a1: { + b1: [1, 2], + b2: { + c1: true, + c2: false, + }, + }, + a2: 'a2', +}; + +var replacer = function(key, value) { + assert.sameValue(value, null); + + switch (key) { + case '': return {a1: null, a2: null}; + case 'a1': return {b1: null, b2: null}; + case 'a2': return 'a2'; + + case 'b1': return [null, null]; + case 'b2': return {c1: null, c2: null}; + + case '0': return 1; + case '1': return 2; + case 'c1': return true; + case 'c2': return false; + } + + throw new Test262Error('unreachable'); +}; + +assert.sameValue( + JSON.stringify(null, replacer), + JSON.stringify(obj) +); + +reportCompare(0, 0); |