From bc44c7bcd04eca020509d51dfc20949a4096af97 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Sat, 18 Oct 2025 14:29:20 +0100 Subject: [PATCH] add another test for 'df' motion, checking that we leave a newline behind if the whole buffer is deleted --- fcore/normal-mode/make-normal-delete.sml | 3 +++ test/normal-delete.sml | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/fcore/normal-mode/make-normal-delete.sml b/fcore/normal-mode/make-normal-delete.sml index c3e47e1..99ae1fe 100644 --- a/fcore/normal-mode/make-normal-delete.sml +++ b/fcore/normal-mode/make-normal-delete.sml @@ -728,6 +728,9 @@ struct val initialMsg = Fn.initMsgs (cursorIdx, length, buffer) val buffer = LineGap.delete (cursorIdx, length, buffer) + val buffer = + if #textLength buffer = 0 then LineGap.fromString "\n" else buffer + val buffer = LineGap.goToIdx (cursorIdx, buffer) val cursorIdx = if Cursor.isOnNewlineAfterChr (buffer, cursorIdx) then cursorIdx - 1 diff --git a/test/normal-delete.sml b/test/normal-delete.sml index 98ecc7f..65aca5f 100644 --- a/test/normal-delete.sml +++ b/test/normal-delete.sml @@ -3598,6 +3598,24 @@ struct (actualString = expectedString andalso cursorIdx = expectedCursorIdx) end) + , test "leaves a newline behind if whole buffer is deleted" (fn _ => + let + (* arrange *) + val originalString = "hey hello\n" + val app = TestUtils.init originalString + val app = AppWith.idx (app, 0) + + (* act *) + val {buffer, cursorIdx, ...} = TestUtils.updateMany (app, "dfo") + + (* assert *) + val actualString = LineGap.toString buffer + val expectedString = "\n" + val expectedCursorIdx = 0 + in + Expect.isTrue + (actualString = expectedString andalso cursorIdx = expectedCursorIdx) + end) ] val dtDelete = describe "delete motion 'dt'"