summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
Diffstat (limited to 'cli')
-rw-r--r--cli/Cargo.toml2
-rw-r--r--cli/tests/integration/run_tests.rs179
-rw-r--r--cli/tests/testdata/run/066_prompt.ts21
3 files changed, 54 insertions, 148 deletions
diff --git a/cli/Cargo.toml b/cli/Cargo.toml
index ad9974070..dc9bd1228 100644
--- a/cli/Cargo.toml
+++ b/cli/Cargo.toml
@@ -118,7 +118,7 @@ quick-junit = "^0.3.5"
rand = { workspace = true, features = ["small_rng"] }
regex.workspace = true
ring.workspace = true
-rustyline.workspace = true
+rustyline = { version = "=13.0.0", default-features = false, features = ["custom-bindings", "with-file-history"] }
rustyline-derive = "=0.7.0"
serde.workspace = true
serde_repr.workspace = true
diff --git a/cli/tests/integration/run_tests.rs b/cli/tests/integration/run_tests.rs
index 16425b14e..43bc212c6 100644
--- a/cli/tests/integration/run_tests.rs
+++ b/cli/tests/integration/run_tests.rs
@@ -2807,155 +2807,40 @@ mod permissions {
fn _066_prompt() {
TestContext::default()
.new_command()
- .args_vec(["repl"])
+ .args_vec(["run", "--quiet", "--unstable", "run/066_prompt.ts"])
.with_pty(|mut console| {
- // alert with no message displays default "Alert"
- // alert displays "[Press any key to continue]"
- // alert can be closed with Enter key
- console.write_line_raw("alert()");
- console.expect("Alert [Press any key to continue]");
- console.write_raw("\r"); // Enter
- console.expect("undefined");
-
- // alert can be closed with Escape key
- console.write_line_raw("alert()");
- console.expect("Alert [Press any key to continue]");
- console.write_raw("\x1b"); // Escape
- console.expect("undefined");
-
- // alert can display custom text
- // alert can be closed with arbitrary keyboard key (x)
- if !cfg!(windows) {
- // it seems to work on windows, just not in the tests
- console.write_line_raw("alert('foo')");
- console.expect("foo [Press any key to continue]");
- console.write_raw("x");
- console.expect("undefined");
- }
-
- // confirm with no message displays default "Confirm"
- // confirm returns true by immediately pressing Enter
- console.write_line_raw("confirm()");
- console.expect("Confirm [Y/n]");
- console.write_raw("\r"); // Enter
- console.expect("true");
-
- // tese seem to work on windows, just not in the tests
- if !cfg!(windows) {
- // confirm returns false by pressing Escape
- console.write_line_raw("confirm()");
- console.expect("Confirm [Y/n]");
- console.write_raw("\x1b"); // Escape
- console.expect("false");
-
- // confirm can display custom text
- // confirm returns true by pressing y
- console.write_line_raw("confirm('continue?')");
- console.expect("continue? [Y/n]");
- console.write_raw("y");
- console.expect("true");
-
- // confirm returns false by pressing n
- console.write_line_raw("confirm('continue?')");
- console.expect("continue? [Y/n]");
- console.write_raw("n");
- console.expect("false");
-
- // confirm can display custom text
- // confirm returns true by pressing Y
- console.write_line_raw("confirm('continue?')");
- console.expect("continue? [Y/n]");
- console.write_raw("Y");
- console.expect("true");
-
- // confirm returns false by pressing N
- console.write_line_raw("confirm('continue?')");
- console.expect("continue? [Y/n]");
- console.write_raw("N");
- console.expect("false");
- }
-
- // prompt with no message displays default "Prompt"
- // prompt returns user-inserted text
- console.write_line_raw("prompt()");
+ console.expect("What is your name? [Jane Doe] ");
+ console.write_line_raw("John Doe");
+ console.expect("Your name is John Doe.");
+ console.expect("What is your name? [Jane Doe] ");
+ console.write_line_raw("");
+ console.expect("Your name is Jane Doe.");
console.expect("Prompt ");
- console.write_line_raw("abc");
- console.expect("\"abc\"");
-
- // prompt can display custom text
- // prompt with no default value returns empty string when immediately pressing Enter
- console.write_line_raw("prompt('foo')");
- console.expect("foo ");
- console.write_raw("\r"); // Enter
- console.expect("\"\"");
-
- // prompt with non-string default value converts it to string
- console.write_line_raw("prompt('foo', 1)");
- console.expect("foo 1");
- console.write_raw("\r"); // Enter
- console.expect("\"1\"");
-
- // prompt with non-string default value that can't be converted throws an error
- console.write_line_raw("prompt('foo', Symbol())");
- console.expect(
- "Uncaught TypeError: Cannot convert a Symbol value to a string",
- );
-
- // prompt with empty-string default value returns empty string when immediately pressing Enter
- console.write_line_raw("prompt('foo', '')");
- console.expect("foo ");
- console.write_raw("\r"); // Enter
- console.expect("\"\"");
-
- // prompt with contentful default value returns default value when immediately pressing Enter
- console.write_line_raw("prompt('foo', 'bar')");
- console.expect("foo bar");
- console.write_raw("\r"); // Enter
- console.expect("\"bar\"");
-
- // prompt with contentful default value allows editing of default value
- console.write_line_raw("prompt('foo', 'bar')");
- console.expect("foo bar");
- console.write_raw("\x1b[D"); // Left arrow
- console.write_raw("\x1b[D"); // Left arrow
- console.write_raw("\x7f"); // Backspace
- console.write_raw("c");
- console.expect("foo car");
- console.write_raw("\r"); // Enter
- console.expect("\"car\"");
-
- // prompt returns null by pressing Escape
- console.write_line_raw("prompt()");
- console.expect("Prompt ");
- console.write_raw("\x1b"); // Escape
- console.expect("null");
-
- #[cfg(not(any(target_os = "macos", target_os = "windows")))]
- {
- // confirm returns false by pressing Ctrl+C
- console.write_line_raw("confirm()");
- console.expect("Confirm [Y/n] ");
- console.write_raw("\x03"); // Ctrl+C
- console.expect("false");
-
- // confirm returns false by pressing Ctrl+D
- console.write_line_raw("confirm()");
- console.expect("Confirm [Y/n] ");
- console.write_raw("\x04"); // Ctrl+D
- console.expect("false");
-
- // prompt returns null by pressing Ctrl+C
- console.write_line_raw("prompt()");
- console.expect("Prompt ");
- console.write_raw("\x03"); // Ctrl+C
- console.expect("null");
-
- // prompt returns null by pressing Ctrl+D
- console.write_line_raw("prompt()");
- console.expect("Prompt ");
- console.write_raw("\x04"); // Ctrl+D
- console.expect("null");
- }
+ console.write_line_raw("foo");
+ console.expect("Your input is foo.");
+ console.expect("Question 0 [y/N] ");
+ console.write_line_raw("Y");
+ console.expect("Your answer is true");
+ console.expect("Question 1 [y/N] ");
+ console.write_line_raw("N");
+ console.expect("Your answer is false");
+ console.expect("Question 2 [y/N] ");
+ console.write_line_raw("yes");
+ console.expect("Your answer is false");
+ console.expect("Confirm [y/N] ");
+ console.write_line("");
+ console.expect("Your answer is false");
+ console.expect("What is Windows EOL? ");
+ console.write_line("windows");
+ console.expect("Your answer is \"windows\"");
+ console.expect("Hi [Enter] ");
+ console.write_line("");
+ console.expect("Alert [Enter] ");
+ console.write_line("");
+ console.expect("The end of test");
+ console.expect("What is EOF? ");
+ console.write_line("");
+ console.expect("Your answer is null");
});
}
diff --git a/cli/tests/testdata/run/066_prompt.ts b/cli/tests/testdata/run/066_prompt.ts
new file mode 100644
index 000000000..e3daa7ac0
--- /dev/null
+++ b/cli/tests/testdata/run/066_prompt.ts
@@ -0,0 +1,21 @@
+const name0 = prompt("What is your name?", "Jane Doe"); // Answer John Doe
+console.log(`Your name is ${name0}.`);
+const name1 = prompt("What is your name?", "Jane Doe"); // Answer with default
+console.log(`Your name is ${name1}.`);
+const input = prompt(); // Answer foo
+console.log(`Your input is ${input}.`);
+const answer0 = confirm("Question 0"); // Answer y
+console.log(`Your answer is ${answer0}`);
+const answer1 = confirm("Question 1"); // Answer n
+console.log(`Your answer is ${answer1}`);
+const answer2 = confirm("Question 2"); // Answer with yes (returns false)
+console.log(`Your answer is ${answer2}`);
+const answer3 = confirm(); // Answer with default
+console.log(`Your answer is ${answer3}`);
+const windows = prompt("What is Windows EOL?");
+console.log(`Your answer is ${JSON.stringify(windows)}`);
+alert("Hi");
+alert();
+console.log("The end of test");
+const eof = prompt("What is EOF?");
+console.log(`Your answer is ${JSON.stringify(eof)}`);