<html>
<head>
<script src="resources/clearSessionStorage.js"></script>
<script>

if (window.layoutTestController)
    layoutTestController.dumpAsText();

function log(a)
{
    document.getElementById('logger').appendChild(document.createTextNode(a));
    document.getElementById('logger').appendChild(document.createElement("br"));
}

function runTest()
{
    if (!window.sessionStorage) {
        log("window.sessionStorage DOES NOT exist");
        return;
    }
    
    log("foo (before anything) is: " + sessionStorage.foo);
    sessionStorage.foo = "bar";
    log("foo (after a named property setter set) is: " + sessionStorage.foo);
    delete sessionStorage.foo;
    log("foo (after a delete) is: " + sessionStorage.foo);
    sessionStorage["foo"] = "bar";
    log("foo (after an indexed setter set) is: " + sessionStorage.foo);
    delete sessionStorage.FOO;
    log("foo (after deleting FOO (not foo)) is : " + sessionStorage.foo);
    delete sessionStorage.foo;
    log("foo (after a delete) is: " + sessionStorage.foo);
    sessionStorage.setItem("foo", "bar");
    log("foo (after calling setItem) is: " + sessionStorage.foo);
    delete sessionStorage.foo;
    log("foo (after a delete) is: " + sessionStorage.foo);
    delete sessionStorage.foo;
    log("foo (after a redundant delete) is: " + sessionStorage.foo);
    sessionStorage.foo = "bar";
    log("foo (after a named property setter set) is: " + sessionStorage.foo);
    delete sessionStorage["foo"];
    log("foo (after an indexed delete) is: " + sessionStorage.foo);
}

</script>
</head>
<body onload="runTest();">
This test makes sure that using the syntax `delete sessionStorage.keyName` works as an alias to `sessionStorage.removeItem(keyName).`<br><hr>
<div id="logger"></div>
</body>
</html>
