<!DOCTYPE HTML>
<html>
<head>
<title>WebStorage Test: Storage - enumerate and built-in properties</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<div id="log"></div>
<script>
["localStorage", "sessionStorage"].forEach(function(name) {
    test(function() {
        assert_true(name in window, name + " exist");

        var storage = window[name];
        storage.clear();

        Storage.prototype.prototypeTestKey = "prototypeTestValue";
        storage.foo = "bar";
        storage.fu = "baz";
        storage.batman = "bin suparman";
        storage.bar = "foo";
        storage.alpha = "beta";
        storage.zeta = "gamma";

        var enumeratedArray = new Array();
        for (var n in storage)
            enumeratedArray.push(n);

        // Sort the array, since the storage order isn't guaranteed
        enumeratedArray.sort();

        var expectArray = ["alpha", "bar", "batman", "foo", "fu", "prototypeTestKey", "zeta"];
        assert_array_equals(enumeratedArray, expectArray);

    }, name + ": enumerate a Storage object and get only the keys as a result and the built-in properties of the Storage object should be ignored");
});
</script>
</body>
</html>

