mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-14 10:43:24 +00:00
Bug 1202006 - Memory Blob to Temporary File - part 5 - tests, r=smaug
This commit is contained in:
parent
47460d0a88
commit
36f19e0ec4
100
dom/xhr/tests/common_temporaryFileBlob.js
Normal file
100
dom/xhr/tests/common_temporaryFileBlob.js
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
var data = new Array(256).join("1234567890ABCDEF");
|
||||||
|
|
||||||
|
function createXHR() {
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
xhr.open("POST", "temporaryFileBlob.sjs");
|
||||||
|
xhr.responseType = 'blob';
|
||||||
|
xhr.send({toString: function() { return data; }});
|
||||||
|
return xhr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function test_simple() {
|
||||||
|
info("Simple test");
|
||||||
|
|
||||||
|
var xhr = createXHR();
|
||||||
|
|
||||||
|
xhr.onloadend = function() {
|
||||||
|
ok(xhr.response instanceof Blob, "We have a blob!");
|
||||||
|
is(xhr.response.size, data.length, "Data length matches");
|
||||||
|
|
||||||
|
var fr = new FileReader();
|
||||||
|
fr.readAsText(xhr.response);
|
||||||
|
fr.onload = function() {
|
||||||
|
is(fr.result, data, "Data content matches");
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function test_abort() {
|
||||||
|
info("Aborting during onloading");
|
||||||
|
|
||||||
|
var xhr = createXHR();
|
||||||
|
|
||||||
|
xhr.onprogress = function() {
|
||||||
|
xhr.abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
xhr.onloadend = function() {
|
||||||
|
ok(!xhr.response, "We should not have a Blob!");
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function test_reuse() {
|
||||||
|
info("Reuse test");
|
||||||
|
|
||||||
|
var xhr = createXHR();
|
||||||
|
|
||||||
|
var count = 0;
|
||||||
|
xhr.onloadend = function() {
|
||||||
|
ok(xhr.response instanceof Blob, "We have a blob!");
|
||||||
|
is(xhr.response.size, data.length, "Data length matches");
|
||||||
|
|
||||||
|
var fr = new FileReader();
|
||||||
|
fr.readAsText(xhr.response);
|
||||||
|
fr.onload = function() {
|
||||||
|
is(fr.result, data, "Data content matches");
|
||||||
|
if (++count > 2) {
|
||||||
|
next();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
xhr.open("POST", "temporaryFileBlob.sjs");
|
||||||
|
xhr.responseType = 'blob';
|
||||||
|
xhr.send({toString: function() { return data; }});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function test_worker_generic(test) {
|
||||||
|
var w = new Worker('worker_temporaryFileBlob.js');
|
||||||
|
w.onmessage = function(e) {
|
||||||
|
if (e.data.type == 'info') {
|
||||||
|
info(e.data.msg);
|
||||||
|
} else if (e.data.type == 'check') {
|
||||||
|
ok(e.data.what, e.data.msg);
|
||||||
|
} else if (e.data.type == 'finish') {
|
||||||
|
next();
|
||||||
|
} else {
|
||||||
|
ok(false, 'Something wrong happened');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
w.postMessage(test);
|
||||||
|
}
|
||||||
|
|
||||||
|
function test_worker() {
|
||||||
|
info("XHR in workers");
|
||||||
|
test_worker_generic('simple');
|
||||||
|
}
|
||||||
|
|
||||||
|
function test_worker_abort() {
|
||||||
|
info("XHR in workers");
|
||||||
|
test_worker_generic('abort');
|
||||||
|
}
|
||||||
|
|
||||||
|
function test_worker_reuse() {
|
||||||
|
info("XHR in workers");
|
||||||
|
test_worker_generic('reuse');
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
[DEFAULT]
|
[DEFAULT]
|
||||||
support-files =
|
support-files =
|
||||||
echo.sjs
|
echo.sjs
|
||||||
|
temporaryFileBlob.sjs
|
||||||
file_html_in_xhr.html
|
file_html_in_xhr.html
|
||||||
file_html_in_xhr.sjs
|
file_html_in_xhr.sjs
|
||||||
file_html_in_xhr2.html
|
file_html_in_xhr2.html
|
||||||
@ -56,6 +57,8 @@ support-files =
|
|||||||
subdir/relativeLoad_sub_worker.js
|
subdir/relativeLoad_sub_worker.js
|
||||||
subdir/relativeLoad_sub_worker2.js
|
subdir/relativeLoad_sub_worker2.js
|
||||||
subdir/relativeLoad_sub_import.js
|
subdir/relativeLoad_sub_import.js
|
||||||
|
common_temporaryFileBlob.js
|
||||||
|
worker_temporaryFileBlob.js
|
||||||
|
|
||||||
[test_xhr_overridemimetype_throws_on_invalid_state.html]
|
[test_xhr_overridemimetype_throws_on_invalid_state.html]
|
||||||
skip-if = buildapp == 'b2g' # Requires webgl support
|
skip-if = buildapp == 'b2g' # Requires webgl support
|
||||||
@ -101,3 +104,4 @@ skip-if = buildapp == 'b2g'
|
|||||||
skip-if = (os == "win") || (os == "mac") || toolkit == 'android' #bug 798220
|
skip-if = (os == "win") || (os == "mac") || toolkit == 'android' #bug 798220
|
||||||
[test_relativeLoad.html]
|
[test_relativeLoad.html]
|
||||||
skip-if = buildapp == 'b2g' # b2g(Failed to load script: relativeLoad_import.js) b2g-debug(Failed to load script: relativeLoad_import.js) b2g-desktop(Failed to load script: relativeLoad_import.js)
|
skip-if = buildapp == 'b2g' # b2g(Failed to load script: relativeLoad_import.js) b2g-debug(Failed to load script: relativeLoad_import.js) b2g-desktop(Failed to load script: relativeLoad_import.js)
|
||||||
|
[test_temporaryFileBlob.html]
|
||||||
|
33
dom/xhr/tests/temporaryFileBlob.sjs
Normal file
33
dom/xhr/tests/temporaryFileBlob.sjs
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
const CC = Components.Constructor;
|
||||||
|
|
||||||
|
const BinaryInputStream = CC("@mozilla.org/binaryinputstream;1",
|
||||||
|
"nsIBinaryInputStream",
|
||||||
|
"setInputStream");
|
||||||
|
const BinaryOutputStream = CC("@mozilla.org/binaryoutputstream;1",
|
||||||
|
"nsIBinaryOutputStream",
|
||||||
|
"setOutputStream");
|
||||||
|
const Timer = CC("@mozilla.org/timer;1",
|
||||||
|
"nsITimer",
|
||||||
|
"initWithCallback");
|
||||||
|
|
||||||
|
function handleRequest(request, response) {
|
||||||
|
var bodyStream = new BinaryInputStream(request.bodyInputStream);
|
||||||
|
var bodyBytes = [];
|
||||||
|
while ((bodyAvail = bodyStream.available()) > 0)
|
||||||
|
Array.prototype.push.apply(bodyBytes, bodyStream.readByteArray(bodyAvail));
|
||||||
|
|
||||||
|
var bos = new BinaryOutputStream(response.bodyOutputStream);
|
||||||
|
|
||||||
|
response.processAsync();
|
||||||
|
|
||||||
|
var part = bodyBytes.splice(0, 256);
|
||||||
|
bos.writeByteArray(part, part.length);
|
||||||
|
|
||||||
|
response.timer1 = new Timer(function(timer) {
|
||||||
|
bos.writeByteArray(bodyBytes, bodyBytes.length);
|
||||||
|
}, 1000, Components.interfaces.nsITimer.TYPE_ONE_SHOT);
|
||||||
|
|
||||||
|
response.timer2 = new Timer(function(timer) {
|
||||||
|
response.finish();
|
||||||
|
}, 2000, Components.interfaces.nsITimer.TYPE_ONE_SHOT);
|
||||||
|
}
|
40
dom/xhr/tests/test_temporaryFileBlob.html
Normal file
40
dom/xhr/tests/test_temporaryFileBlob.html
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Test for Bug 1202006</title>
|
||||||
|
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||||
|
<script type="application/javascript" src="common_temporaryFileBlob.js"></script>
|
||||||
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="application/javascript">
|
||||||
|
|
||||||
|
var tests = [
|
||||||
|
// from common_temporaryFileBlob.js:
|
||||||
|
test_simple,
|
||||||
|
test_reuse,
|
||||||
|
test_abort,
|
||||||
|
|
||||||
|
test_worker,
|
||||||
|
test_worker_reuse,
|
||||||
|
test_worker_abort,
|
||||||
|
];
|
||||||
|
|
||||||
|
function next() {
|
||||||
|
if (!tests.length) {
|
||||||
|
SimpleTest.finish();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var test = tests.shift();
|
||||||
|
test();
|
||||||
|
}
|
||||||
|
|
||||||
|
SpecialPowers.pushPrefEnv({ "set" : [[ "dom.blob.memoryToTemporaryFile", 1 ]] },
|
||||||
|
next);
|
||||||
|
SimpleTest.waitForExplicitFinish();
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
29
dom/xhr/tests/worker_temporaryFileBlob.js
Normal file
29
dom/xhr/tests/worker_temporaryFileBlob.js
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
importScripts('common_temporaryFileBlob.js');
|
||||||
|
|
||||||
|
function info(msg) {
|
||||||
|
postMessage({type: 'info', msg: msg});
|
||||||
|
}
|
||||||
|
|
||||||
|
function ok(a, msg) {
|
||||||
|
postMessage({type: 'check', what: !!a, msg: msg});
|
||||||
|
}
|
||||||
|
|
||||||
|
function is(a, b, msg) {
|
||||||
|
ok(a === b, msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
function next() {
|
||||||
|
postMessage({type: 'finish'});
|
||||||
|
}
|
||||||
|
|
||||||
|
onmessage = function(e) {
|
||||||
|
if (e.data == 'simple') {
|
||||||
|
test_simple();
|
||||||
|
} else if (e.data == 'abort') {
|
||||||
|
test_abort();
|
||||||
|
} else if (e.data == 'reuse') {
|
||||||
|
test_reuse();
|
||||||
|
} else {
|
||||||
|
ok(false, 'Something wrong happened');
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user