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

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

function log(a)
{
    document.getElementById("logger").innerHTML += a + "<br>";
}

function runTest()
{
    if (!window.sessionStorage) {
        log("window.sessionStorage DOES NOT exist");
        return;
    }
    
    log("Length is " + window.sessionStorage.length);
    log("Value for FOO is " + window.sessionStorage.getItem("FOO"));

    window.sessionStorage.setItem("FOO", "BAR");
    
    log("Length is " + window.sessionStorage.length);
    log("Value for FOO is " + window.sessionStorage.getItem("FOO"));
    log("Key for index 0 is " + window.sessionStorage.key(0));
    log("Key for index 1 is " + window.sessionStorage.key(1));
    log("Key for index -1 is " + window.sessionStorage.key(-1));
    
    window.sessionStorage.setItem("FOO", "BAZ");
    
    log("Length is " + window.sessionStorage.length);
    log("Value for FOO is " + window.sessionStorage.getItem("FOO"));
    
    window.sessionStorage.removeItem("FOO");
    
    log("Length is " + window.sessionStorage.length);
    log("Value for FOO is " + window.sessionStorage.getItem("FOO"));
}

</script>
</head>
<body onload="runTest();">
This test trys simple operations on SessionStorage<br>
<div id="logger"></div>
</body>
</html>
