| <!DOCTYPE html> |
| <meta charset=utf-8> |
| <title>CORS - status</title> |
| <meta name=author title="Odin Hørthe Omdal" href="mailto:odiho@opera.com"> |
| <meta name=timeout content=long> |
| |
| <script src=/resources/testharness.js></script> |
| <script src=/resources/testharnessreport.js></script> |
| <script src=support.js?pipe=sub></script> |
| |
| <h1>Status returned</h1> |
| |
| <div id=log></div> |
| <script> |
| |
| function statusRequest(method, code, text, content, type) { |
| async_test("Status on " + method + " " + code, { timeout: 15000 }) |
| .step(function() { |
| var client = new XMLHttpRequest() |
| client.open(method, CROSSDOMAIN + "resources/status.py?code=" |
| + code + "&text=" + text + "&content=" + content + "&type=" + type, true) |
| client.onreadystatechange = this.step_func(function() { |
| if (client.readyState != client.DONE) |
| return |
| |
| assert_equals(client.status, code, 'response status') |
| assert_equals(client.statusText, text, 'response status text') |
| assert_equals(client.getResponseHeader("X-Request-Method"), method, 'method') |
| if(method != "HEAD") { |
| if(type == "text/xml") { |
| assert_equals(client.responseXML.documentElement.localName, |
| "x", 'responseXML') |
| } |
| assert_equals(client.response, content, 'response content') |
| } |
| this.done() |
| }) |
| |
| client.send(null) |
| }) |
| } |
| |
| /* method code text content type */ |
| statusRequest("GET", 200, 'OK', 'Not today.', '') |
| statusRequest("GET", 201, 'OK/Created', 'Not today 01.', '') |
| statusRequest("GET", 202, 'OK/Accepted', 'Not today 02.', '') |
| statusRequest("GET", 203, 'OK/Non-Authoritative Information', 'Not today 03.', '') |
| statusRequest("GET", 204, 'OK/No Content', '', '') // specifically no-content |
| statusRequest("GET", 205, 'OK/Reset Content', '', '') // specifically no-content |
| statusRequest("GET", 206, 'OK/Partial Content', 'Not today 06.', '') |
| statusRequest("GET", 209, 'OK', 'Not today 09.', '') |
| statusRequest("GET", 299, 'OK', 'Not today 99.', '') |
| statusRequest("POST", 200, 'OK', '<x>402<\/x>', 'text/xml') |
| statusRequest("HEAD", 200, 'OK', 'Nice!', 'text/doesnotmatter') |
| statusRequest("PUT", 200, 'OK', '400', 'text/plain') |
| // Any strange request method raises starboard error before sending request |
| // statusRequest("CHICKEN", 200, 'OK', 'bah', '') |
| |
| |
| function statusRequestFail(method, code, expect_code, nonsimple) { |
| if (expect_code === undefined) |
| expect_code = code |
| |
| async_test("Status on " + method + " " + code + (nonsimple?' (nonsimple)':''), { timeout: 15000 }) |
| .step(function() { |
| var client = new XMLHttpRequest() |
| |
| client.open(method, CROSSDOMAIN + "resources/status.py?code=" |
| + code + '&headers=x-nonsimple&text=OHAI', true) |
| |
| if (nonsimple) |
| client.setRequestHeader('x-nonsimple', true) |
| |
| client.onreadystatechange = this.step_func(function() { |
| if (client.readyState < client.HEADERS_RECEIVED) |
| return |
| assert_equals(client.response, "", "response data") |
| assert_equals(client.status, expect_code, "response status") |
| /* Response code 200 forces webserver to send OK(?) */ |
| if(expect_code == 200) |
| assert_equals(client.statusText, "OK", "response statusText") |
| else |
| assert_equals(client.statusText, (expect_code == 0 ? "" : "OHAI"), "response statusText") |
| if (client.readyState == client.DONE) |
| this.done() |
| }) |
| |
| client.onerror = this.step_func(function(e) { |
| assert_unreached("Got error event.") |
| }) |
| |
| client.send() |
| }) |
| } |
| |
| /* expect |
| method code status */ |
| statusRequestFail("GET", 400) |
| statusRequestFail("HEAD", 401) |
| statusRequestFail("POST", 404) |
| statusRequestFail("POST", 500) |
| |
| /* Preflight response status is not 200, so the algorithm set status to 0. */ |
| statusRequestFail("PUT", 699, 0) |
| // statusRequestFail("CHICKEN", 501, 0) |
| |
| /* "forced" |
| preflight */ |
| statusRequestFail("GET", 400, 0, true) |
| statusRequestFail("HEAD", 401, 0, true) |
| statusRequestFail("POST", 404, 0, true) |
| statusRequestFail("PUT", 699, 0, true) |
| // statusRequestFail("CHICKEN", 501, 0, true) |
| |
| </script> |