<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../fast/js/resources/js-test-pre.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<form method="get" action="?">
    <input type="hidden" name="hidden" value="I am hidden" />
    <button id="button" formmethod="post" type="submit" name="button" value="value" />
</form>
<script>
description("Test for the formmethod attribute in button tags.");
if (window.layoutTestController) {
    layoutTestController.waitUntilDone();
}

var button = document.getElementById('button');

if (document.URL.substring(0, 4) == "file") {
    if (document.URL.indexOf('?') == -1) {
        button.click();
    } else {
        if (document.URL.substring(document.URL.indexOf('?') + 1, document.URL.length) == "")
            testPassed('The formmethod attribute was successfully used');
        else
            testFailed('The formmethod attribute was not used');

        if (window.layoutTestController)
            layoutTestController.notifyDone();
    }
}
</script>
<script src="../../fast/js/resources/js-test-post.js"></script>
</body>
</html>
