| <html> |
| <head> |
| <script src="../../resources/js-test-pre.js"></script> |
| </head> |
| <body> |
| <p id="description"></p> |
| <div id="console"></div> |
| <script> |
| description("Test dom storage with many different types of keys (as opposed to values)"); |
| |
| function test(storageString) |
| { |
| storage = eval(storageString); |
| if (!storage) { |
| testFailed(storageString + " DOES NOT exist"); |
| return; |
| } |
| |
| debug("Testing " + storageString); |
| |
| evalAndLog("storage.clear()"); |
| shouldBe("storage.length", "0"); |
| |
| debug(""); |
| shouldBeNull("storage.getItem('FOO')"); |
| evalAndLog("storage.setItem('FOO', 'BAR')"); |
| shouldBe("storage.length", "1"); |
| |
| shouldBeEqualToString("storage.getItem('FOO')", "BAR"); |
| shouldBeNull("storage.getItem('foo')"); |
| shouldBeUndefined("storage.foo"); |
| shouldBeUndefined("storage['foo']"); |
| |
| evalAndLog("storage.foo = 'x'"); |
| shouldBeEqualToString("storage.foo", "x"); |
| shouldBeEqualToString("storage['foo']", "x"); |
| shouldBeEqualToString("storage.getItem('foo')", "x"); |
| evalAndLog("storage['foo'] = 'y'"); |
| shouldBeEqualToString("storage.foo", "y"); |
| shouldBeEqualToString("storage['foo']", "y"); |
| shouldBeEqualToString("storage.getItem('foo')", "y"); |
| evalAndLog("storage.setItem('foo', 'z')"); |
| shouldBeEqualToString("storage.foo", "z"); |
| shouldBeEqualToString("storage['foo']", "z"); |
| shouldBeEqualToString("storage.getItem('foo')", "z"); |
| shouldBe("storage.length", "2"); |
| |
| debug(""); |
| debug("Testing a null key"); |
| evalAndLog("storage.setItem(null, 'asdf')"); |
| shouldBeEqualToString("storage.getItem('null')", "asdf"); |
| shouldBeEqualToString("storage.getItem(null)", "asdf"); |
| shouldBeEqualToString("storage['null']", "asdf"); |
| shouldBeEqualToString("storage[null]", "asdf"); |
| shouldBe("storage.length", "3"); |
| |
| evalAndLog("storage[null] = 1"); |
| shouldBeEqualToString("storage.getItem(null)", "1"); |
| evalAndLog("storage['null'] = 2"); |
| shouldBeEqualToString("storage.getItem(null)", "2"); |
| evalAndLog("storage.setItem('null', 3)"); |
| shouldBeEqualToString("storage.getItem(null)", "3"); |
| shouldBe("storage.length", "3"); |
| |
| debug(""); |
| debug("Testing an undefined key"); |
| evalAndLog("storage[undefined] = 'xyz'"); |
| shouldBeEqualToString("storage.getItem('undefined')", "xyz"); |
| shouldBeEqualToString("storage.getItem(undefined)", "xyz"); |
| shouldBeEqualToString("storage['undefined']", "xyz"); |
| shouldBeEqualToString("storage[undefined]", "xyz"); |
| shouldBe("storage.length", "4"); |
| |
| evalAndLog("storage['undefined'] = 4"); |
| shouldBeEqualToString("storage.getItem(undefined)", "4"); |
| evalAndLog("storage.setItem(undefined, 5)"); |
| shouldBeEqualToString("storage.getItem(undefined)", "5"); |
| evalAndLog("storage.setItem('undefined', 6)"); |
| shouldBeEqualToString("storage.getItem(undefined)", "6"); |
| shouldBe("storage.length", "4"); |
| |
| debug(""); |
| debug("Testing a numeric key"); |
| evalAndLog("storage['2'] = 'ppp'"); |
| shouldBeEqualToString("storage.getItem('2')", "ppp"); |
| shouldBeEqualToString("storage.getItem(2)", "ppp"); |
| shouldBeEqualToString("storage['2']", "ppp"); |
| shouldBeEqualToString("storage[2]", "ppp"); |
| shouldBe("storage.length", "5"); |
| |
| evalAndLog("storage[2] = 7"); |
| shouldBeEqualToString("storage.getItem(2)", "7"); |
| evalAndLog("storage.setItem(2, 8)"); |
| shouldBeEqualToString("storage.getItem(2)", "8"); |
| evalAndLog("storage.setItem('2', 9)"); |
| shouldBeEqualToString("storage.getItem(2)", "9"); |
| shouldBe("storage.length", "5"); |
| |
| debug(""); |
| debug("Setting a non-ascii string to foo"); |
| k = String.fromCharCode(255425) + String.fromCharCode(255) + String.fromCharCode(2554252321) + String.fromCharCode(0) + 'hello'; |
| evalAndLog("storage[k] = 'hello'"); |
| shouldBeEqualToString("storage.getItem(k)", "hello"); |
| shouldBeEqualToString("storage[k]", "hello"); |
| shouldBe("storage.length", "6"); |
| |
| debug(""); |
| debug("Testing case differences"); |
| evalAndLog("storage.foo1 = 'lower1'"); |
| evalAndLog("storage.FOO1 = 'UPPER1'"); |
| evalAndLog("storage['foo2'] = 'lower2'"); |
| evalAndLog("storage['FOO2'] = 'UPPER2'"); |
| evalAndLog("storage.setItem('foo3', 'lower3')"); |
| evalAndLog("storage.setItem('FOO3', 'UPPER3')"); |
| shouldBeEqualToString("storage.foo1", "lower1"); |
| shouldBeEqualToString("storage.FOO1", "UPPER1"); |
| shouldBeEqualToString("storage['foo2']", "lower2"); |
| shouldBeEqualToString("storage['FOO2']", "UPPER2"); |
| shouldBeEqualToString("storage.getItem('foo3')", "lower3"); |
| shouldBeEqualToString("storage.getItem('FOO3')", "UPPER3"); |
| shouldBe("storage.length", "12"); |
| |
| |
| debug(""); |
| debug("Testing overriding length"); |
| shouldBe("storage.length", "12"); |
| shouldBe("storage['length']", "12"); |
| shouldBeNull("storage.getItem('length')"); |
| |
| evalAndLog("storage.length = 0"); |
| shouldBe("storage.length", "12"); |
| shouldBe("storage['length']", "12"); |
| shouldBeNull("storage.getItem('length')"); |
| |
| evalAndLog("storage['length'] = 0"); |
| shouldBe("storage.length", "12"); |
| shouldBe("storage['length']", "12"); |
| shouldBeNull("storage.getItem('length')"); |
| |
| evalAndLog("storage.setItem('length', 0)"); |
| shouldBe("storage.length", "13"); |
| shouldBe("storage['length']", "13"); |
| shouldBeEqualToString("storage.getItem('length')", "0"); |
| |
| evalAndLog("storage.removeItem('length')"); |
| shouldBe("storage.length", "12"); |
| shouldBe("storage['length']", "12"); |
| shouldBeNull("storage.getItem('length')"); |
| |
| evalAndLog("storage.setItem('length', 0)"); |
| shouldBe("storage.length", "13"); |
| } |
| |
| test("sessionStorage"); |
| debug(""); |
| debug(""); |
| test("localStorage"); |
| |
| window.successfullyParsed = true; |
| isSuccessfullyParsed(); |
| </script> |
| </body> |
| </html> |