summaryrefslogtreecommitdiff
path: root/cli/js/signal_test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'cli/js/signal_test.ts')
-rw-r--r--cli/js/signal_test.ts185
1 files changed, 185 insertions, 0 deletions
diff --git a/cli/js/signal_test.ts b/cli/js/signal_test.ts
new file mode 100644
index 000000000..06457314c
--- /dev/null
+++ b/cli/js/signal_test.ts
@@ -0,0 +1,185 @@
+// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
+import {
+ test,
+ testPerm,
+ assert,
+ assertEquals,
+ assertThrows
+} from "./test_util.ts";
+
+function defer(n: number): Promise<void> {
+ return new Promise((resolve, _) => {
+ setTimeout(resolve, n);
+ });
+}
+
+if (Deno.build.os === "win") {
+ test(async function signalsNotImplemented(): Promise<void> {
+ assertThrows(
+ () => {
+ Deno.signal(1);
+ },
+ Error,
+ "not implemented"
+ );
+ assertThrows(
+ () => {
+ Deno.signals.alarm(); // for SIGALRM
+ },
+ Error,
+ "not implemented"
+ );
+ assertThrows(
+ () => {
+ Deno.signals.child(); // for SIGCHLD
+ },
+ Error,
+ "not implemented"
+ );
+ assertThrows(
+ () => {
+ Deno.signals.hungup(); // for SIGHUP
+ },
+ Error,
+ "not implemented"
+ );
+ assertThrows(
+ () => {
+ Deno.signals.interrupt(); // for SIGINT
+ },
+ Error,
+ "not implemented"
+ );
+ assertThrows(
+ () => {
+ Deno.signals.io(); // for SIGIO
+ },
+ Error,
+ "not implemented"
+ );
+ assertThrows(
+ () => {
+ Deno.signals.pipe(); // for SIGPIPE
+ },
+ Error,
+ "not implemented"
+ );
+ assertThrows(
+ () => {
+ Deno.signals.quit(); // for SIGQUIT
+ },
+ Error,
+ "not implemented"
+ );
+ assertThrows(
+ () => {
+ Deno.signals.terminate(); // for SIGTERM
+ },
+ Error,
+ "not implemented"
+ );
+ assertThrows(
+ () => {
+ Deno.signals.userDefined1(); // for SIGUSR1
+ },
+ Error,
+ "not implemented"
+ );
+ assertThrows(
+ () => {
+ Deno.signals.userDefined2(); // for SIGURS2
+ },
+ Error,
+ "not implemented"
+ );
+ assertThrows(
+ () => {
+ Deno.signals.windowChange(); // for SIGWINCH
+ },
+ Error,
+ "not implemented"
+ );
+ });
+} else {
+ testPerm({ run: true, net: true }, async function signalStreamTest(): Promise<
+ void
+ > {
+ // This prevents the program from exiting.
+ const t = setInterval(() => {}, 1000);
+
+ let c = 0;
+ const sig = Deno.signal(Deno.Signal.SIGUSR1);
+
+ setTimeout(async () => {
+ await defer(20);
+ for (const _ of Array(3)) {
+ // Sends SIGUSR1 3 times.
+ Deno.kill(Deno.pid, Deno.Signal.SIGUSR1);
+ await defer(20);
+ }
+ sig.dispose();
+ });
+
+ for await (const _ of sig) {
+ c += 1;
+ }
+
+ assertEquals(c, 3);
+
+ clearTimeout(t);
+ });
+
+ testPerm(
+ { run: true, net: true },
+ async function signalPromiseTest(): Promise<void> {
+ // This prevents the program from exiting.
+ const t = setInterval(() => {}, 1000);
+
+ const sig = Deno.signal(Deno.Signal.SIGUSR1);
+ setTimeout(() => {
+ Deno.kill(Deno.pid, Deno.Signal.SIGUSR1);
+ }, 20);
+ await sig;
+ sig.dispose();
+
+ clearTimeout(t);
+ }
+ );
+
+ testPerm({ run: true }, async function signalShorthandsTest(): Promise<void> {
+ let s: Deno.SignalStream;
+ s = Deno.signals.alarm(); // for SIGALRM
+ assert(s instanceof Deno.SignalStream);
+ s.dispose();
+ s = Deno.signals.child(); // for SIGCHLD
+ assert(s instanceof Deno.SignalStream);
+ s.dispose();
+ s = Deno.signals.hungup(); // for SIGHUP
+ assert(s instanceof Deno.SignalStream);
+ s.dispose();
+ s = Deno.signals.interrupt(); // for SIGINT
+ assert(s instanceof Deno.SignalStream);
+ s.dispose();
+ s = Deno.signals.io(); // for SIGIO
+ assert(s instanceof Deno.SignalStream);
+ s.dispose();
+ s = Deno.signals.pipe(); // for SIGPIPE
+ assert(s instanceof Deno.SignalStream);
+ s.dispose();
+ s = Deno.signals.quit(); // for SIGQUIT
+ assert(s instanceof Deno.SignalStream);
+ s.dispose();
+ s = Deno.signals.terminate(); // for SIGTERM
+ assert(s instanceof Deno.SignalStream);
+ s.dispose();
+ s = Deno.signals.userDefined1(); // for SIGUSR1
+ assert(s instanceof Deno.SignalStream);
+ s.dispose();
+ s = Deno.signals.userDefined2(); // for SIGURS2
+ assert(s instanceof Deno.SignalStream);
+ s.dispose();
+ s = Deno.signals.windowChange(); // for SIGWINCH
+ assert(s instanceof Deno.SignalStream);
+ s.dispose();
+ });
+}