summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/built-ins/JSON/stringify/replacer-function-result.js
diff options
context:
space:
mode:
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.js56
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);