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

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

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

function runTest()
{
    if (!window.localStorage) {
        log("window.localStorage DOES NOT exist");
        return;
    }

    log("Length is " + localStorage.length);

    log("Testing implicit setters");
    localStorage.a = null;
    log("Type/value for null is " + typeof localStorage.a + "/" + localStorage.a);
    localStorage.b = 0;
    log("Type/value for 0 is " + typeof localStorage.b + "/" + localStorage.b);
    localStorage.c = function(){};
    log("Type/value for function(){} is " + typeof localStorage.c + "/" + localStorage.c);

    log("Testing explicit setters");
    localStorage.setItem('d', null);
    log("Type/value for null is " + typeof localStorage.d + "/" + localStorage.d);
    localStorage.setItem('e', 0);
    log("Type/value for 0 is " + typeof localStorage.e + "/" + localStorage.e);
    localStorage.setItem('f', function(){});
    log("Type/value for function(){} is " + typeof localStorage.f + "/" + localStorage.f);

    log("Testing index setters");
    localStorage['g'] = null;
    log("Type/value for null is " + typeof localStorage.g + "/" + localStorage.g);
    localStorage['h'] = 0;
    log("Type/value for 0 is " + typeof localStorage.h + "/" + localStorage.h);
    localStorage['i'] = function(){};
    log("Type/value for function(){} is " + typeof localStorage.i + "/" + localStorage.i);
}

</script>
</head>
<body onload="runTest();">
This test case verifies that local storage only stores strings.
<div id="logger"></div>
</body>
</html>
