<html>
<body>
<p>Tests for <a href="https://bugs.webkit.org/show_bug.cgi?id=3812"> bug 3812</a> - 
GET and POST should not be the only HTTP methods implemented in XMLHttpRequest.</p>
<script>
    if (window.testRunner) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();
    }
    
    var console_messages = document.createElement("ol");
    document.body.appendChild(console_messages);
    
    function log(message)
    {
        var item = document.createElement("li");
        item.appendChild(document.createTextNode(message));
        console_messages.appendChild(item);
    }

    // async
    
    var asyncStep = 1;

    req = new XMLHttpRequest;
    req.onreadystatechange = processStateChange;
    req.open("GET", "methods.cgi", true);
    req.send("");

    function processStateChange() {
    
      if (req.readyState == 4){
        if (req.status == 200){
           if (asyncStep == 1) {
             asyncStep = 2;
             log('GET(""): ' + req.getResponseHeader("REQMETHOD") + "(" + req.getResponseHeader("REQLENGTH") + " bytes), Content-Type: " + req.getResponseHeader("REQTYPE"));
             req.open("GET", "methods.cgi", true);
             req.send(null);
           } else if (asyncStep == 2) {
             asyncStep = 3;
             log('GET(null): ' + req.getResponseHeader("REQMETHOD") + "(" + req.getResponseHeader("REQLENGTH") + " bytes), Content-Type: " + req.getResponseHeader("REQTYPE"));
             req.open("GET", "methods.cgi", true);
             req.send("123");
           } else if (asyncStep == 3) {
             asyncStep = 4;
             log('GET("123"): ' + req.getResponseHeader("REQMETHOD") + "(" + req.getResponseHeader("REQLENGTH") + " bytes), Content-Type: " + req.getResponseHeader("REQTYPE"));
             req.open("POST", "methods.cgi", true);
             req.send("");
           } else if (asyncStep == 4) {
             asyncStep = 5;
             log('POST(""): ' + req.getResponseHeader("REQMETHOD") + "(" + req.getResponseHeader("REQLENGTH") + " bytes), Content-Type: " + req.getResponseHeader("REQTYPE"));
             req.open("POST", "methods.cgi", true);
             req.send(null);
           } else if (asyncStep == 5) {
             asyncStep = 6;
             log('POST(null): ' + req.getResponseHeader("REQMETHOD") + "(" + req.getResponseHeader("REQLENGTH") + " bytes), Content-Type: " + req.getResponseHeader("REQTYPE"));
             req.open("POST", "methods.cgi", true);
             req.send("123");
           } else if (asyncStep == 6) {
             asyncStep = 7;
             log('POST("123"): ' + req.getResponseHeader("REQMETHOD") + "(" + req.getResponseHeader("REQLENGTH") + " bytes), Content-Type: " + req.getResponseHeader("REQTYPE"));
             req.open("PUT", "methods.cgi", true);
             req.send("");
           } else if (asyncStep == 7) {
             asyncStep = 8;
             log('PUT(""): ' + req.getResponseHeader("REQMETHOD") + "(" + req.getResponseHeader("REQLENGTH") + " bytes), Content-Type: " + req.getResponseHeader("REQTYPE"));
             req.open("PUT", "methods.cgi", true);
             req.send(null);
           } else if (asyncStep == 8) {
             asyncStep = 9;
             log('PUT(null): ' + req.getResponseHeader("REQMETHOD") + "(" + req.getResponseHeader("REQLENGTH") + " bytes), Content-Type: " + req.getResponseHeader("REQTYPE"));
             req.open("PUT", "methods.cgi", true);
             req.send("123");
           } else if (asyncStep == 9) {
             asyncStep = 10;
             log('PUT("123"): ' + req.getResponseHeader("REQMETHOD") + "(" + req.getResponseHeader("REQLENGTH") + " bytes), Content-Type: " + req.getResponseHeader("REQTYPE"));
             req.open("DELETE", "methods.cgi", true);
             req.send("");
           } else if (asyncStep == 10) {
             asyncStep = 11;
             log('DELETE(""): ' + req.getResponseHeader("REQMETHOD") + "(" + req.getResponseHeader("REQLENGTH") + " bytes), Content-Type: " + req.getResponseHeader("REQTYPE"));
             req.open("DELETE", "methods.cgi", true);
             req.send(null);
           } else if (asyncStep == 11) {
             asyncStep = 12;
             log('DELETE(null): ' + req.getResponseHeader("REQMETHOD") + "(" + req.getResponseHeader("REQLENGTH") + " bytes), Content-Type: " + req.getResponseHeader("REQTYPE"));
             req.open("DELETE", "methods.cgi", true);
             req.send("123");
           } else if (asyncStep == 12) {
             asyncStep = 13;
             log('DELETE("123"): ' + req.getResponseHeader("REQMETHOD") + "(" + req.getResponseHeader("REQLENGTH") + " bytes), Content-Type: " + req.getResponseHeader("REQTYPE"));
             req.open("HEAD", "methods.cgi", true);
             req.send("");
           } else if (asyncStep == 13) {
             asyncStep = 14;
             log('HEAD(""): ' + req.getResponseHeader("REQMETHOD") + "(" + req.getResponseHeader("REQLENGTH") + " bytes), Content-Type: " + req.getResponseHeader("REQTYPE"));
             req.open("HEAD", "methods.cgi", true);
             req.send(null);
           } else if (asyncStep == 14) {
             asyncStep = 15;
             log('HEAD(null): ' + req.getResponseHeader("REQMETHOD") + "(" + req.getResponseHeader("REQLENGTH") + " bytes), Content-Type: " + req.getResponseHeader("REQTYPE"));
             req.open("HEAD", "methods.cgi", true);
             req.send("123");
           } else if (asyncStep == 15) {
             asyncStep = 16;
             log('HEAD("123"): ' + req.getResponseHeader("REQMETHOD") + "(" + req.getResponseHeader("REQLENGTH") + " bytes), Content-Type: " + req.getResponseHeader("REQTYPE"));
             req.open("WKFOOBAR", "methods.cgi", true);
             req.send("");
           } else if (asyncStep == 16) {
             asyncStep = 17;
             log('WKFOOBAR(""): ' + req.getResponseHeader("REQMETHOD") + "(" + req.getResponseHeader("REQLENGTH") + " bytes), Content-Type: " + req.getResponseHeader("REQTYPE"));
             req.open("WKFOOBAR", "methods.cgi", true);
             req.send(null);
           } else if (asyncStep == 17) {
             asyncStep = 18;
             log('WKFOOBAR(null): ' + req.getResponseHeader("REQMETHOD") + "(" + req.getResponseHeader("REQLENGTH") + " bytes), Content-Type: " + req.getResponseHeader("REQTYPE"));
             req.open("WKFOOBAR", "methods.cgi", true);
             req.send("123");
           } else if (asyncStep == 18) {
             asyncStep = 19;
             log('WKFOOBAR("123"): ' + req.getResponseHeader("REQMETHOD") + "(" + req.getResponseHeader("REQLENGTH") + " bytes), Content-Type: " + req.getResponseHeader("REQTYPE"));
             req.open("SEARCH", "methods.cgi", true);
             req.send("");
           } else if (asyncStep == 19) {
             asyncStep = 20;
             log('SEARCH(""): ' + req.getResponseHeader("REQMETHOD") + "(" + req.getResponseHeader("REQLENGTH") + " bytes), Content-Type: " + req.getResponseHeader("REQTYPE"));
             req.open("SEARCH", "methods.cgi", true);
             req.send(null);
           } else if (asyncStep == 20) {
             asyncStep = 21;
             log('SEARCH(null): ' + req.getResponseHeader("REQMETHOD") + "(" + req.getResponseHeader("REQLENGTH") + " bytes), Content-Type: " + req.getResponseHeader("REQTYPE"));
             req.open("SEARCH", "methods.cgi", true);
             req.send("123");
           } else if (asyncStep == 21) {
             log('SEARCH("123"): ' + req.getResponseHeader("REQMETHOD") + "(" + req.getResponseHeader("REQLENGTH") + " bytes), Content-Type: " + req.getResponseHeader("REQTYPE"));
             if (window.testRunner)
               testRunner.notifyDone();
           }
        } else {
           log("Error loading URL: status " + req.status);
        }
      }
    }

</script>
</body>
</html>
