diff options
author | Yoshiya Hinosawa <stibium121@gmail.com> | 2024-09-19 12:22:01 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-19 12:22:01 +0900 |
commit | f460188e583f00144000aa0d8ade08218d47c3c1 (patch) | |
tree | 9e297db5e591f7234cc833bb0a43bdeb0c4ce18d | |
parent | 282c4c262d3a19fe3ae3fd9ea75811b816e65dc1 (diff) |
fix(ext/node): don't throw error for unsupported signal binding on windows (#25699)
-rw-r--r-- | ext/node/polyfills/process.ts | 12 | ||||
-rw-r--r-- | tests/unit_node/process_test.ts | 28 |
2 files changed, 38 insertions, 2 deletions
diff --git a/ext/node/polyfills/process.ts b/ext/node/polyfills/process.ts index 82f92ebaf..3dc6ce61a 100644 --- a/ext/node/polyfills/process.ts +++ b/ext/node/polyfills/process.ts @@ -517,6 +517,12 @@ Process.prototype.on = function ( // Ignores SIGBREAK if the platform is not windows. } else if (event === "SIGTERM" && Deno.build.os === "windows") { // Ignores SIGTERM on windows. + } else if ( + event !== "SIGBREAK" && event !== "SIGINT" && Deno.build.os === "windows" + ) { + // Ignores all signals except SIGBREAK and SIGINT on windows. + // deno-lint-ignore no-console + console.warn(`Ignoring signal "${event}" on Windows`); } else { EventEmitter.prototype.on.call(this, event, listener); Deno.addSignalListener(event as Deno.Signal, listener); @@ -541,8 +547,10 @@ Process.prototype.off = function ( } else if (event.startsWith("SIG")) { if (event === "SIGBREAK" && Deno.build.os !== "windows") { // Ignores SIGBREAK if the platform is not windows. - } else if (event === "SIGTERM" && Deno.build.os === "windows") { - // Ignores SIGTERM on windows. + } else if ( + event !== "SIGBREAK" && event !== "SIGINT" && Deno.build.os === "windows" + ) { + // Ignores all signals except SIGBREAK and SIGINT on windows. } else { EventEmitter.prototype.off.call(this, event, listener); Deno.removeSignalListener(event as Deno.Signal, listener); diff --git a/tests/unit_node/process_test.ts b/tests/unit_node/process_test.ts index 944686a87..add9e1280 100644 --- a/tests/unit_node/process_test.ts +++ b/tests/unit_node/process_test.ts @@ -25,6 +25,7 @@ import { assertThrows, fail, } from "@std/assert"; +import { assertSpyCall, assertSpyCalls, spy } from "@std/testing/mock"; import { stripAnsiCode } from "@std/fmt/colors"; import * as path from "@std/path"; import { delay } from "@std/async/delay"; @@ -238,6 +239,33 @@ Deno.test({ }, }); +Deno.test({ + name: "process.on - ignored signals on windows", + ignore: Deno.build.os !== "windows", + fn() { + const ignoredSignals = ["SIGHUP", "SIGUSR1", "SIGUSR2"]; + + for (const signal of ignoredSignals) { + using consoleSpy = spy(console, "warn"); + const handler = () => {}; + process.on(signal, handler); + process.off(signal, handler); + assertSpyCall(consoleSpy, 0, { + args: [`Ignoring signal "${signal}" on Windows`], + }); + } + + { + using consoleSpy = spy(console, "warn"); + const handler = () => {}; + process.on("SIGTERM", handler); + process.off("SIGTERM", handler); + // No warning is made for SIGTERM + assertSpyCalls(consoleSpy, 0); + } + }, +}); + Deno.test( { permissions: { run: true, read: true } }, async function processKill() { |