<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>
description("Test some corner case DOM Storage values.");

function testKeyValue(key, value)
{
    keyString = "storage['" + key + "']";
    shouldBeEqualToString("typeof " + keyString, "string");
    shouldBeEqualToString(keyString, value);

    keyString = "storage." + key;
    shouldBeEqualToString("typeof " + keyString, "string");
    shouldBeEqualToString(keyString, value);

    keyString = "storage.getItem('" + key + "')";
    shouldBeEqualToString("typeof " + keyString, "string");
    shouldBeEqualToString(keyString, value);
}

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("");
    shouldBeEqualToString("typeof storage['foo']", "undefined");
    shouldBeUndefined("storage['foo']");
    shouldBeEqualToString("typeof storage.foo", "undefined");
    shouldBeUndefined("storage.foo");
    shouldBeEqualToString("typeof storage.getItem('foo')", "object");
    shouldBeNull("storage.getItem('foo')");

    debug("");
    evalAndLog("storage.foo1 = null");
    testKeyValue("foo1", "null");
    evalAndLog("storage['foo2'] = null");
    testKeyValue("foo2", "null");
    evalAndLog("storage.setItem('foo3', null)");
    testKeyValue("foo3", "null");

    debug("");
    evalAndLog("storage.foo4 = undefined");
    testKeyValue("foo4", "undefined");
    evalAndLog("storage['foo5'] = undefined");
    testKeyValue("foo5", "undefined");
    evalAndLog("storage.setItem('foo6', undefined)");
    testKeyValue("foo6", "undefined");

    debug("");
    evalAndLog("storage.foo7 = 2");
    testKeyValue("foo7", "2");
    evalAndLog("storage['foo8'] = 2");
    testKeyValue("foo8", "2");
    evalAndLog("storage.setItem('foo9', 2)");
    testKeyValue("foo9", "2");

    debug("");
    k = String.fromCharCode(255425) + String.fromCharCode(255) + String.fromCharCode(2554252321) + String.fromCharCode(0) + 'hello';
    evalAndLog("storage.foo10 = k");
    testKeyValue("foo10", k);
    evalAndLog("storage['foo11'] = k");
    testKeyValue("foo11", k);
    evalAndLog("storage.setItem('foo12', k)");
    testKeyValue("foo12", k);
}

test("sessionStorage");
debug("");
debug("");
test("localStorage");

window.successfullyParsed = true;
isSuccessfullyParsed();
</script>
</body>
</html>
