summaryrefslogtreecommitdiff
path: root/cli/tests
diff options
context:
space:
mode:
Diffstat (limited to 'cli/tests')
-rw-r--r--cli/tests/026_workers.ts26
-rw-r--r--cli/tests/026_workers.ts.out7
-rw-r--r--cli/tests/integration_tests.rs12
-rw-r--r--cli/tests/subdir/nested_worker.js1
-rw-r--r--cli/tests/subdir/test_worker.js3
-rw-r--r--cli/tests/subdir/test_worker.ts1
-rw-r--r--cli/tests/subdir/test_worker_basic.js2
-rw-r--r--cli/tests/workers_basic.out3
-rw-r--r--cli/tests/workers_basic.ts11
-rw-r--r--cli/tests/workers_test.out7
-rw-r--r--cli/tests/workers_test.ts115
11 files changed, 126 insertions, 62 deletions
diff --git a/cli/tests/026_workers.ts b/cli/tests/026_workers.ts
deleted file mode 100644
index 7ec6996e1..000000000
--- a/cli/tests/026_workers.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-const jsWorker = new Worker("./subdir/test_worker.js", {
- type: "module",
- name: "jsWorker"
-});
-const tsWorker = new Worker("./subdir/test_worker.ts", {
- type: "module",
- name: "tsWorker"
-});
-
-tsWorker.onmessage = (e): void => {
- console.log("Received ts: " + e.data);
-};
-
-jsWorker.onmessage = (e): void => {
- console.log("Received js: " + e.data);
-
- tsWorker.postMessage("Hello World");
-};
-
-jsWorker.onerror = (e: Event): void => {
- e.preventDefault();
- console.log("called onerror in script");
- jsWorker.postMessage("Hello World");
-};
-
-jsWorker.postMessage("Hello World");
diff --git a/cli/tests/026_workers.ts.out b/cli/tests/026_workers.ts.out
deleted file mode 100644
index 92f7550ad..000000000
--- a/cli/tests/026_workers.ts.out
+++ /dev/null
@@ -1,7 +0,0 @@
-Hello World
-called onerror in worker
-called onerror in script
-Hello World
-Received js: Hello World
-Hello World
-Received ts: Hello World
diff --git a/cli/tests/integration_tests.rs b/cli/tests/integration_tests.rs
index a475e9111..5cd1f3431 100644
--- a/cli/tests/integration_tests.rs
+++ b/cli/tests/integration_tests.rs
@@ -828,14 +828,10 @@ itest!(_026_redirect_javascript {
http_server: true,
});
-itest!(_026_workers {
- args: "run --reload 026_workers.ts",
- output: "026_workers.ts.out",
-});
-
-itest!(workers_basic {
- args: "run --reload workers_basic.ts",
- output: "workers_basic.out",
+itest!(workers {
+ args: "run --reload --allow-net workers_test.ts",
+ http_server: true,
+ output: "workers_test.out",
});
itest!(_027_redirect_typescript {
diff --git a/cli/tests/subdir/nested_worker.js b/cli/tests/subdir/nested_worker.js
index b0acd70d7..a4eed723a 100644
--- a/cli/tests/subdir/nested_worker.js
+++ b/cli/tests/subdir/nested_worker.js
@@ -9,7 +9,6 @@ jsWorker.onerror = _e => {
};
jsWorker.onmessage = e => {
- console.log("js worker on message");
postMessage({ type: "msg", text: e });
close();
};
diff --git a/cli/tests/subdir/test_worker.js b/cli/tests/subdir/test_worker.js
index 70e1d8b73..9c1e555b5 100644
--- a/cli/tests/subdir/test_worker.js
+++ b/cli/tests/subdir/test_worker.js
@@ -5,8 +5,6 @@ if (self.name !== "jsWorker") {
}
onmessage = function(e) {
- console.log(e.data);
-
if (thrown === false) {
thrown = true;
throw new SyntaxError("[test error]");
@@ -17,6 +15,5 @@ onmessage = function(e) {
};
onerror = function() {
- console.log("called onerror in worker");
return false;
};
diff --git a/cli/tests/subdir/test_worker.ts b/cli/tests/subdir/test_worker.ts
index 2ea8f9214..1f924c073 100644
--- a/cli/tests/subdir/test_worker.ts
+++ b/cli/tests/subdir/test_worker.ts
@@ -3,7 +3,6 @@ if (self.name !== "tsWorker") {
}
onmessage = function(e): void {
- console.log(e.data);
postMessage(e.data);
close();
};
diff --git a/cli/tests/subdir/test_worker_basic.js b/cli/tests/subdir/test_worker_basic.js
index db00b6d0c..aef1658c0 100644
--- a/cli/tests/subdir/test_worker_basic.js
+++ b/cli/tests/subdir/test_worker_basic.js
@@ -6,12 +6,10 @@ if (self.name !== "jsWorker") {
}
onmessage = function(e) {
- console.log("jsWorker onmessage", e.data);
postMessage(e.data);
close();
};
onerror = function() {
- console.log("called onerror in worker");
return false;
};
diff --git a/cli/tests/workers_basic.out b/cli/tests/workers_basic.out
deleted file mode 100644
index 15c573530..000000000
--- a/cli/tests/workers_basic.out
+++ /dev/null
@@ -1,3 +0,0 @@
-hello from test_worker_basic.js
-jsWorker onmessage msg1
-main recv: msg1
diff --git a/cli/tests/workers_basic.ts b/cli/tests/workers_basic.ts
deleted file mode 100644
index 64bd58fcc..000000000
--- a/cli/tests/workers_basic.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-// Tests basic postMessage, close, onmessage
-const jsWorker = new Worker("./subdir/test_worker_basic.js", {
- type: "module",
- name: "jsWorker"
-});
-
-jsWorker.onmessage = (e): void => {
- console.log("main recv: " + e.data);
-};
-
-jsWorker.postMessage("msg1");
diff --git a/cli/tests/workers_test.out b/cli/tests/workers_test.out
new file mode 100644
index 000000000..691301f81
--- /dev/null
+++ b/cli/tests/workers_test.out
@@ -0,0 +1,7 @@
+running 4 tests
+OK workersBasic [WILDCARD]
+OK nestedWorker [WILDCARD]
+OK workerThrowsWhenExecuting [WILDCARD]
+OK workerCanUseFetch [WILDCARD]
+
+test result: OK 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out [WILDCARD] \ No newline at end of file
diff --git a/cli/tests/workers_test.ts b/cli/tests/workers_test.ts
new file mode 100644
index 000000000..44e7a1776
--- /dev/null
+++ b/cli/tests/workers_test.ts
@@ -0,0 +1,115 @@
+// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
+
+// Requires to be run with `--allow-net` flag
+
+// FIXME(bartlomieju): this file is an integration test only because
+// workers are leaking ops at the moment - `worker.terminate()` is not
+// yet implemented. Once it gets implemented this file should be
+// again moved to `cli/js/` as an unit test file.
+
+import { assert, assertEquals } from "../../std/testing/asserts.ts";
+
+export interface ResolvableMethods<T> {
+ resolve: (value?: T | PromiseLike<T>) => void;
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ reject: (reason?: any) => void;
+}
+
+export type Resolvable<T> = Promise<T> & ResolvableMethods<T>;
+
+export function createResolvable<T>(): Resolvable<T> {
+ let methods: ResolvableMethods<T>;
+ const promise = new Promise<T>((resolve, reject): void => {
+ methods = { resolve, reject };
+ });
+ // TypeScript doesn't know that the Promise callback occurs synchronously
+ // therefore use of not null assertion (`!`)
+ return Object.assign(promise, methods!) as Resolvable<T>;
+}
+
+Deno.test(async function workersBasic(): Promise<void> {
+ const promise = createResolvable();
+ const jsWorker = new Worker("../tests/subdir/test_worker.js", {
+ type: "module",
+ name: "jsWorker"
+ });
+ const tsWorker = new Worker("../tests/subdir/test_worker.ts", {
+ type: "module",
+ name: "tsWorker"
+ });
+
+ tsWorker.onmessage = (e): void => {
+ assertEquals(e.data, "Hello World");
+ promise.resolve();
+ };
+
+ jsWorker.onmessage = (e): void => {
+ assertEquals(e.data, "Hello World");
+ tsWorker.postMessage("Hello World");
+ };
+
+ jsWorker.onerror = (e: Event): void => {
+ e.preventDefault();
+ jsWorker.postMessage("Hello World");
+ };
+
+ jsWorker.postMessage("Hello World");
+ await promise;
+});
+
+Deno.test(async function nestedWorker(): Promise<void> {
+ const promise = createResolvable();
+
+ const nestedWorker = new Worker("../tests/subdir/nested_worker.js", {
+ type: "module",
+ name: "nested"
+ });
+
+ nestedWorker.onmessage = (e): void => {
+ assert(e.data.type !== "error");
+ promise.resolve();
+ };
+
+ nestedWorker.postMessage("Hello World");
+ await promise;
+});
+
+Deno.test(async function workerThrowsWhenExecuting(): Promise<void> {
+ const promise = createResolvable();
+ const throwingWorker = new Worker("../tests/subdir/throwing_worker.js", {
+ type: "module"
+ });
+
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ throwingWorker.onerror = (e: any): void => {
+ e.preventDefault();
+ assert(/Uncaught Error: Thrown error/.test(e.message));
+ promise.resolve();
+ };
+
+ await promise;
+});
+
+Deno.test(async function workerCanUseFetch(): Promise<void> {
+ const promise = createResolvable();
+
+ const fetchingWorker = new Worker("../tests/subdir/fetching_worker.js", {
+ type: "module"
+ });
+
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ fetchingWorker.onerror = (e: any): void => {
+ e.preventDefault();
+ promise.reject(e.message);
+ };
+
+ // Defer promise.resolve() to allow worker to shut down
+ fetchingWorker.onmessage = (e): void => {
+ assert(e.data === "Done!");
+ promise.resolve();
+ };
+
+ await promise;
+});
+
+await Deno.runTests();