chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
import test from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
|
||||
// Regression: the shared interactive prompt helper (createPrompt) used rl.question
|
||||
// without an EOF guard, so a non-interactive stdin (pipe, CI, `< /dev/null`) left
|
||||
// the promise pending — Node then warned about an "unsettled top-level await" at
|
||||
// exit and the command hung. ask/askSecret now resolve on the readline `close`
|
||||
// event (fired on EOF) with the default / empty string instead of hanging. close()
|
||||
// here simulates that EOF/non-interactive close.
|
||||
|
||||
test("createPrompt.ask resolves the default on EOF (non-interactive, no hang)", async () => {
|
||||
const { createPrompt } = await import("../../bin/cli/io.mjs");
|
||||
const p = createPrompt();
|
||||
const pending = p.ask("Name", "fallback");
|
||||
p.close();
|
||||
assert.equal(await pending, "fallback");
|
||||
});
|
||||
|
||||
test("createPrompt.ask resolves empty when there is no default on EOF", async () => {
|
||||
const { createPrompt } = await import("../../bin/cli/io.mjs");
|
||||
const p = createPrompt();
|
||||
const pending = p.ask("Name");
|
||||
p.close();
|
||||
assert.equal(await pending, "");
|
||||
});
|
||||
|
||||
test("createPrompt.askSecret resolves empty on EOF (no hang)", async () => {
|
||||
const { createPrompt } = await import("../../bin/cli/io.mjs");
|
||||
const p = createPrompt();
|
||||
const pending = p.askSecret("Secret");
|
||||
p.close();
|
||||
assert.equal(await pending, "");
|
||||
});
|
||||
Reference in New Issue
Block a user