gecko-dev/dom/xhr/tests/test_XHR.html

386 строки
12 KiB
HTML
Исходник Обычный вид История

<!DOCTYPE HTML>
<html>
<head>
<title>Test for XMLHttpRequest</title>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
2011-12-08 17:55:20 +04:00
<body onload="gen.next();">
<p id="display"></p>
<div id="content" style="display: none">
</div>
<pre id="test">
<script class="testbody" type="application/javascript">
"use strict";
SimpleTest.waitForExplicitFinish();
2011-12-08 17:55:20 +04:00
var gen = runTests();
function continueTest() { gen.next(); }
function* runTests() {
2011-12-08 17:55:20 +04:00
Bug 1269162 - part 3 - Move XHR code into dom/xhr, r=smaug --HG-- rename : dom/workers/XMLHttpRequestUploadWorker.cpp => dom/xhr/XMLHttpRequestUploadWorker.cpp rename : dom/workers/XMLHttpRequestUploadWorker.h => dom/xhr/XMLHttpRequestUploadWorker.h rename : dom/workers/XMLHttpRequestWorker.cpp => dom/xhr/XMLHttpRequestWorker.cpp rename : dom/workers/XMLHttpRequestWorker.h => dom/xhr/XMLHttpRequestWorker.h rename : dom/base/nsIXMLHttpRequest.idl => dom/xhr/nsIXMLHttpRequest.idl rename : dom/base/nsXMLHttpRequest.cpp => dom/xhr/nsXMLHttpRequest.cpp rename : dom/base/nsXMLHttpRequest.h => dom/xhr/nsXMLHttpRequest.h rename : dom/base/test/echo.sjs => dom/xhr/tests/echo.sjs rename : dom/base/test/file_XHRDocURI.html => dom/xhr/tests/file_XHRDocURI.html rename : dom/base/test/file_XHRDocURI.html^headers^ => dom/xhr/tests/file_XHRDocURI.html^headers^ rename : dom/base/test/file_XHRDocURI.sjs => dom/xhr/tests/file_XHRDocURI.sjs rename : dom/base/test/file_XHRDocURI.text => dom/xhr/tests/file_XHRDocURI.text rename : dom/base/test/file_XHRDocURI.text^headers^ => dom/xhr/tests/file_XHRDocURI.text^headers^ rename : dom/base/test/file_XHRDocURI.xml => dom/xhr/tests/file_XHRDocURI.xml rename : dom/base/test/file_XHRDocURI.xml^headers^ => dom/xhr/tests/file_XHRDocURI.xml^headers^ rename : dom/base/test/file_XHRResponseURL.js => dom/xhr/tests/file_XHRResponseURL.js rename : dom/base/test/file_XHRResponseURL.sjs => dom/xhr/tests/file_XHRResponseURL.sjs rename : dom/base/test/file_XHRResponseURL.text => dom/xhr/tests/file_XHRResponseURL.text rename : dom/base/test/file_XHRResponseURL.text^headers^ => dom/xhr/tests/file_XHRResponseURL.text^headers^ rename : dom/base/test/file_XHRResponseURL_nocors.text => dom/xhr/tests/file_XHRResponseURL_nocors.text rename : dom/base/test/file_XHRSendData.sjs => dom/xhr/tests/file_XHRSendData.sjs rename : dom/base/test/file_XHRSendData_doc.xml => dom/xhr/tests/file_XHRSendData_doc.xml rename : dom/base/test/file_XHRSendData_doc.xml^headers^ => dom/xhr/tests/file_XHRSendData_doc.xml^headers^ rename : dom/base/test/file_XHR_anon.sjs => dom/xhr/tests/file_XHR_anon.sjs rename : dom/base/test/file_XHR_binary1.bin => dom/xhr/tests/file_XHR_binary1.bin rename : dom/base/test/file_XHR_binary1.bin^headers^ => dom/xhr/tests/file_XHR_binary1.bin^headers^ rename : dom/base/test/file_XHR_binary2.bin => dom/xhr/tests/file_XHR_binary2.bin rename : dom/base/test/file_XHR_fail1.txt => dom/xhr/tests/file_XHR_fail1.txt rename : dom/base/test/file_XHR_fail1.txt^headers^ => dom/xhr/tests/file_XHR_fail1.txt^headers^ rename : dom/base/test/file_XHR_fail1b.txt => dom/xhr/tests/file_XHR_fail1b.txt rename : dom/base/test/file_XHR_header.sjs => dom/xhr/tests/file_XHR_header.sjs rename : dom/base/test/file_XHR_pass1.xml => dom/xhr/tests/file_XHR_pass1.xml rename : dom/base/test/file_XHR_pass2.txt => dom/xhr/tests/file_XHR_pass2.txt rename : dom/base/test/file_XHR_pass3.txt => dom/xhr/tests/file_XHR_pass3.txt rename : dom/base/test/file_XHR_pass3.txt^headers^ => dom/xhr/tests/file_XHR_pass3.txt^headers^ rename : dom/base/test/file_XHR_system_redirect.html => dom/xhr/tests/file_XHR_system_redirect.html rename : dom/base/test/file_XHR_system_redirect.html^headers^ => dom/xhr/tests/file_XHR_system_redirect.html^headers^ rename : dom/base/test/file_XHR_timeout.sjs => dom/xhr/tests/file_XHR_timeout.sjs rename : dom/base/test/file_html_in_xhr.html => dom/xhr/tests/file_html_in_xhr.html rename : dom/base/test/file_html_in_xhr.sjs => dom/xhr/tests/file_html_in_xhr.sjs rename : dom/base/test/file_html_in_xhr2.html => dom/xhr/tests/file_html_in_xhr2.html rename : dom/base/test/file_html_in_xhr3.html => dom/xhr/tests/file_html_in_xhr3.html rename : dom/base/test/progressserver.sjs => dom/xhr/tests/progressserver.sjs rename : dom/workers/test/relativeLoad_import.js => dom/xhr/tests/relativeLoad_import.js rename : dom/workers/test/relativeLoad_worker.js => dom/xhr/tests/relativeLoad_worker.js rename : dom/workers/test/relativeLoad_worker2.js => dom/xhr/tests/relativeLoad_worker2.js rename : dom/base/test/responseIdentical.sjs => dom/xhr/tests/responseIdentical.sjs rename : dom/workers/test/subdir/relativeLoad_sub_import.js => dom/xhr/tests/subdir/relativeLoad_sub_import.js rename : dom/workers/test/subdir/relativeLoad_sub_worker.js => dom/xhr/tests/subdir/relativeLoad_sub_worker.js rename : dom/workers/test/subdir/relativeLoad_sub_worker2.js => dom/xhr/tests/subdir/relativeLoad_sub_worker2.js rename : dom/workers/test/terminateSyncXHR_worker.js => dom/xhr/tests/terminateSyncXHR_worker.js rename : dom/base/test/test_XHR.html => dom/xhr/tests/test_XHR.html rename : dom/base/test/test_XHRDocURI.html => dom/xhr/tests/test_XHRDocURI.html rename : dom/base/test/test_XHRResponseURL.html => dom/xhr/tests/test_XHRResponseURL.html rename : dom/base/test/test_XHRSendData.html => dom/xhr/tests/test_XHRSendData.html rename : dom/base/test/test_XHR_anon.html => dom/xhr/tests/test_XHR_anon.html rename : dom/base/test/test_XHR_header.html => dom/xhr/tests/test_XHR_header.html rename : dom/base/test/test_XHR_onuploadprogress.html => dom/xhr/tests/test_XHR_onuploadprogress.html rename : dom/base/test/test_XHR_parameters.html => dom/xhr/tests/test_XHR_parameters.html rename : dom/base/test/test_XHR_system.html => dom/xhr/tests/test_XHR_system.html rename : dom/base/test/test_XHR_timeout.html => dom/xhr/tests/test_XHR_timeout.html rename : dom/base/test/test_XHR_timeout.js => dom/xhr/tests/test_XHR_timeout.js rename : dom/base/test/test_html_in_xhr.html => dom/xhr/tests/test_html_in_xhr.html rename : dom/workers/test/test_relativeLoad.html => dom/xhr/tests/test_relativeLoad.html rename : dom/base/test/test_sync_xhr_timer.xhtml => dom/xhr/tests/test_sync_xhr_timer.xhtml rename : dom/workers/test/test_terminateSyncXHR.html => dom/xhr/tests/test_worker_terminateSyncXHR.html rename : dom/workers/test/test_xhr.html => dom/xhr/tests/test_worker_xhr.html rename : dom/workers/test/test_xhr2.html => dom/xhr/tests/test_worker_xhr2.html rename : dom/workers/test/test_xhrAbort.html => dom/xhr/tests/test_worker_xhrAbort.html rename : dom/workers/test/test_xhr_3rdparty.html => dom/xhr/tests/test_worker_xhr_3rdparty.html rename : dom/workers/test/test_xhr_cors_redirect.html => dom/xhr/tests/test_worker_xhr_cors_redirect.html rename : dom/workers/test/test_xhr_headers.html => dom/xhr/tests/test_worker_xhr_headers.html rename : dom/workers/test/test_xhr_implicit_cancel.html => dom/xhr/tests/test_worker_xhr_implicit_cancel.html rename : dom/workers/test/test_xhr_parameters.html => dom/xhr/tests/test_worker_xhr_parameters.html rename : dom/workers/test/test_xhr_parameters.js => dom/xhr/tests/test_worker_xhr_parameters.js rename : dom/workers/test/test_xhr_responseURL.html => dom/xhr/tests/test_worker_xhr_responseURL.html rename : dom/workers/test/test_xhr_system.html => dom/xhr/tests/test_worker_xhr_system.html rename : dom/workers/test/test_xhr_system.js => dom/xhr/tests/test_worker_xhr_system.js rename : dom/workers/test/test_xhr_timeout.html => dom/xhr/tests/test_worker_xhr_timeout.html rename : dom/base/test/test_xhr_abort_after_load.html => dom/xhr/tests/test_xhr_abort_after_load.html rename : dom/base/test/test_xhr_forbidden_headers.html => dom/xhr/tests/test_xhr_forbidden_headers.html rename : dom/base/test/test_xhr_overridemimetype_throws_on_invalid_state.html => dom/xhr/tests/test_xhr_overridemimetype_throws_on_invalid_state.html rename : dom/base/test/test_xhr_progressevents.html => dom/xhr/tests/test_xhr_progressevents.html rename : dom/base/test/test_xhr_send.html => dom/xhr/tests/test_xhr_send.html rename : dom/base/test/test_xhr_send_readystate.html => dom/xhr/tests/test_xhr_send_readystate.html rename : dom/base/test/test_xhr_withCredentials.html => dom/xhr/tests/test_xhr_withCredentials.html rename : dom/workers/test/file_getcookie.sjs => dom/xhr/tests/worker_file_getcookie.sjs rename : dom/workers/test/terminateSyncXHR_frame.html => dom/xhr/tests/worker_terminateSyncXHR_frame.html rename : dom/workers/test/testXHR.txt => dom/xhr/tests/worker_testXHR.txt rename : dom/workers/test/xhr_cors_redirect.js => dom/xhr/tests/worker_xhr_cors_redirect.js rename : dom/workers/test/xhr_cors_redirect.sjs => dom/xhr/tests/worker_xhr_cors_redirect.sjs rename : dom/workers/test/xhr_headers_server.sjs => dom/xhr/tests/worker_xhr_headers_server.sjs rename : dom/workers/test/xhr_headers_worker.js => dom/xhr/tests/worker_xhr_headers_worker.js rename : dom/workers/test/xhr2_worker.js => dom/xhr/tests/xhr2_worker.js rename : dom/workers/test/xhrAbort_worker.js => dom/xhr/tests/xhrAbort_worker.js rename : dom/workers/test/xhr_implicit_cancel_worker.js => dom/xhr/tests/xhr_implicit_cancel_worker.js rename : dom/workers/test/xhr_worker.js => dom/xhr/tests/xhr_worker.js
2016-06-27 20:13:40 +03:00
var path = "/tests/dom/xhr/tests/";
var passFiles = [['file_XHR_pass1.xml', 'GET', 200, 'OK', 'text/xml'],
['file_XHR_pass2.txt', 'GET', 200, 'OK', 'text/plain'],
['file_XHR_pass3.txt', 'GET', 200, 'OK', 'text/plain'],
['data:text/xml,%3Cres%3Ehello%3C/res%3E%0A', 'GET', 200, 'OK', 'text/xml'],
['data:text/plain,hello%20pass%0A', 'GET', 200, 'OK', 'text/plain'],
['data:,foo', 'GET', 200, 'OK', 'text/plain;charset=US-ASCII', 'foo'],
['data:text/plain;base64,Zm9v', 'GET', 200, 'OK', 'text/plain', 'foo'],
['data:text/plain,foo#bar', 'GET', 200, 'OK', 'text/plain', 'foo'],
['data:text/plain,foo%23bar', 'GET', 200, 'OK', 'text/plain', 'foo#bar'],
];
var blob = new Blob(["foo"], { type: "text/plain" });
var blobURL = URL.createObjectURL(blob);
passFiles.push([blobURL, 'GET', 200, 'OK', 'text/plain', 'foo']);
var failFiles = [['//example.com' + path + 'file_XHR_pass1.xml', 'GET'],
['ftp://localhost' + path + 'file_XHR_pass1.xml', 'GET'],
['file_XHR_fail1.txt', 'GET'],
];
for (i = 0; i < passFiles.length; ++i) {
// Function to give our hacked is() a scope
(function(oldIs) {
function is(actual, expected, message) {
oldIs(actual, expected, message + " for " + passFiles[i][0]);
}
xhr = new XMLHttpRequest();
is(xhr.getResponseHeader("Content-Type"), null, "should be null");
is(xhr.getAllResponseHeaders(), "", "should be empty string");
is(xhr.responseType, "", "wrong initial responseType");
xhr.open(passFiles[i][1], passFiles[i][0], false);
xhr.send(null);
is(xhr.status, passFiles[i][2], "wrong status");
is(xhr.statusText, passFiles[i][3], "wrong statusText");
is(xhr.getResponseHeader("Content-Type"), passFiles[i][4], "wrong content type");
var headers = xhr.getAllResponseHeaders();
ok(/(?:^|\n)Content-Type:\s*([^\r\n]*)\r\n/i.test(headers) &&
RegExp.$1 === passFiles[i][4], "wrong response headers");
if (xhr.responseXML) {
is((new XMLSerializer()).serializeToString(xhr.responseXML.documentElement),
passFiles[i][5] || "<res>hello</res>", "wrong responseXML");
is(xhr.response, passFiles[i][5] || "<res>hello</res>\n", "wrong response");
}
else {
is(xhr.responseText, passFiles[i][5] || "hello pass\n", "wrong responseText");
is(xhr.response, passFiles[i][5] || "hello pass\n", "wrong response");
}
})(is);
}
URL.revokeObjectURL(blobURL);
for (i = 0; i < failFiles.length; ++i) {
xhr = new XMLHttpRequest();
var didthrow = false;
try {
xhr.open(failFiles[i][1], failFiles[i][0], false);
xhr.send(null);
}
catch (e) {
didthrow = true;
}
if (!didthrow) {
is(xhr.status, 301, "wrong status");
is(xhr.responseText, "redirect file\n", "wrong response");
}
else {
ok(1, "should have thrown or given incorrect result");
}
}
function checkResponseTextAccessThrows(xhr) {
var didthrow = false;
try { xhr.responseText } catch (e) { didthrow = true; }
ok(didthrow, "should have thrown when accessing responseText");
}
function checkResponseXMLAccessThrows(xhr) {
var didthrow = false;
try { xhr.responseXML } catch (e) { didthrow = true; }
ok(didthrow, "should have thrown when accessing responseXML");
}
function checkSetResponseType(xhr, type) {
var didthrow = false;
try { xhr.responseType = type; } catch (e) { didthrow = true; }
is(xhr.responseType, type, "responseType should be " + type);
ok(!didthrow, "should not have thrown when setting responseType");
}
function checkSetResponseTypeThrows(xhr, type) {
var didthrow = false;
try { xhr.responseType = type; } catch (e) { didthrow = true; }
ok(didthrow, "should have thrown when setting responseType");
}
2011-12-08 17:55:20 +04:00
function checkOpenThrows(xhr, method, url, async) {
var didthrow = false;
try { xhr.open(method, url, async); } catch (e) { didthrow = true; }
ok(didthrow, "should have thrown when open is called");
}
// test if setting responseType before calling open() works
xhr = new XMLHttpRequest();
checkSetResponseType(xhr, "");
checkSetResponseType(xhr, "text");
checkSetResponseType(xhr, "document");
checkSetResponseType(xhr, "arraybuffer");
checkSetResponseType(xhr, "blob");
checkSetResponseType(xhr, "json");
checkSetResponseType(xhr, "moz-chunked-arraybuffer");
checkOpenThrows(xhr, "GET", "file_XHR_pass2.txt", false);
2011-12-08 17:55:20 +04:00
// test response (sync, responseType is not changeable)
xhr = new XMLHttpRequest();
2011-12-08 17:55:20 +04:00
xhr.open("GET", 'file_XHR_pass2.txt', false);
checkSetResponseTypeThrows(xhr, "");
checkSetResponseTypeThrows(xhr, "text");
checkSetResponseTypeThrows(xhr, "document");
2011-12-08 17:55:20 +04:00
checkSetResponseTypeThrows(xhr, "arraybuffer");
checkSetResponseTypeThrows(xhr, "blob");
checkSetResponseTypeThrows(xhr, "json");
checkSetResponseTypeThrows(xhr, "moz-chunked-arraybuffer");
2011-12-08 17:55:20 +04:00
xhr.send(null);
checkSetResponseTypeThrows(xhr, "document");
is(xhr.status, 200, "wrong status");
is(xhr.response, "hello pass\n", "wrong response");
// test response (responseType='document')
xhr = new XMLHttpRequest();
xhr.open("GET", 'file_XHR_pass1.xml');
xhr.responseType = 'document';
2011-12-08 17:55:20 +04:00
xhr.onloadend = continueTest;
xhr.send(null);
yield undefined;
checkSetResponseTypeThrows(xhr, "document");
is(xhr.status, 200, "wrong status");
checkResponseTextAccessThrows(xhr);
is((new XMLSerializer()).serializeToString(xhr.response.documentElement),
"<res>hello</res>",
"wrong response");
// test response (responseType='text')
xhr = new XMLHttpRequest();
2011-12-08 17:55:20 +04:00
xhr.open("GET", 'file_XHR_pass2.txt');
xhr.responseType = 'text';
2011-12-08 17:55:20 +04:00
xhr.onloadend = continueTest;
xhr.send(null);
yield undefined;
is(xhr.status, 200, "wrong status");
checkResponseXMLAccessThrows(xhr);
is(xhr.response, "hello pass\n", "wrong response");
// test response (responseType='arraybuffer')
function arraybuffer_equals_to(ab, s) {
is(ab.byteLength, s.length, "wrong arraybuffer byteLength");
var u8v = new Uint8Array(ab);
is(String.fromCharCode.apply(String, u8v), s, "wrong values");
}
// with a simple text file
xhr = new XMLHttpRequest();
2011-12-08 17:55:20 +04:00
xhr.open("GET", 'file_XHR_pass2.txt');
xhr.responseType = 'arraybuffer';
2011-12-08 17:55:20 +04:00
xhr.onloadend = continueTest;
xhr.send(null);
yield undefined;
is(xhr.status, 200, "wrong status");
checkResponseTextAccessThrows(xhr);
checkResponseXMLAccessThrows(xhr);
var ab = xhr.response;
ok(ab != null, "should have a non-null arraybuffer");
arraybuffer_equals_to(ab, "hello pass\n");
2011-08-24 20:33:31 +04:00
// test reusing the same XHR (Bug 680816)
2011-12-08 17:55:20 +04:00
xhr.open("GET", 'file_XHR_binary1.bin');
2011-08-24 20:33:31 +04:00
xhr.responseType = 'arraybuffer';
2011-12-08 17:55:20 +04:00
xhr.onloadend = continueTest;
2011-08-24 20:33:31 +04:00
xhr.send(null);
yield undefined;
2011-08-24 20:33:31 +04:00
is(xhr.status, 200, "wrong status");
var ab2 = xhr.response;
2011-08-24 20:33:31 +04:00
ok(ab2 != null, "should have a non-null arraybuffer");
ok(ab2 != ab, "arraybuffer on XHR reuse should be distinct");
arraybuffer_equals_to(ab, "hello pass\n");
arraybuffer_equals_to(ab2, "\xaa\xee\0\x03\xff\xff\xff\xff\xbb\xbb\xbb\xbb");
// with a binary file
xhr = new XMLHttpRequest();
2011-12-08 17:55:20 +04:00
xhr.open("GET", 'file_XHR_binary1.bin');
xhr.responseType = 'arraybuffer';
2011-12-08 17:55:20 +04:00
xhr.onloadend = continueTest;
xhr.send(null);
yield undefined;
is(xhr.status, 200, "wrong status");
checkResponseTextAccessThrows(xhr);
checkResponseXMLAccessThrows(xhr);
ab = xhr.response;
ok(ab != null, "should have a non-null arraybuffer");
arraybuffer_equals_to(ab, "\xaa\xee\0\x03\xff\xff\xff\xff\xbb\xbb\xbb\xbb");
is(xhr.response, xhr.response, "returns the same ArrayBuffer");
// test response (responseType='json')
var xhr = new XMLHttpRequest();
2011-12-08 17:55:20 +04:00
xhr.open("POST", 'responseIdentical.sjs');
xhr.responseType = 'json';
var jsonObjStr = JSON.stringify({title: "aBook", author: "john"});
2011-12-08 17:55:20 +04:00
xhr.onloadend = continueTest;
xhr.send(jsonObjStr);
yield undefined;
is(xhr.status, 200, "wrong status");
checkResponseTextAccessThrows(xhr);
checkResponseXMLAccessThrows(xhr);
is(JSON.stringify(xhr.response), jsonObjStr, "correct result");
is(xhr.response, xhr.response, "returning the same object on each access");
// with invalid json
var xhr = new XMLHttpRequest();
2011-12-08 17:55:20 +04:00
xhr.open("POST", 'responseIdentical.sjs');
xhr.responseType = 'json';
2011-12-08 17:55:20 +04:00
xhr.onloadend = continueTest;
xhr.send("{");
yield undefined;
is(xhr.status, 200, "wrong status");
checkResponseTextAccessThrows(xhr);
checkResponseXMLAccessThrows(xhr);
is(xhr.response, null, "Bad JSON should result in null response.");
is(xhr.response, null, "Bad JSON should result in null response even 2nd time.");
// Test status/statusText in all readyStates
xhr = new XMLHttpRequest();
function checkXHRStatus() {
if (xhr.readyState == xhr.UNSENT || xhr.readyState == xhr.OPENED) {
is(xhr.status, 0, "should be 0 before getting data");
is(xhr.statusText, "", "should be empty before getting data");
}
else {
is(xhr.status, 200, "should be 200 when we have data");
is(xhr.statusText, "OK", "should be OK when we have data");
}
}
checkXHRStatus();
xhr.open("GET", 'file_XHR_binary1.bin');
checkXHRStatus();
xhr.responseType = 'arraybuffer';
xhr.send(null);
xhr.onreadystatechange = continueTest;
while (xhr.readyState != 4) {
checkXHRStatus();
yield undefined;
}
checkXHRStatus();
// test response (responseType='blob')
// with a simple text file
xhr = new XMLHttpRequest();
xhr.open("GET", 'file_XHR_pass2.txt');
xhr.responseType = 'blob';
xhr.onloadend = continueTest;
xhr.send(null);
yield undefined;
is(xhr.status, 200, "wrong status");
checkResponseTextAccessThrows(xhr);
checkResponseXMLAccessThrows(xhr);
var b = xhr.response;
ok(b, "should have a non-null blob");
ok(b instanceof Blob, "should be a Blob");
ok(!(b instanceof File), "should not be a File");
is(b.size, "hello pass\n".length, "wrong blob size");
var fr = new FileReader();
fr.onload = continueTest;
fr.readAsBinaryString(b);
yield undefined;
ok(fr.result, "hello pass\n", "wrong values");
// with a binary file
xhr = new XMLHttpRequest();
xhr.open("GET", 'file_XHR_binary1.bin', true);
xhr.send(null);
xhr.onreadystatechange = continueTest;
while(xhr.readyState != 2)
yield undefined;
is(xhr.status, 200, "wrong status");
xhr.responseType = 'blob';
while(xhr.readyState != 4)
yield undefined;
xhr.onreadystatechange = null;
b = xhr.response;
ok(b != null, "should have a non-null blob");
is(b.size, 12, "wrong blob size");
fr = new FileReader();
fr.readAsBinaryString(b);
xhr = null; // kill the XHR object
b = null;
SpecialPowers.gc();
fr.onload = continueTest;
yield undefined;
is(fr.result, "\xaa\xee\0\x03\xff\xff\xff\xff\xbb\xbb\xbb\xbb", "wrong values");
// with a larger binary file
xhr = new XMLHttpRequest();
xhr.open("GET", 'file_XHR_binary2.bin', true);
xhr.responseType = 'blob';
xhr.send(null);
xhr.onreadystatechange = continueTest;
while (xhr.readyState != 4)
yield undefined;
xhr.onreadystatechange = null;
var b = xhr.response;
ok(b != null, "should have a non-null blob");
is(b.size, 65536, "wrong blob size");
fr = new FileReader();
fr.readAsArrayBuffer(b);
fr.onload = continueTest;
xhr = null; // kill the XHR object
b = null;
SpecialPowers.gc();
yield undefined;
var u8 = new Uint8Array(fr.result);
for (var i = 0; i < 65536; i++) {
if (u8[i] !== (i & 255)) {
break;
}
2012-01-30 14:34:15 +04:00
}
is(i, 65536, "wrong value at offset " + i);
var client = new XMLHttpRequest();
client.open("GET", "file_XHR_pass1.xml", true);
client.send();
client.onreadystatechange = function() {
if(client.readyState == 4) {
try {
is(client.responseXML, null, "responseXML should be null.");
is(client.responseText, "", "responseText should be empty string.");
is(client.response, "", "response should be empty string.");
is(client.status, 0, "status should be 0.");
is(client.statusText, "", "statusText should be empty string.");
is(client.getAllResponseHeaders(), "",
"getAllResponseHeaders() should return empty string.");
} catch(ex) {
ok(false, "Shouldn't throw! [" + ex + "]");
}
}
}
client.abort();
SimpleTest.finish();
2011-12-08 17:55:20 +04:00
} /* runTests */
</script>
</pre>
</body>
</html>