Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-term/tests/test/command_line.rs')
| -rw-r--r-- | helix-term/tests/test/command_line.rs | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/helix-term/tests/test/command_line.rs b/helix-term/tests/test/command_line.rs new file mode 100644 index 00000000..d9a01669 --- /dev/null +++ b/helix-term/tests/test/command_line.rs @@ -0,0 +1,92 @@ +use super::*; + +use helix_core::diagnostic::Severity; + +#[tokio::test(flavor = "multi_thread")] +async fn history_completion() -> anyhow::Result<()> { + test_key_sequence( + &mut AppBuilder::new().build()?, + Some(":asdf<ret>:theme d<C-n><tab>"), + Some(&|app| { + assert!(!app.editor.is_err()); + }), + false, + ) + .await?; + + Ok(()) +} + +async fn test_statusline( + line: &str, + expected_status: &str, + expected_severity: Severity, +) -> anyhow::Result<()> { + test_key_sequence( + &mut AppBuilder::new().build()?, + Some(&format!("{line}<ret>")), + Some(&|app| { + let (status, &severity) = app.editor.get_status().unwrap(); + assert_eq!( + severity, expected_severity, + "'{line}' printed {severity:?}: {status}" + ); + assert_eq!(status.as_ref(), expected_status); + }), + false, + ) + .await +} + +#[tokio::test(flavor = "multi_thread")] +async fn variable_expansion() -> anyhow::Result<()> { + test_statusline(r#":echo %{cursor_line}"#, "1", Severity::Info).await?; + // Double quotes can be used with expansions: + test_statusline( + r#":echo "line%{cursor_line}line""#, + "line1line", + Severity::Info, + ) + .await?; + // Within double quotes you can escape the percent token for an expansion by doubling it. + test_statusline( + r#":echo "%%{cursor_line}""#, + "%{cursor_line}", + Severity::Info, + ) + .await?; + + Ok(()) +} + +#[tokio::test(flavor = "multi_thread")] +async fn unicode_expansion() -> anyhow::Result<()> { + test_statusline(r#":echo %u{20}"#, " ", Severity::Info).await?; + test_statusline(r#":echo %u{0020}"#, " ", Severity::Info).await?; + test_statusline(r#":echo %u{25CF}"#, "●", Severity::Info).await?; + // Not a valid Unicode codepoint: + test_statusline( + r#":echo %u{deadbeef}"#, + "'echo': could not interpret 'deadbeef' as a Unicode character code", + Severity::Error, + ) + .await?; + + Ok(()) +} + +#[cfg(unix)] +#[tokio::test(flavor = "multi_thread")] +async fn shell_expansion() -> anyhow::Result<()> { + test_statusline( + r#":echo %sh{echo "hello world"}"#, + "hello world", + Severity::Info, + ) + .await?; + + // Shell expansion is recursive. + test_statusline(":echo %sh{echo '%{cursor_line}'}", "1", Severity::Info).await?; + + Ok(()) +} |