<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="../../../resources/js-test-pre.js"></script>
</head>
<body onload="runTests()">
<script>

description("Tests for <a href=\"https://bugs.webkit.org/show_bug.cgi?id=14439\"> \
bug 14439</a>. Button type should be set using el.type.");

var didSubmit = false;
var btn;
var txt;

function testTypeValue()
{
    btn = document.getElementById("b");

    shouldBe("btn.type = 'submit'; btn.type", "'submit'");
    shouldBe("btn.getAttribute('type')", "'submit'");
    
    shouldBe("btn.type = 'reset'; btn.type", "'reset'");
    shouldBe("btn.getAttribute('type')", "'reset'");
    
    shouldBe("btn.type = 'button'; btn.type", "'button'");
    shouldBe("btn.getAttribute('type')", "'button'");
    
    shouldBe("btn.type = 'reset'; btn.type", "'reset'");
    shouldBe("btn.getAttribute('type')", "'reset'");
    
    shouldBe("btn.type = 'suBmiT'; btn.type", "'submit'");
    shouldBe("btn.getAttribute('type')", "'suBmiT'");
    
    shouldBe("btn.type = ''; btn.type", "'submit'");
    shouldBe("btn.getAttribute('type')", "''");
    
    shouldBe("btn.type = 'b'; btn.type", "'submit'");
    shouldBe("btn.getAttribute('type')", "'b'");
    
    shouldBe("btn.type = 'RESET'; btn.type", "'reset'");
    shouldBe("btn.getAttribute('type')", "'RESET'");
    
    shouldBe("btn.type = ''; btn.type", "'submit'");
    shouldBe("btn.getAttribute('type')", "''");
    
    shouldBe("btn.type = '/'; btn.type", "'submit'");
    shouldBe("btn.getAttribute('type')", "'/'");
    
    shouldBe("btn.type = ' '; btn.type", "'submit'");
    shouldBe("btn.getAttribute('type')", "' '");
    
    shouldBe("btn.type = 'button '; btn.type", "'submit'");
    shouldBe("btn.getAttribute('type')", "'button '");
    
    shouldBe("btn.type = ' b u t t o n '; btn.type", "'submit'");
    shouldBe("btn.getAttribute('type')", "' b u t t o n '");
    
    shouldBe("btn.type = null; btn.type", "'submit'");
    shouldBeEqualToString("btn.getAttribute('type')", "null");
    
    shouldBe("btn.type = undefined; btn.type", "'submit'");
    shouldBe("btn.getAttribute('type')", "'undefined'");
}

function testTypeBehavior()
{
    btn = document.getElementById("b");
    txt = document.getElementById("t");

    btn.type = "submit";
    txt.value = "hello";

    shouldBe("btn.type = 'reset'; txt.value = 'hello'; btn.click(); txt.value", "''");
    shouldBe("didSubmit", "false");
    shouldBe("btn.type = 'button'; txt.value = 'hello'; btn.click(); txt.value", "'hello'");
}

function testSubmitBehavior()
{
    shouldBe("btn.type = 'submit'; btn.click(); didSubmit", "true");
    didSubmit = false;
    txt.value = "";
}

function formWasSubmitted()
{
    didSubmit = true;
}

function runTests()
{
    testTypeValue();
    testTypeBehavior();
    testSubmitBehavior();
    
    wasPostTestScriptParsed = true;

    if (window.jsTestIsAsync) {
        if (window.testRunner)
            testRunner.waitUntilDone();
        if (window.wasFinishJSTestCalled)
            finishJSTest();
    } else
        finishJSTest();
    }
</script>
<form id="f" action="#submitted" onsubmit="formWasSubmitted();">
  <input id="t" type="text" />
  <button id="b"></button>
</form>
</body>
</html>
