summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/Symbol/json-stringify-values.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/non262/Symbol/json-stringify-values.js')
-rw-r--r--js/src/tests/non262/Symbol/json-stringify-values.js33
1 files changed, 33 insertions, 0 deletions
diff --git a/js/src/tests/non262/Symbol/json-stringify-values.js b/js/src/tests/non262/Symbol/json-stringify-values.js
new file mode 100644
index 0000000000..0fe32eee54
--- /dev/null
+++ b/js/src/tests/non262/Symbol/json-stringify-values.js
@@ -0,0 +1,33 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// To JSON.stringify, symbols are the same as undefined.
+
+var symbols = [
+ Symbol(),
+ Symbol.for("ponies"),
+ Symbol.iterator
+];
+
+for (var sym of symbols) {
+ assertEq(JSON.stringify(sym), undefined);
+ assertEq(JSON.stringify([sym]), "[null]");
+
+ // JSON.stringify skips symbol-valued properties!
+ assertEq(JSON.stringify({x: sym}), '{}');
+
+ // However such properties are passed to the replacerFunction if any.
+ var replacer = function (key, val) {
+ assertEq(typeof this, "object");
+ if (typeof val === "symbol") {
+ assertEq(val, sym);
+ return "ding";
+ }
+ return val;
+ };
+ assertEq(JSON.stringify(sym, replacer), '"ding"');
+ assertEq(JSON.stringify({x: sym}, replacer), '{"x":"ding"}');
+}
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0, 'ok');