<html>
<head>
<script src="../../resources/js-test.js"></script>
<script>
    if (window.testRunner)
        testRunner.waitUntilDone();
</script>
</head>
<body>
<p id="description">
This test checks that an attribute is not removed when set to the initial value of an &lt;input&gt; tag
using <span style="font-family: monospace;">setAttribute()</span>.
If the test passes, you will see a list of <span class="pass" style="font-family: monospace;">PASS</span>
lines below, followed by <span class="pass" style="font-family: monospace;">TEST COMPLETE</span>.
See <a href="https://bugs.webkit.org/show_bug.cgi?id=4059">Bugzilla Bug 4059</a>
Some values used with setAttribute() cause the attribute to be removed (null strings vs. empty strings).
</p>
<div id="console"></div>
<input id="textInput" startval="" style="">
<script>
    var elem = document.getElementById("textInput");

    shouldBe("elem.value", "''");

    debug("<br>Before calling setAttribute(\"startval\", elem.value):<br>");
    shouldBe("elem.getAttribute('startval')", "''");

    elem.setAttribute("startval", elem.value);

    debug("<br>After calling setAttribute(\"startval\", elem.value):<br>");
    shouldBe("elem.getAttribute('startval')", "''");

    debug("<br>Before calling setAttribute(\"style\", elem.value):<br>");
    shouldBe("elem.getAttribute('style')", "''");

    elem.setAttribute("style", elem.value);

    debug("<br>After calling setAttribute(\"style\", elem.value):<br>");
    shouldBe("elem.getAttribute('style')", "''");
    debug("");
</script>
<script>
    elem.style.display = "none";
    if (window.testRunner)
        testRunner.notifyDone();
</script>
</body>
</html>
