<!DOCTYPE html>
<html><head>
        <title>formaction on button element</title>
        <meta content="text/html; charset=UTF-8" http-equiv="content-type">
        <meta content="formaction on button element" name="description">
    <link href="https://html.spec.whatwg.org/multipage/#dom-fs-formaction" rel="help">
</head>
    <body>
        <script src="/resources/testharness.js"></script>
        <script src="/resources/testharnessreport.js"></script>

        <div id="log"></div>
        <button formaction="http://www.example.com/" style="display: none" type="submit">Submit</button>
        <input formaction="http://www.example.com/" style="display: none" type="submit" value="submit">
        <input style="display: none" type="submit" value="submit">
        <input formaction="" style="display: none" type="submit" value="submit">

        <script type="text/javascript">
        function relativeToAbsolute(relativeURL) {
          var a = document.createElement('a');
          a.href = relativeURL;
          return a.href;
        }
        test(function() {assert_equals(document.getElementsByTagName("button")[0].formAction, "http://www.example.com/")}, "formAction on button support");
        test(function() {assert_equals(document.getElementsByTagName("input")[0].formAction, "http://www.example.com/")}, "formAction on input support");

        var testElem = document.getElementsByTagName("input")[0];
        testElem.formAction = "http://www.example.com/page2.html";

        test(function() {assert_equals(document.getElementsByTagName("input")[0].formAction, "http://www.example.com/page2.html")}, "formaction absolute URL value on input reflects correct value after being updated by the DOM");
        test(function() {assert_equals(document.getElementsByTagName("input")[0].getAttribute("formaction"), "http://www.example.com/page2.html")}, "formAction absolute URL value is correct using getAttribute");

        var testElem = document.getElementsByTagName("input")[0];
        testElem.formAction = "../page3.html";

        test(function() {assert_equals(document.getElementsByTagName("input")[0].formAction, relativeToAbsolute('../page3.html'))}, "formAction relative URL value on input reflects correct value after being updated by the DOM");
        test(function() {assert_equals(document.getElementsByTagName("input")[0].getAttribute("formaction"), "../page3.html")}, "formAction relative URL value is correct using getAttribute");

        test(function() {assert_equals(document.getElementsByTagName("input")[1].formAction, document.URL)}, "On getting, when formaction is missing, the document's address must be returned");
        test(function() {assert_equals(document.getElementsByTagName("input")[2].formAction, document.URL)}, "On getting, when formaction value is the empty string, the document's address must be returned");
        </script>
</body></html>
