From 94eb3de7767c5d16344bec9634028f346cd867bb Mon Sep 17 00:00:00 2001 From: Michael Davis Date: Wed, 23 Nov 2022 08:57:09 -0600 Subject: [PATCH] Add test case that panics on undo This case panics since undo/redo call View::apply and here, the edit that moves the jumplist selection out-of-bounds is not yet applied when View::apply is called in undo/redo. View::apply should only be called by the EditorView now. --- helix-term/tests/test/commands.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/helix-term/tests/test/commands.rs b/helix-term/tests/test/commands.rs index 114bf2221..27dbd9d7c 100644 --- a/helix-term/tests/test/commands.rs +++ b/helix-term/tests/test/commands.rs @@ -283,3 +283,19 @@ async fn test_multi_selection_shell_commands() -> anyhow::Result<()> { Ok(()) } + +#[tokio::test(flavor = "multi_thread")] +async fn test_undo_redo() -> anyhow::Result<()> { + // A jumplist selection is passed through an edit and then an undo and then a redo. + // + // * [ Add a newline at line start. We're now on line 2. + // * Save the selection on line 2 in the jumplist. + // * kd Delete line 1. The jumplist selection should be adjusted to the new line 1. + // * uU Undo and redo the `kd` edit. + // * Jump back in the jumplist. This would panic if the jumplist were not being + // updated correctly. + // * Jump forward to line 1. + test(("#[|]#", "[kduU", "#[|]#")).await?; + + Ok(()) +}