65 lines
1.9 KiB
JavaScript
65 lines
1.9 KiB
JavaScript
"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]");
|