Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

["localStorage", "sessionStorage"].forEach(function(name) {
var test_error = { name: "test" };
var interesting_strs = ["\uD7FF", "\uD800", "\uDBFF", "\uDC00",
"\uDFFF", "\uE000", "\uFFFD", "\uFFFE", "\uFFFF",
"\uD83C\uDF4D", "\uD83Ca", "a\uDF4D",
"\uDBFF\uDFFF"];
for (var i = 0; i <= 0xFF; i++) {
interesting_strs.push(String.fromCharCode(i));
}
test(function() {
var storage = window[name];
storage.clear();
storage.setItem("name", "user1");
assert_equals(storage.length, 1, "localStorage.setItem")
}, name + ".setItem()");
test(function() {
var storage = window[name];
storage.clear();
storage["name"] = "user1";
assert_true("name" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("name"), "user1");
assert_equals(storage["name"], "user1");
}, name + "[]");
test(function() {
var storage = window[name];
storage.clear();
storage["name"] = "user1";
storage["name"] = "user2";
assert_true("name" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("name"), "user2");
assert_equals(storage["name"], "user2");
}, name + "[] update");
test(function() {
var storage = window[name];
storage.clear();
storage.setItem("age", null);
assert_true("age" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("age"), "null");
assert_equals(storage["age"], "null");
}, name + ".setItem(_, null)");
test(function() {
var storage = window[name];
storage.clear();
storage["age"] = null;
assert_true("age" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("age"), "null");
assert_equals(storage["age"], "null");
}, name + "[] = null");
test(function() {
var storage = window[name];
storage.clear();
storage.setItem("age", undefined);
assert_true("age" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("age"), "undefined");
assert_equals(storage["age"], "undefined");
}, name + ".setItem(_, undefined)");
test(function() {
var storage = window[name];
storage.clear();
storage["age"] = undefined;
assert_true("age" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("age"), "undefined");
assert_equals(storage["age"], "undefined");
}, name + "[] = undefined");
test(function() {
var storage = window[name];
storage.clear();
storage.setItem("age", "10");
assert_throws_exactly(test_error, function() {
storage.setItem("age",
{ toString: function() { throw test_error; } });
});
assert_true("age" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("age"), "10");
assert_equals(storage["age"], "10");
}, name + ".setItem({ throws })");
test(function() {
var storage = window[name];
storage.clear();
storage.setItem("age", "10");
assert_throws_exactly(test_error, function() {
storage["age"] =
{ toString: function() { throw test_error; } };
});
assert_true("age" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("age"), "10");
assert_equals(storage["age"], "10");
}, name + "[] = { throws }");
test(function() {
var storage = window[name];
storage.clear();
storage.setItem(undefined, "test");
assert_true("undefined" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("undefined"), "test");
assert_equals(storage["undefined"], "test");
}, name + ".setItem(undefined, _)");
test(function() {
var storage = window[name];
storage.clear();
storage[undefined] = "test2";
assert_true("undefined" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("undefined"), "test2");
assert_equals(storage["undefined"], "test2");
}, name + "[undefined]");
test(function() {
var storage = window[name];
storage.clear();
storage.setItem(null, "test");
assert_true("null" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("null"), "test");
assert_equals(storage["null"], "test");
}, name + ".setItem(null, _)");
test(function() {
var storage = window[name];
storage.clear();
storage[null] = "test2";
assert_true("null" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("null"), "test2");
assert_equals(storage["null"], "test2");
}, name + "[null]");
test(function() {
var storage = window[name];
storage.clear();
storage["foo\0bar"] = "user1";
assert_true("foo\0bar" in storage);
assert_false("foo\0" in storage);
assert_false("foo\0baz" in storage);
assert_false("foo" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("foo\0bar"), "user1");
assert_equals(storage.getItem("foo\0"), null);
assert_equals(storage.getItem("foo\0baz"), null);
assert_equals(storage.getItem("foo"), null);
assert_equals(storage["foo\0bar"], "user1");
assert_equals(storage["foo\0"], undefined);
assert_equals(storage["foo\0baz"], undefined);
assert_equals(storage["foo"], undefined);
}, name + " key containing null");
test(function() {
var storage = window[name];
storage.clear();
storage["name"] = "foo\0bar";
assert_true("name" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("name"), "foo\0bar");
assert_equals(storage["name"], "foo\0bar");
}, name + " value containing null");
for (i = 0; i < interesting_strs.length; i++) {
var str = interesting_strs[i];
test(function() {
var storage = window[name];
storage.clear();
storage[str] = "user1";
assert_true(str in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem(str), "user1");
assert_equals(storage[str], "user1");
}, name + "[" + format_value(str) + "]");
test(function() {
var storage = window[name];
storage.clear();
storage["name"] = str;
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("name"), str);
assert_equals(storage["name"], str);
}, name + "[] = " + format_value(str));
}
});