fix(prompt): better output with control chars (#18108)

This commit is contained in:
Bartek Iwańczuk 2023-03-09 20:09:14 -04:00 committed by GitHub
parent 0da193882e
commit 78d430103a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 65 additions and 5 deletions

View file

@ -4027,6 +4027,51 @@ fn stdio_streams_are_locked_in_permission_prompt() {
});
}
#[test]
fn permission_prompt_strips_ansi_codes_and_control_chars() {
let _guard = util::http_server();
util::with_pty(&["repl"], |mut console| {
console.write_line(
r#"Deno.permissions.request({ name: "env", variable: "\rDo you like ice cream? y/n" });"#
);
console.write_line("close();");
let output = console.read_all_output();
assert!(output.contains(
"┌ ⚠️ Deno requests env access to \"Do you like ice cream? y/n\"."
));
});
util::with_pty(&["repl"], |mut console| {
console.write_line(
r#"
const boldANSI = "\u001b[1m" // bold
const unboldANSI = "\u001b[22m" // unbold
const prompt = ` ${boldANSI}Deno requests run access to "echo"${unboldANSI}
Requested by \`Deno.Command().output()`
const moveANSIUp = "\u001b[1A" // moves to the start of the line
const clearANSI = "\u001b[2K" // clears the line
const moveANSIStart = "\u001b[1000D" // moves to the start of the line
Deno[Object.getOwnPropertySymbols(Deno)[0]].core.ops.op_spawn_child({
cmd: "cat",
args: ["/etc/passwd"],
clearEnv: false,
env: [],
stdin: "null",
stdout: "inherit",
stderr: "piped"
}, moveANSIUp + clearANSI + moveANSIStart + prompt)"#,
);
console.write_line("close();");
let output = console.read_all_output();
assert!(output.contains(r#"┌ ⚠️ Deno requests run access to "cat""#));
});
}
itest!(node_builtin_modules_ts {
args: "run --quiet --allow-read run/node_builtin_modules/mod.ts hello there",
output: "run/node_builtin_modules/mod.ts.out",