diff options
Diffstat (limited to 'cli/tests')
-rw-r--r-- | cli/tests/026_workers.ts | 26 | ||||
-rw-r--r-- | cli/tests/026_workers.ts.out | 7 | ||||
-rw-r--r-- | cli/tests/integration_tests.rs | 12 | ||||
-rw-r--r-- | cli/tests/subdir/nested_worker.js | 1 | ||||
-rw-r--r-- | cli/tests/subdir/test_worker.js | 3 | ||||
-rw-r--r-- | cli/tests/subdir/test_worker.ts | 1 | ||||
-rw-r--r-- | cli/tests/subdir/test_worker_basic.js | 2 | ||||
-rw-r--r-- | cli/tests/workers_basic.out | 3 | ||||
-rw-r--r-- | cli/tests/workers_basic.ts | 11 | ||||
-rw-r--r-- | cli/tests/workers_test.out | 7 | ||||
-rw-r--r-- | cli/tests/workers_test.ts | 115 |
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(); |