gecko/dom/base/test/file_bug1008126_worker.js
Jed Davis f0cca672e0 Bug 1034143: Step 1: Fix tests for bug 945152 and bug 1008126. r=smaug
This bug will make jar:http:// no longer eligible for the memory-mapping
optimization tested in these test cases, so this patch changes them
to use local files, which is the case that that optimization is meant
for.  Specifically, it changes them to chrome tests and pre-resolves
the chrome: URL of the jar file so that nsJARChannel recognizes it as a
local file.

Note that the bug 945152 test jar file remains in the file list for
plain mochitests as well as being added to chrome.ini; there is a test
in another directory that uses it, and a later patch in this series will
add another.
2015-03-10 17:00:01 -07:00

177 lines
4.5 KiB
JavaScript

/**
* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
var gEntry1 = "data_1.txt";
var gEntry2 = "data_2.txt";
var gEntry3 = "data_big.txt";
var gPaddingChar = ".";
var gPaddingSize = 10000;
var gPadding = "";
for (var i = 0; i < gPaddingSize; i++) {
gPadding += gPaddingChar;
}
var gData1 = "TEST_DATA_1:ABCDEFGHIJKLMNOPQRSTUVWXYZ" + gPadding;
var gData2 = "TEST_DATA_2:1234567890" + gPadding;
function ok(a, msg) {
postMessage({type: "status", status: !!a, msg: msg });
}
function is(a, b, msg) {
postMessage({type: "status", status: a === b, msg: msg });
}
function checkData(xhr, data, mapped, cb) {
var ct = xhr.getResponseHeader("Content-Type");
if (mapped) {
ok(ct.indexOf("mem-mapped") != -1, "Data is memory-mapped");
} else {
ok(ct.indexOf("mem-mapped") == -1, "Data is not memory-mapped");
}
ok(xhr.response, "Data is non-null");
var str = String.fromCharCode.apply(null, new Uint8Array(xhr.response));
ok(str == data, "Data is correct");
cb();
}
self.onmessage = function onmessage(event) {
var jar = event.data;
function makeJarURL(entry) {
return "jar:" + jar + "!/" + entry;
}
var xhr = new XMLHttpRequest({mozAnon: true, mozSystem: true});
function reset_event_hander() {
xhr.onerror = function(e) {
ok(false, "Error: " + e.error + "\n");
};
xhr.onprogress = null;
xhr.onreadystatechange = null;
xhr.onload = null;
xhr.onloadend = null;
}
function test_chunked_arraybuffer() {
ok(true, "Test chunked arraybuffer");
var lastIndex = 0;
xhr.onprogress = function(event) {
if (xhr.response) {
var buf = new Uint8Array(xhr.response);
var allMatched = true;
// The content of data cycles from 0 to 9 (i.e. 01234567890123......).
for (var i = 0; i < buf.length; i++) {
if (String.fromCharCode(buf[i]) != lastIndex % 10) {
allMatched = false;
break;
}
lastIndex++;
}
ok(allMatched, "Data chunk is correct. Loaded " +
event.loaded + "/" + event.total + " bytes.");
}
};
xhr.onload = runTests;
xhr.open("GET", makeJarURL(gEntry3), true);
xhr.responseType = "moz-chunked-arraybuffer";
xhr.send();
}
var readystatechangeCount = 0;
var loadCount = 0;
var loadendCount = 0;
function checkEventCount(cb) {
ok(readystatechangeCount == 1 && loadCount == 1 && loadendCount == 1,
"Saw all expected events");
cb();
}
function test_multiple_events() {
ok(true, "Test multiple events");
xhr.abort();
xhr.onreadystatechange = function() {
if (xhr.readyState == xhr.DONE) {
readystatechangeCount++;
checkData(xhr, gData2, false, function() {} );
}
};
xhr.onload = function() {
loadCount++;
checkData(xhr, gData2, false, function() {} );
};
xhr.onloadend = function() {
loadendCount++;
checkData(xhr, gData2, false, function() {} );
};
xhr.open("GET", makeJarURL(gEntry2), false);
xhr.responseType = "arraybuffer";
xhr.send();
checkEventCount(runTests);
}
function test_sync_xhr_data1() {
ok(true, "Test sync XHR with data1");
xhr.open("GET", makeJarURL(gEntry1), false);
xhr.responseType = "arraybuffer";
xhr.send();
checkData(xhr, gData1, true, runTests);
}
function test_sync_xhr_data2() {
ok(true, "Test sync XHR with data2");
xhr.open("GET", makeJarURL(gEntry2), false);
xhr.responseType = "arraybuffer";
xhr.send();
checkData(xhr, gData2, false, runTests);
}
function test_async_xhr_data1() {
ok(true, "Test async XHR with data1");
xhr.onload = function() {
checkData(xhr, gData1, true, runTests);
};
xhr.open("GET", makeJarURL(gEntry1), true);
xhr.responseType = "arraybuffer";
xhr.send();
}
function test_async_xhr_data2() {
ok(true, "Test async XHR with data2");
xhr.onload = function() {
checkData(xhr, gData2, false, runTests);
};
xhr.open("GET", makeJarURL(gEntry2), true);
xhr.responseType = "arraybuffer";
xhr.send();
}
var tests = [
test_chunked_arraybuffer,
test_multiple_events,
test_sync_xhr_data1,
test_sync_xhr_data2,
test_async_xhr_data1,
test_async_xhr_data2
];
function runTests() {
if (!tests.length) {
postMessage({type: "finish" });
return;
}
reset_event_hander();
var test = tests.shift();
test();
}
runTests();
};