blob: 50cdc8d45cd0fdbdb93790158665233028634fbe [file] [log] [blame]
"use strict";
description("Verify that JSON.stringify passes keys as strings when calling toJSON or the replacer function.");
debug("Test Replacer Function");
var globalKey;
var globalValue;
var globalIndex = 0;
function replacer(key, value) {
globalKey = key;
globalValue = value;
if (globalIndex == 0) {
shouldBeEqualToString("typeof globalKey", "string");
shouldBeEqualToString("globalKey", "");
shouldBeEqualToString("typeof globalValue", "object");
shouldBeTrue("globalValue instanceof Array");
shouldBe("globalValue.length", "1");
shouldBe("globalValue[0]", "42");
} else if (globalIndex == 1) {
globalKey = key;
shouldBeEqualToString("typeof globalKey", "string");
shouldBeEqualToString("globalKey", "0");
shouldBeEqualToString("typeof globalValue", "number");
shouldBe("globalValue", "42");
value = 5;
} else {
shouldBeTrue(false);
}
++globalIndex;
return value;
}
shouldBeEqualToString("JSON.stringify([42], replacer)", "[5]");
debug("");
debug("Test toJSON Function");
var globalThis;
var toJSONArrayHelperCallCounter = 0;
var testObject = {
toJSON: function(key) {
globalThis = this;
globalKey = key;
shouldBe("toJSONArrayHelperCallCounter", "1");
shouldBeTrue("globalThis === testObject");
shouldBeEqualToString("typeof globalKey", "string");
shouldBeEqualToString("globalKey", "0");
return true;
}
}
var testArray = [testObject];
function toJSONArrayHelper(key) {
globalThis = this;
globalKey = key;
shouldBe("toJSONArrayHelperCallCounter", "0");
shouldBeTrue("globalThis === testArray");
shouldBeEqualToString("typeof globalKey", "string");
shouldBeEqualToString("globalKey", "");
++toJSONArrayHelperCallCounter;
return this;
}
Array.prototype.toJSON = toJSONArrayHelper;
shouldBeEqualToString("JSON.stringify(testArray)", "[true]");