mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-26 21:39:07 +00:00
Update repl state tests
This commit is contained in:
parent
08cf8e727f
commit
c09fd8b7c5
1 changed files with 26 additions and 5 deletions
|
@ -1,8 +1,12 @@
|
||||||
use roc_repl_cli::repl_state::{is_incomplete, ReplState, TIPS};
|
use roc_repl_cli::repl_state::{is_incomplete, ReplState, TIPS};
|
||||||
|
|
||||||
|
// These are tests of the REPL state machine. They work without actually
|
||||||
|
// running the CLI, and without using rustyline, and instead verify
|
||||||
|
// the expected outputs for various sequences of user input strings.
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn one_plus_one() {
|
fn one_plus_one() {
|
||||||
complete("1 + 1", &mut ReplState::new(), Ok("2 : Num * # TODOval1"));
|
complete("1 + 1", &mut ReplState::new(), Ok(("2 : Num *", "val1")));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -19,14 +23,20 @@ fn standalone_annotation() {
|
||||||
assert_eq!(&state.with_past_defs("test"), "test");
|
assert_eq!(&state.with_past_defs("test"), "test");
|
||||||
|
|
||||||
incomplete(&mut input);
|
incomplete(&mut input);
|
||||||
complete(&input, &mut state, Ok(""));
|
assert!(!is_incomplete(&input));
|
||||||
|
assert_eq!(state.step(&input), Ok(String::new()));
|
||||||
|
|
||||||
assert_eq!(&state.with_past_defs("test"), "x : Str\ntest");
|
assert_eq!(&state.with_past_defs("test"), "x : Str\n\ntest");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn multiline_def() {
|
||||||
|
todo!("x =\n1");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// validate and step the given input, then check the Result vs the input
|
/// validate and step the given input, then check the Result vs the input
|
||||||
/// with ANSI escape codes stripped.
|
/// with ANSI escape codes stripped.
|
||||||
fn complete(input: &str, state: &mut ReplState, expected_step_result: Result<&str, i32>) {
|
fn complete(input: &str, state: &mut ReplState, expected_step_result: Result<(&str, &str), i32>) {
|
||||||
assert!(!is_incomplete(input));
|
assert!(!is_incomplete(input));
|
||||||
|
|
||||||
match state.step(input) {
|
match state.step(input) {
|
||||||
|
@ -36,7 +46,18 @@ fn complete(input: &str, state: &mut ReplState, expected_step_result: Result<&st
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
assert_eq!(expected_step_result.map(str::to_string), Ok(escaped));
|
let comment_index = escaped.rfind('#').unwrap_or_else(|| escaped.len());
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
expected_step_result.map(|(starts_with, _)| starts_with),
|
||||||
|
Ok(*&escaped[0..comment_index].trim())
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
expected_step_result.map(|(_, ends_with)| ends_with),
|
||||||
|
// +1 because we want to skip over the '#' itself
|
||||||
|
Ok(*&escaped[comment_index + 1..].trim())
|
||||||
|
);
|
||||||
}
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
assert_eq!(expected_step_result, Err(err));
|
assert_eq!(expected_step_result, Err(err));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue