<!DOCTYPE HTML>
<meta charset=utf-8>
<title>WebStorage Test: Storage - setItem(key, value)</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
["localStorage", "sessionStorage"].forEach(function(name) {
    var test_error = { name: "test" };

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

        storage.setItem("name", "user1");
        assert_equals(storage.length, 1, "localStorage.setItem")
    }, name + ".setItem()");

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

        storage["name"] = "user1";
        assert_true("name" in storage);
        assert_equals(storage.length, 1, "storage.length")
        assert_equals(storage.getItem("name"), "user1");
        assert_equals(storage["name"], "user1");
    }, name + "[]");

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

        storage["name"] = "user1";
        storage["name"] = "user2";
        assert_true("name" in storage);
        assert_equals(storage.length, 1, "storage.length")
        assert_equals(storage.getItem("name"), "user2");
        assert_equals(storage["name"], "user2");
    }, name + "[] update");

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

        storage.setItem("age", null);
        assert_true("age" in storage);
        assert_equals(storage.length, 1, "storage.length")
        assert_equals(storage.getItem("age"), "null");
        assert_equals(storage["age"], "null");
    }, name + ".setItem(_, null)");

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

        storage["age"] = null;
        assert_true("age" in storage);
        assert_equals(storage.length, 1, "storage.length")
        assert_equals(storage.getItem("age"), "null");
        assert_equals(storage["age"], "null");
    }, name + "[] = null");

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

        storage.setItem("age", undefined);
        assert_true("age" in storage);
        assert_equals(storage.length, 1, "storage.length")
        assert_equals(storage.getItem("age"), "undefined");
        assert_equals(storage["age"], "undefined");
    }, name + ".setItem(_, undefined)");

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

        storage["age"] = undefined;
        assert_true("age" in storage);
        assert_equals(storage.length, 1, "storage.length")
        assert_equals(storage.getItem("age"), "undefined");
        assert_equals(storage["age"], "undefined");
    }, name + "[] = undefined");

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

        storage.setItem("age", "10");
        assert_throws(test_error, function() {
            storage.setItem("age",
                { toString: function() { throw test_error; } });
        });
        assert_true("age" in storage);
        assert_equals(storage.length, 1, "storage.length")
        assert_equals(storage.getItem("age"), "10");
        assert_equals(storage["age"], "10");
    }, name + ".setItem({ throws })");

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

        storage.setItem("age", "10");
        assert_throws(test_error, function() {
            storage["age"] =
                { toString: function() { throw test_error; } };
        });
        assert_true("age" in storage);
        assert_equals(storage.length, 1, "storage.length")
        assert_equals(storage.getItem("age"), "10");
        assert_equals(storage["age"], "10");
    }, name + "[] = { throws }");

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

        storage.setItem(undefined, "test");
        assert_true("undefined" in storage);
        assert_equals(storage.length, 1, "storage.length")
        assert_equals(storage.getItem("undefined"), "test");
        assert_equals(storage["undefined"], "test");
    }, name + ".setItem(undefined, _)");

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

        storage[undefined] = "test2";
        assert_true("undefined" in storage);
        assert_equals(storage.length, 1, "storage.length")
        assert_equals(storage.getItem("undefined"), "test2");
        assert_equals(storage["undefined"], "test2");
    }, name + "[undefined]");

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

        storage.setItem(null, "test");
        assert_true("null" in storage);
        assert_equals(storage.length, 1, "storage.length")
        assert_equals(storage.getItem("null"), "test");
        assert_equals(storage["null"], "test");
    }, name + ".setItem(null, _)");

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

        storage[null] = "test2";
        assert_true("null" in storage);
        assert_equals(storage.length, 1, "storage.length")
        assert_equals(storage.getItem("null"), "test2");
        assert_equals(storage["null"], "test2");
    }, name + "[null]");
});
</script>
