add search-list-deletion tests for 'dj' motion

This commit is contained in:
2026-02-08 11:49:03 +00:00
parent bb4d1d318e
commit c87ef22ec7

View File

@@ -225,7 +225,7 @@ struct
end) end)
, test , test
"deletes match in search list \ "deletes match in search list \
\when match no longer exists in buffer \after buffer is deleted" \when match no longer exists in buffer after deletion"
(fn _ => (fn _ =>
let let
(* arrange *) (* arrange *)
@@ -734,6 +734,152 @@ struct
in in
Expect.isTrue (stringIsExpected andalso cursorIdxIsExpected) Expect.isTrue (stringIsExpected andalso cursorIdxIsExpected)
end) end)
, test "has same searchList when deleting after all matches" (fn _ =>
let
(* arrange *)
val originalIdx = 7
val originalString = "hello\nworld\ntest\n"
val app = TestUtils.init originalString
val app = AppWith.idx (app, originalIdx)
val app = TestUtils.updateMany (app, "/he")
val app = AppUpdate.update (app, InputMsg.KEY_ENTER, Time.now ())
(* act *)
val newApp = TestUtils.updateMany (app, "dj")
in
(* assert *)
Expect.isTrue (#searchList app = #searchList newApp)
end)
, test "decrements search list when we delete lines preceding match"
(fn _ =>
let
(* arrange *)
val originalIdx = 0
val originalString = "hello\nworld\ntest\n"
val app = TestUtils.init originalString
val app = AppWith.idx (app, originalIdx)
val app = TestUtils.updateMany (app, "/test")
val app = AppUpdate.update (app, InputMsg.KEY_ENTER, Time.now ())
(* act *)
val newApp = TestUtils.updateMany (app, "dj")
(* assert *)
val oldSearchList = #searchList app
val oldSearchList = PersistentVector.toList oldSearchList
val newSearchList = #searchList newApp
val newSearchList = PersistentVector.toList newSearchList
val expectedOldSearchList = [{start = 12, finish = 15}]
val expectedNewSearchList = [{start = 0, finish = 3}]
val assertion =
oldSearchList = expectedOldSearchList
andalso newSearchList = expectedNewSearchList
in
Expect.isTrue assertion
end)
, test "recognises new match when there is a match after deletion" (fn _ =>
let
(* arrange *)
val originalIdx = 6
val originalString = "hello\nworld\ntest\nagain\n"
val app = TestUtils.init originalString
val app = AppWith.idx (app, originalIdx)
val app = TestUtils.updateMany (app, "/hello\nag")
val app = AppUpdate.update (app, InputMsg.KEY_ENTER, Time.now ())
(* act *)
val newApp = TestUtils.updateMany (app, "dj")
(* assert *)
val oldSearchList = #searchList app
val oldSearchList = PersistentVector.toList oldSearchList
val newSearchList = #searchList newApp
val newSearchList = PersistentVector.toList newSearchList
val expectedOldSearchList = []
val expectedNewSearchList = [{start = 0, finish = 7}]
val assertion =
oldSearchList = expectedOldSearchList
andalso newSearchList = expectedNewSearchList
in
Expect.isTrue assertion
end)
, test
"extends existing match when existing match should extend after deletion"
(fn _ =>
let
(* arrange *)
val originalIdx = 6
val originalString = "hello\noorld\ntest\nooooo\n"
val app = TestUtils.init originalString
val app = AppWith.idx (app, originalIdx)
val app = TestUtils.updateMany (app, "/o\no+")
val app = AppUpdate.update (app, InputMsg.KEY_ENTER, Time.now ())
(* act *)
val newApp = TestUtils.updateMany (app, "dj")
(* assert *)
val oldSearchList = #searchList app
val oldSearchList = PersistentVector.toList oldSearchList
val newSearchList = #searchList newApp
val newSearchList = PersistentVector.toList newSearchList
val expectedOldSearchList = [{start = 4, finish = 7}]
val expectedNewSearchList = [{start = 4, finish = 10}]
val assertion =
oldSearchList = expectedOldSearchList
andalso newSearchList = expectedNewSearchList
in
Expect.isTrue assertion
end)
, test
"deletes match in search list \
\when match no longer exists in buffer after deletion"
(fn _ =>
let
(* arrange *)
val originalIdx = 6
val originalString = "hello\nworld\ntest\nagain\n"
val app = TestUtils.init originalString
val app = AppWith.idx (app, originalIdx)
val app = TestUtils.updateMany (app, "/hello\nworld")
val app = AppUpdate.update (app, InputMsg.KEY_ENTER, Time.now ())
(* act *)
val newApp = TestUtils.updateMany (app, "dj")
(* assert *)
val oldSearchList = #searchList app
val oldSearchList = PersistentVector.toList oldSearchList
val newSearchList = #searchList newApp
val newSearchList = PersistentVector.toList newSearchList
val expectedOldSearchList = [{start = 0, finish = 10}]
val expectedNewSearchList = []
val assertion =
oldSearchList = expectedOldSearchList
andalso newSearchList = expectedNewSearchList
in
Expect.isTrue assertion
end)
] ]
val ddDelete = describe "delete motion 'dd'" val ddDelete = describe "delete motion 'dd'"