diff --git a/helix-term/tests/test/commands/insert.rs b/helix-term/tests/test/commands/insert.rs index 5450cc4c..ac2d179a 100644 --- a/helix-term/tests/test/commands/insert.rs +++ b/helix-term/tests/test/commands/insert.rs @@ -51,3 +51,71 @@ async fn insert_newline_trim_trailing_whitespace() -> anyhow::Result<()> { Ok(()) } + +#[tokio::test(flavor = "multi_thread")] +async fn insert_newline_continue_line_comment() -> anyhow::Result<()> { + // `insert_newline` continues a single line comment + test(( + indoc! {"\ + // Hello world!#[| + ]# + "}, + ":lang rusti", + indoc! {"\ + // Hello world! + // #[| + ]# + "}, + )) + .await?; + + // The comment is not continued if the cursor is before the comment token. (Note that we + // are entering insert-mode with `I`.) + test(( + indoc! {"\ + // Hello world!#[| + ]# + "}, + ":lang rustI", + indoc! {"\ + \n#[/|]#/ Hello world! + "}, + )) + .await?; + + // `insert_newline` again clears the whitespace on the first continued comment and continues + // the comment again. + test(( + indoc! {"\ + // Hello world! + // #[| + ]# + "}, + ":lang rusti", + indoc! {"\ + // Hello world! + // + // #[| + ]# + "}, + )) + .await?; + + // Line comment continuation and trailing whitespace is also trimmed when using + // `insert_newline` in the middle of a comment. + test(( + indoc! {"\ + //·hello····#[|·]#····world + "} + .replace('·', " "), + ":lang rusti", + indoc! {"\ + //·hello + //·#[|·]#····world + "} + .replace('·', " "), + )) + .await?; + + Ok(()) +}