mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-22 17:36:19 +04:00
rename test helpers
This commit is contained in:
parent
526c9be8ca
commit
7c0bca186c
@ -13,13 +13,7 @@ mod test {
|
|||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn hello_world() -> anyhow::Result<()> {
|
async fn hello_world() -> anyhow::Result<()> {
|
||||||
test_key_sequence_text_result(
|
test(("#[\n|]#", "ihello world<esc>", "hello world#[|\n]#")).await?;
|
||||||
Args::default(),
|
|
||||||
Config::default(),
|
|
||||||
("#[\n|]#", "ihello world<esc>", "hello world#[|\n]#"),
|
|
||||||
)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn auto_indent_c() -> anyhow::Result<()> {
|
async fn auto_indent_c() -> anyhow::Result<()> {
|
||||||
test_key_sequence_text_result(
|
test_with_config(
|
||||||
Args {
|
Args {
|
||||||
files: vec![(PathBuf::from("foo.c"), Position::default())],
|
files: vec![(PathBuf::from("foo.c"), Position::default())],
|
||||||
..Default::default()
|
..Default::default()
|
||||||
|
@ -2,14 +2,9 @@
|
|||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn auto_pairs_basic() -> anyhow::Result<()> {
|
async fn auto_pairs_basic() -> anyhow::Result<()> {
|
||||||
test_key_sequence_text_result(
|
test(("#[\n|]#", "i(<esc>", "(#[|)]#\n")).await?;
|
||||||
Args::default(),
|
|
||||||
Config::default(),
|
|
||||||
("#[\n|]#", "i(<esc>", "(#[|)]#\n"),
|
|
||||||
)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
test_key_sequence_text_result(
|
test_with_config(
|
||||||
Args::default(),
|
Args::default(),
|
||||||
Config {
|
Config {
|
||||||
editor: helix_view::editor::Config {
|
editor: helix_view::editor::Config {
|
||||||
|
@ -41,6 +41,7 @@ pub async fn test_key_sequence(
|
|||||||
test_key_sequences(app, vec![(in_keys, test_fn)]).await
|
test_key_sequences(app, vec![(in_keys, test_fn)]).await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::type_complexity)]
|
||||||
pub async fn test_key_sequences(
|
pub async fn test_key_sequences(
|
||||||
app: &mut Application,
|
app: &mut Application,
|
||||||
inputs: Vec<(Option<&str>, Option<&dyn Fn(&Application)>)>,
|
inputs: Vec<(Option<&str>, Option<&dyn Fn(&Application)>)>,
|
||||||
@ -51,7 +52,7 @@ pub async fn test_key_sequences(
|
|||||||
|
|
||||||
for (in_keys, test_fn) in inputs {
|
for (in_keys, test_fn) in inputs {
|
||||||
if let Some(in_keys) = in_keys {
|
if let Some(in_keys) = in_keys {
|
||||||
for key_event in parse_macro(&in_keys)?.into_iter() {
|
for key_event in parse_macro(in_keys)?.into_iter() {
|
||||||
tx.send(Ok(Event::Key(KeyEvent::from(key_event))))?;
|
tx.send(Ok(Event::Key(KeyEvent::from(key_event))))?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -92,7 +93,7 @@ pub async fn test_key_sequence_with_input_text<T: Into<TestCase>>(
|
|||||||
|
|
||||||
// replace the initial text with the input text
|
// replace the initial text with the input text
|
||||||
doc.apply(
|
doc.apply(
|
||||||
&Transaction::change_by_selection(&doc.text(), &sel, |_| {
|
&Transaction::change_by_selection(doc.text(), &sel, |_| {
|
||||||
(0, doc.text().len_chars(), Some((&test_case.in_text).into()))
|
(0, doc.text().len_chars(), Some((&test_case.in_text).into()))
|
||||||
})
|
})
|
||||||
.with_selection(test_case.in_selection.clone()),
|
.with_selection(test_case.in_selection.clone()),
|
||||||
@ -105,7 +106,7 @@ pub async fn test_key_sequence_with_input_text<T: Into<TestCase>>(
|
|||||||
/// Use this for very simple test cases where there is one input
|
/// Use this for very simple test cases where there is one input
|
||||||
/// document, selection, and sequence of key presses, and you just
|
/// document, selection, and sequence of key presses, and you just
|
||||||
/// want to verify the resulting document and selection.
|
/// want to verify the resulting document and selection.
|
||||||
pub async fn test_key_sequence_text_result<T: Into<TestCase>>(
|
pub async fn test_with_config<T: Into<TestCase>>(
|
||||||
args: Args,
|
args: Args,
|
||||||
config: Config,
|
config: Config,
|
||||||
test_case: T,
|
test_case: T,
|
||||||
@ -126,6 +127,10 @@ pub async fn test_key_sequence_text_result<T: Into<TestCase>>(
|
|||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn test<T: Into<TestCase>>(test_case: T) -> anyhow::Result<()> {
|
||||||
|
test_with_config(Args::default(), Config::default(), test_case).await
|
||||||
|
}
|
||||||
|
|
||||||
pub fn temp_file_with_contents<S: AsRef<str>>(
|
pub fn temp_file_with_contents<S: AsRef<str>>(
|
||||||
content: S,
|
content: S,
|
||||||
) -> anyhow::Result<tempfile::NamedTempFile> {
|
) -> anyhow::Result<tempfile::NamedTempFile> {
|
||||||
@ -148,7 +153,7 @@ pub fn platform_line(input: &str) -> String {
|
|||||||
|
|
||||||
// we can assume that the source files in this code base will always
|
// we can assume that the source files in this code base will always
|
||||||
// be LF, so indoc strings will always insert LF
|
// be LF, so indoc strings will always insert LF
|
||||||
let mut output = input.replace("\n", line_end);
|
let mut output = input.replace('\n', line_end);
|
||||||
|
|
||||||
if !output.ends_with(line_end) {
|
if !output.ends_with(line_end) {
|
||||||
output.push_str(line_end);
|
output.push_str(line_end);
|
||||||
|
@ -4,39 +4,18 @@
|
|||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn insert_mode_cursor_position() -> anyhow::Result<()> {
|
async fn insert_mode_cursor_position() -> anyhow::Result<()> {
|
||||||
test_key_sequence_text_result(
|
test(TestCase {
|
||||||
Args::default(),
|
in_text: String::new(),
|
||||||
Config::default(),
|
in_selection: Selection::single(0, 0),
|
||||||
TestCase {
|
in_keys: "i".into(),
|
||||||
in_text: String::new(),
|
out_text: String::new(),
|
||||||
in_selection: Selection::single(0, 0),
|
out_selection: Selection::single(0, 0),
|
||||||
in_keys: "i".into(),
|
})
|
||||||
out_text: String::new(),
|
|
||||||
out_selection: Selection::single(0, 0),
|
|
||||||
},
|
|
||||||
)
|
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
test_key_sequence_text_result(
|
test(("#[\n|]#", "i", "#[|\n]#")).await?;
|
||||||
Args::default(),
|
test(("#[\n|]#", "i<esc>", "#[|\n]#")).await?;
|
||||||
Config::default(),
|
test(("#[\n|]#", "i<esc>i", "#[|\n]#")).await?;
|
||||||
("#[\n|]#", "i", "#[|\n]#"),
|
|
||||||
)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
test_key_sequence_text_result(
|
|
||||||
Args::default(),
|
|
||||||
Config::default(),
|
|
||||||
("#[\n|]#", "i<esc>", "#[|\n]#"),
|
|
||||||
)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
test_key_sequence_text_result(
|
|
||||||
Args::default(),
|
|
||||||
Config::default(),
|
|
||||||
("#[\n|]#", "i<esc>i", "#[|\n]#"),
|
|
||||||
)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -44,62 +23,44 @@ async fn insert_mode_cursor_position() -> anyhow::Result<()> {
|
|||||||
/// Range direction is preserved when escaping insert mode to normal
|
/// Range direction is preserved when escaping insert mode to normal
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn insert_to_normal_mode_cursor_position() -> anyhow::Result<()> {
|
async fn insert_to_normal_mode_cursor_position() -> anyhow::Result<()> {
|
||||||
test_key_sequence_text_result(
|
test(("#[f|]#oo\n", "vll<A-;><esc>", "#[|foo]#\n")).await?;
|
||||||
Args::default(),
|
test((
|
||||||
Config::default(),
|
indoc! {"\
|
||||||
("#[f|]#oo\n", "vll<A-;><esc>", "#[|foo]#\n"),
|
|
||||||
)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
test_key_sequence_text_result(
|
|
||||||
Args::default(),
|
|
||||||
Config::default(),
|
|
||||||
(
|
|
||||||
indoc! {"\
|
|
||||||
#[f|]#oo
|
#[f|]#oo
|
||||||
#(b|)#ar"
|
#(b|)#ar"
|
||||||
},
|
},
|
||||||
"vll<A-;><esc>",
|
"vll<A-;><esc>",
|
||||||
indoc! {"\
|
indoc! {"\
|
||||||
#[|foo]#
|
#[|foo]#
|
||||||
#(|bar)#"
|
#(|bar)#"
|
||||||
},
|
},
|
||||||
),
|
))
|
||||||
)
|
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
test_key_sequence_text_result(
|
test((
|
||||||
Args::default(),
|
indoc! {"\
|
||||||
Config::default(),
|
|
||||||
(
|
|
||||||
indoc! {"\
|
|
||||||
#[f|]#oo
|
#[f|]#oo
|
||||||
#(b|)#ar"
|
#(b|)#ar"
|
||||||
},
|
},
|
||||||
"a",
|
"a",
|
||||||
indoc! {"\
|
indoc! {"\
|
||||||
#[fo|]#o
|
#[fo|]#o
|
||||||
#(ba|)#r"
|
#(ba|)#r"
|
||||||
},
|
},
|
||||||
),
|
))
|
||||||
)
|
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
test_key_sequence_text_result(
|
test((
|
||||||
Args::default(),
|
indoc! {"\
|
||||||
Config::default(),
|
|
||||||
(
|
|
||||||
indoc! {"\
|
|
||||||
#[f|]#oo
|
#[f|]#oo
|
||||||
#(b|)#ar"
|
#(b|)#ar"
|
||||||
},
|
},
|
||||||
"a<esc>",
|
"a<esc>",
|
||||||
indoc! {"\
|
indoc! {"\
|
||||||
#[f|]#oo
|
#[f|]#oo
|
||||||
#(b|)#ar"
|
#(b|)#ar"
|
||||||
},
|
},
|
||||||
),
|
))
|
||||||
)
|
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
Loading…
Reference in New Issue
Block a user