| ["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)); |
| } |
| }); |