add tests for 'yh' motion

This commit is contained in:
2026-01-07 06:33:10 +00:00
parent adb8757ed8
commit 8b0031ca71
7 changed files with 136 additions and 11 deletions

95
test/normal-yank.sml Normal file
View File

@@ -0,0 +1,95 @@
structure NormalYank =
struct
open Railroad
open Railroad.Test
open InputMsg
val yhYank = describe "yank motion 'yh'"
[ test "yanks empty string when cursor is at index 0" (fn _ =>
let
(* arrange *)
val originalString = "hello world\n"
val app = TestUtils.init originalString
val app = AppWith.idx (app, 0)
(* act *)
val app = TestUtils.updateMany (app, "yh")
(* assert *)
val expectedString = ""
in
TestUtils.expectYank (app, expectedString)
end)
, test "yanks empty string when character before cursor is a newline"
(fn _ =>
let
(* arrange *)
val originalString = "hello\nworld\n"
val app = TestUtils.init originalString
val app = AppWith.idx (app, 6)
(* act *)
val app = TestUtils.updateMany (app, "yh")
(* assert *)
val expectedString = ""
in
TestUtils.expectYank (app, expectedString)
end)
, test "yanks one char to the left when on a non-newline" (fn _ =>
let
(* arrange *)
val originalString = "hello world\n"
val app = TestUtils.init originalString
val app = AppWith.idx (app, 5)
(* act *)
val app = TestUtils.updateMany (app, "yh")
(* assert *)
val expectedString = "o"
in
TestUtils.expectYank (app, expectedString)
end)
, test "yanks 3 chars when count is 3" (fn _ =>
let
(* arrange *)
val originalIdx = 5
val originalString = "hello world\n"
val app = TestUtils.init originalString
val app = AppWith.idx (app, originalIdx)
(* act *)
val app = TestUtils.updateMany (app, "3yh")
(* assert *)
val expectedString = "llo"
in
TestUtils.expectYank (app, expectedString)
end)
, test
"yanks from cursor position to start column when \
\count is greater than current column"
(fn _ =>
let
(* arrange *)
val originalIdx = 5
val originalString = "hello world\n"
val app = TestUtils.init originalString
val app = AppWith.idx (app, originalIdx)
(* act *)
val app = TestUtils.updateMany (app, "9yh")
(* assert *)
val expectedString = "hello"
in
TestUtils.expectYank (app, expectedString)
end)
]
val tests = [yhYank]
end

View File

@@ -24,4 +24,34 @@ struct
in
loop (0, app)
end
fun expectYank (app: AppType.app_type, expectedString) =
let
open MailboxType
open DrawMsg
open Railroad
open Railroad.Test
fun loop (hd :: tl) =
(case hd of
DRAW (YANK actualString) =>
if actualString = expectedString then
Expect.isTrue (actualString = expectedString)
else
let
val () = print
("expectedString = [" ^ expectedString ^ "]\n")
val () = print ("actualString = [" ^ actualString ^ "]\n")
val () = print "\n"
in
Expect.isTrue (actualString = expectedString)
end
| _ => loop tl)
| loop ([]) =
let val () = print "no string yanked\n"
in Expect.isTrue false
end
in
loop (#msgs app)
end
end

View File

@@ -5,13 +5,13 @@ struct
fun main () =
let
val tests =
List.concat
[ NormalMove.tests
, NormalDelete.tests
, Regression.tests
, RegexTests.tests
]
val tests = List.concat
[ NormalMove.tests
, NormalDelete.tests
, NormalYank.tests
, Regression.tests
, RegexTests.tests
]
val tests = concat tests
in
runWithConfig [Configuration.PrintPassed false] tests