Skip to content

Commit bcabee2

Browse files
edusperonirigor789
andauthored
test: add native worker android tests (#22)
Co-authored-by: Igor Randjelovic <rigor789@gmail.com>
1 parent 48e77b2 commit bcabee2

2 files changed

Lines changed: 81 additions & 24 deletions

File tree

Workers/NativeWorkWorker.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
onmessage = function (msg) {
2+
try {
3+
const myUrl = new java.net.URL("http://google.com");
4+
postMessage("success");
5+
} catch (e) {
6+
console.log(e);
7+
postMessage("failed");
8+
}
9+
}

Workers/index.js

Lines changed: 72 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ describe("TNS Workers", () => {
33
var originalTimeout;
44
var DEFAULT_TIMEOUT_BEFORE_ASSERT = 500;
55

6-
if(global.NSObject) { // if platform is iOS
6+
if (global.NSObject) { // if platform is iOS
77
DEFAULT_TIMEOUT_BEFORE_ASSERT = 1000;
88
} else { // if Android
99
// necessary in order to accommodate slower and older android emulators
@@ -136,7 +136,7 @@ describe("TNS Workers", () => {
136136
value: {
137137
str: "A message from main",
138138
number: 42,
139-
obj: { prop: "value", innerObj: { innnerProp: 67 } },
139+
obj: { prop: "value", innerObj: { innnerProp: 67 } },
140140
bool: true,
141141
nullValue: null
142142
},
@@ -251,7 +251,7 @@ describe("TNS Workers", () => {
251251
var messagesCount = 100;
252252
var allWorkersResponseCounter = 0;
253253

254-
for(let id = 0; id < workersCount; id++) {
254+
for (let id = 0; id < workersCount; id++) {
255255
let worker = new Worker("./EvalWorker");
256256
let responseCounter = 0;
257257
worker.onmessage = (msg) => {
@@ -277,7 +277,7 @@ describe("TNS Workers", () => {
277277

278278
worker.postMessage({
279279
eval:
280-
"onclose = () => {\
280+
"onclose = () => {\
281281
postMessage('closed');\
282282
close();\
283283
};\
@@ -301,7 +301,7 @@ describe("TNS Workers", () => {
301301

302302
worker.postMessage({
303303
eval:
304-
"onerror = () => {\
304+
"onerror = () => {\
305305
postMessage('onerror called');\
306306
throw new Error('error');\
307307
};\
@@ -326,12 +326,60 @@ describe("TNS Workers", () => {
326326
}, DEFAULT_TIMEOUT_BEFORE_ASSERT);
327327
});
328328

329+
it("Should not throw errors when accessing native objects and terminating", (done) => {
330+
if (global.NSObject) {
331+
done();
332+
return;
333+
}
334+
let onerrorCounter = 0;
335+
const delay = (ms) => {
336+
new Promise((resolve) => setTimeout(resolve, ms));
337+
};
338+
const run = async () => {
339+
const newWorker = () => {
340+
return new Promise((resolve) => {
341+
const worker = new Worker("./NativeWorkWorker.js");
342+
worker.onerror = (err) => {
343+
onerrorCounter++;
344+
resolve(worker);
345+
};
346+
worker.onmessage = (result) => {
347+
try {
348+
if (result.data !== "success") {
349+
onerrorCounter++;
350+
}
351+
if (onerrorCounter === 0) {
352+
worker.terminate();
353+
}
354+
} catch (e) {
355+
console.log(e);
356+
}
357+
resolve(worker);
358+
};
359+
worker.postMessage('go!');
360+
});
361+
};
362+
363+
for (let i = 0; i < 5; i++) {
364+
const worker = await newWorker();
365+
await delay(50);
366+
// worker.terminate();
367+
// await delay(90);
368+
// worker.terminate();
369+
}
370+
};
371+
run().then(() => {
372+
expect(onerrorCounter).toBe(0);
373+
done();
374+
});
375+
});
376+
329377
it("If error is thrown in close() should call onerror but should not execute any other tasks ", (done) => {
330378
var worker = new Worker("./EvalWorker.js");
331379

332380
worker.postMessage({
333381
eval:
334-
"onmessage = (msg) => { postMessage(msg.data + ' pong'); };\
382+
"onmessage = (msg) => { postMessage(msg.data + ' pong'); };\
335383
onerror = (err) => { postMessage('pong'); return false; };\
336384
onclose = () => { throw new Error('error thrown from close()'); };\
337385
close();"
@@ -438,7 +486,7 @@ describe("TNS Workers", () => {
438486

439487
worker.postMessage({
440488
eval:
441-
"onerror = function(err) { \
489+
"onerror = function(err) { \
442490
return false; \
443491
}; \
444492
throw 42;"
@@ -454,7 +502,7 @@ describe("TNS Workers", () => {
454502

455503
worker.postMessage({
456504
eval:
457-
"onerror = function(err) { \
505+
"onerror = function(err) { \
458506
postMessage(err); \
459507
return true; \
460508
}; \
@@ -480,11 +528,11 @@ describe("TNS Workers", () => {
480528
}, DEFAULT_TIMEOUT_BEFORE_ASSERT);
481529
});
482530

483-
if(global.NSObject) { // platform is iOS
531+
if (global.NSObject) { // platform is iOS
484532
it("no crash during or after runtime teardown on iOS", (done) => {
485533
// reduce number of workers on older (32-bit devices) to avoid sporadic failures due to timeout
486534
const numWorkers = (interop.sizeof(interop.types.id) == 4) ? 4 : 10;
487-
const timeout = DEFAULT_TIMEOUT_BEFORE_ASSERT*3.5;
535+
const timeout = DEFAULT_TIMEOUT_BEFORE_ASSERT * 3.5;
488536

489537
let messageProducerTimeout = true;
490538
let iteration = 0;
@@ -500,17 +548,17 @@ describe("TNS Workers", () => {
500548

501549
let onCloseEvents = 0;
502550
let onStartEvents = 0;
503-
for (let i = 0; i < numWorkers; i++) {;
504-
const worker = new Worker("./TeardownCrashWorker.js");
505-
worker.onmessage = (msg) => {
506-
if (msg.data === "closing") {
507-
onCloseEvents++;
508-
}
509-
else if (msg.data === "starting") {
510-
onStartEvents++;
511-
worker.postMessage(i);
512-
}
513-
}
551+
for (let i = 0; i < numWorkers; i++) {
552+
const worker = new Worker("./TeardownCrashWorker.js");
553+
worker.onmessage = (msg) => {
554+
if (msg.data === "closing") {
555+
onCloseEvents++;
556+
}
557+
else if (msg.data === "starting") {
558+
onStartEvents++;
559+
worker.postMessage(i);
560+
}
561+
}
514562
}
515563

516564
setTimeout(() => {
@@ -523,15 +571,15 @@ describe("TNS Workers", () => {
523571
done();
524572
}, timeout);
525573
});
526-
527-
it("Check for leaked runtimes", function(done) {
574+
575+
it("Check for leaked runtimes", function (done) {
528576
setTimeout(() => {
529577
const runtimesCount = TNSRuntime.runtimes().count;
530578
expect(runtimesCount).toBe(expectedAliveRuntimes, `Found ${runtimesCount} runtimes alive. Expected ${expectedAliveRuntimes}.`);
531579
done();
532580
}, 1000);
533581
});
534-
582+
535583
} // platform is iOS
536584

537585
function generateRandomString(strLen) {

0 commit comments

Comments
 (0)