summaryrefslogtreecommitdiff
path: root/std/signal/test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'std/signal/test.ts')
-rw-r--r--std/signal/test.ts53
1 files changed, 53 insertions, 0 deletions
diff --git a/std/signal/test.ts b/std/signal/test.ts
new file mode 100644
index 000000000..cff9672e5
--- /dev/null
+++ b/std/signal/test.ts
@@ -0,0 +1,53 @@
+import { test, assertEquals, assertThrows } from "../testing/mod.ts";
+import { delay } from "../util/async.ts";
+import { signal } from "./mod.ts";
+
+if (Deno.build.os !== "win") {
+ test("signal() throws when called with empty signals", (): void => {
+ assertThrows(
+ () => {
+ // @ts-ignore
+ signal();
+ },
+ Error,
+ "No signals are given. You need to specify at least one signal to create a signal stream."
+ );
+ });
+
+ test("signal() iterates for multiple signals", async (): Promise<void> => {
+ // This prevents the program from exiting.
+ const t = setInterval(() => {}, 1000);
+
+ let c = 0;
+ const sig = signal(
+ Deno.Signal.SIGUSR1,
+ Deno.Signal.SIGUSR2,
+ Deno.Signal.SIGINT
+ );
+
+ setTimeout(async () => {
+ await delay(20);
+ Deno.kill(Deno.pid, Deno.Signal.SIGINT);
+ await delay(20);
+ Deno.kill(Deno.pid, Deno.Signal.SIGUSR2);
+ await delay(20);
+ Deno.kill(Deno.pid, Deno.Signal.SIGUSR1);
+ await delay(20);
+ Deno.kill(Deno.pid, Deno.Signal.SIGUSR2);
+ await delay(20);
+ Deno.kill(Deno.pid, Deno.Signal.SIGUSR1);
+ await delay(20);
+ Deno.kill(Deno.pid, Deno.Signal.SIGINT);
+ await delay(20);
+ sig.dispose();
+ });
+
+ for await (const _ of sig) {
+ c += 1;
+ }
+
+ assertEquals(c, 6);
+
+ clearTimeout(t);
+ });
+}