Bug 1892041 - Part 1: Update test262 features. r=spidermonkey-reviewers,dminor
[gecko.git] / dom / base / test / file_bug1008126_worker.js
blob4e418d777eaeff7beff4c9ecc4dcabc4528407ac
1 /**
2  * Any copyright is dedicated to the Public Domain.
3  * http://creativecommons.org/publicdomain/zero/1.0/
4  */
6 /* eslint-disable mozilla/no-comparison-or-assignment-inside-ok */
8 var gEntry1 = "data_1.txt";
9 var gEntry2 = "data_2.txt";
10 var gEntry3 = "data_big.txt";
11 var gPaddingChar = ".";
12 var gPaddingSize = 10000;
13 var gPadding = "";
14 for (var i = 0; i < gPaddingSize; i++) {
15   gPadding += gPaddingChar;
17 var gData1 = "TEST_DATA_1:ABCDEFGHIJKLMNOPQRSTUVWXYZ" + gPadding;
18 var gData2 = "TEST_DATA_2:1234567890" + gPadding;
20 function ok(a, msg) {
21   postMessage({ type: "status", status: !!a, msg });
24 function is(a, b, msg) {
25   postMessage({ type: "status", status: a === b, msg });
28 function checkData(xhr, data, mapped, cb) {
29   var ct = xhr.getResponseHeader("Content-Type");
30   if (mapped) {
31     ok(ct.includes("mem-mapped"), "Data is memory-mapped");
32   } else {
33     ok(!ct.includes("mem-mapped"), "Data is not memory-mapped");
34   }
35   ok(xhr.response, "Data is non-null");
36   var str = String.fromCharCode.apply(null, new Uint8Array(xhr.response));
37   ok(str == data, "Data is correct");
38   cb();
41 self.onmessage = function onmessage(event) {
42   var jar = event.data;
44   function makeJarURL(entry) {
45     return "jar:" + jar + "!/" + entry;
46   }
48   var xhr = new XMLHttpRequest({ mozAnon: true, mozSystem: true });
50   function reset_event_hander() {
51     xhr.onerror = function (e) {
52       ok(false, "Error: " + e.error + "\n");
53     };
54     xhr.onprogress = null;
55     xhr.onreadystatechange = null;
56     xhr.onload = null;
57     xhr.onloadend = null;
58   }
60   var readystatechangeCount = 0;
61   var loadCount = 0;
62   var loadendCount = 0;
64   function checkEventCount(cb) {
65     ok(
66       readystatechangeCount == 1 && loadCount == 1 && loadendCount == 1,
67       "Saw all expected events"
68     );
69     cb();
70   }
72   function test_multiple_events() {
73     ok(true, "Test multiple events");
74     xhr.abort();
76     xhr.onreadystatechange = function () {
77       if (xhr.readyState == xhr.DONE) {
78         readystatechangeCount++;
79         checkData(xhr, gData2, false, function () {});
80       }
81     };
82     xhr.onload = function () {
83       loadCount++;
84       checkData(xhr, gData2, false, function () {});
85     };
86     xhr.onloadend = function () {
87       loadendCount++;
88       checkData(xhr, gData2, false, function () {});
89     };
90     xhr.open("GET", makeJarURL(gEntry2), false);
91     xhr.responseType = "arraybuffer";
92     xhr.send();
93     checkEventCount(runTests);
94   }
96   function test_sync_xhr_data1() {
97     ok(true, "Test sync XHR with data1");
98     xhr.open("GET", makeJarURL(gEntry1), false);
99     xhr.responseType = "arraybuffer";
100     xhr.send();
101     checkData(xhr, gData1, true, runTests);
102   }
104   function test_sync_xhr_data2() {
105     ok(true, "Test sync XHR with data2");
106     xhr.open("GET", makeJarURL(gEntry2), false);
107     xhr.responseType = "arraybuffer";
108     xhr.send();
109     checkData(xhr, gData2, false, runTests);
110   }
112   function test_async_xhr_data1() {
113     ok(true, "Test async XHR with data1");
114     xhr.onload = function () {
115       checkData(xhr, gData1, true, runTests);
116     };
117     xhr.open("GET", makeJarURL(gEntry1), true);
118     xhr.responseType = "arraybuffer";
119     xhr.send();
120   }
122   function test_async_xhr_data2() {
123     ok(true, "Test async XHR with data2");
124     xhr.onload = function () {
125       checkData(xhr, gData2, false, runTests);
126     };
127     xhr.open("GET", makeJarURL(gEntry2), true);
128     xhr.responseType = "arraybuffer";
129     xhr.send();
130   }
132   var tests = [
133     test_multiple_events,
134     test_sync_xhr_data1,
135     test_sync_xhr_data2,
136     test_async_xhr_data1,
137     test_async_xhr_data2,
138   ];
140   function runTests() {
141     if (!tests.length) {
142       postMessage({ type: "finish" });
143       return;
144     }
146     reset_event_hander();
148     var test = tests.shift();
149     test();
150   }
152   runTests();