mirror of
https://github.com/denoland/deno.git
synced 2024-12-23 15:49:44 -05:00
fix(ext/node): support stdin: "inherit" in node:child_process (#23110)
Fixes https://github.com/denoland/deno/issues/23051
This commit is contained in:
parent
de0b230078
commit
bca0fe1cde
2 changed files with 34 additions and 1 deletions
|
@ -866,7 +866,7 @@ export function spawnSync(
|
|||
windowsVerbatimArguments = false,
|
||||
} = options;
|
||||
const [
|
||||
_stdin_ = "pipe", // TODO(bartlomieju): use this?
|
||||
stdin_ = "pipe",
|
||||
stdout_ = "pipe",
|
||||
stderr_ = "pipe",
|
||||
_channel, // TODO(kt3k): handle this correctly
|
||||
|
@ -881,6 +881,7 @@ export function spawnSync(
|
|||
env: mapValues(env, (value) => value.toString()),
|
||||
stdout: toDenoStdio(stdout_),
|
||||
stderr: toDenoStdio(stderr_),
|
||||
stdin: stdin_ == "inherit" ? "inherit" : "null",
|
||||
uid,
|
||||
gid,
|
||||
windowsRawArguments: windowsVerbatimArguments,
|
||||
|
|
|
@ -823,3 +823,35 @@ Deno.test(function spawnCommandNullStdioArray() {
|
|||
|
||||
assertEquals(ret.status, 0);
|
||||
});
|
||||
|
||||
Deno.test(
|
||||
function stdinInherit() {
|
||||
const script = `
|
||||
function timeoutPromise(promise, timeout) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const timeoutId = setTimeout(() => {
|
||||
Deno.exit(69);
|
||||
}, timeout);
|
||||
promise.then((value) => {
|
||||
clearTimeout(timeoutId);
|
||||
resolve(value);
|
||||
}, (reason) => {
|
||||
clearTimeout(timeoutId);
|
||||
reject(reason);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
await timeoutPromise(Deno.stdin.read(new Uint8Array(1)), 100)
|
||||
`;
|
||||
|
||||
const output = spawnSync(Deno.execPath(), ["eval", script], {
|
||||
stdio: "inherit",
|
||||
});
|
||||
|
||||
// We want to timeout to occur because the stdin isn't 'null'
|
||||
assertEquals(output.status, 69);
|
||||
assertEquals(output.stdout, null);
|
||||
assertEquals(output.stderr, null);
|
||||
},
|
||||
);
|
||||
|
|
Loading…
Reference in a new issue