add tests for 'yl' motion

This commit is contained in:
2026-01-07 07:52:06 +00:00
parent 407f78ce7a
commit f1dd822d5b
3 changed files with 118 additions and 3 deletions

View File

@@ -33,7 +33,7 @@ struct
val buffer = LineGap.goToIdx (cursorIdx, buffer) val buffer = LineGap.goToIdx (cursorIdx, buffer)
val endOfLineIdx = Cursor.viDlr (buffer, cursorIdx, 1) val endOfLineIdx = Cursor.viDlr (buffer, cursorIdx, 1) + 1
val high = Cursor.viL (buffer, cursorIdx, count) val high = Cursor.viL (buffer, cursorIdx, count)
val high = Int.min (high, endOfLineIdx) val high = Int.min (high, endOfLineIdx)
val length = high - cursorIdx val length = high - cursorIdx

View File

@@ -90,6 +90,121 @@ struct
end) end)
] ]
val ylYank = describe "yank motion 'yl'"
[ test "yanks last char in line when next char is newline" (fn _ =>
let
(* arrange *)
val originalString = "hello\nworld\n"
val originalIdx = 4
val tests = [yhYank] val app = TestUtils.init originalString
val app = AppWith.idx (app, originalIdx)
(* act *)
val app = TestUtils.updateMany (app, "yl")
(* assert *)
val expectedString = "o"
in
TestUtils.expectYank (app, expectedString)
end)
, test "yanks char that cursor is currently on when not on newline" (fn _ =>
let
(* arrange *)
val originalIdx = 0
val originalString = "hello world\n"
val app = TestUtils.init originalString
val app = AppWith.idx (app, originalIdx)
(* act *)
val app = TestUtils.updateMany (app, "yl")
(* assert *)
val expectedString = "h"
in
TestUtils.expectYank (app, expectedString)
end)
, test "yanks newline character when cursor is on a newline" (fn _ =>
let
(* arrange *)
val originalIdx = 5
val originalString = "hello\n\nworld\n"
val app = TestUtils.init originalString
val app = AppWith.idx (app, originalIdx)
(* act *)
val app = TestUtils.updateMany (app, "yl")
(* assert *)
val expectedString = "\n"
in
TestUtils.expectYank (app, expectedString)
end)
, test
"does not yank past newline when specifying a range \
\greater than number of columns"
(fn _ =>
let
(* arrange *)
val originalIdx = 2
val originalString = "hello\nworld\n"
val app = TestUtils.init originalString
val app = AppWith.idx (app, originalIdx)
(* act *)
val app = TestUtils.updateMany (app, "33yl")
(* assert *)
val expectedString = "llo"
in
TestUtils.expectYank (app, expectedString)
end)
, test
"yanks last line, excluding newline, \
\when cursor is on first character of last line \
\and last line ends with a newline"
(fn _ =>
let
(* arrange *)
val originalIdx = 6
val originalString = "hello\nworld\n"
val app = TestUtils.init originalString
val app = AppWith.idx (app, originalIdx)
(* act *)
val app = TestUtils.updateMany (app, "33yl")
(* assert *)
val expectedString = "world"
in
TestUtils.expectYank (app, expectedString)
end)
, test
"yanks last line, excluding newline, \
\when cursor is on first character of last line \
\and last line does not end with a newline"
(fn _ =>
let
(* arrange *)
val originalIdx = 6
val originalString = "hello\nworld"
val app = TestUtils.init originalString
val app = AppWith.idx (app, originalIdx)
(* act *)
val app = TestUtils.updateMany (app, "33yl")
(* assert *)
val expectedString = "world"
in
TestUtils.expectYank (app, expectedString)
end)
]
val tests = [yhYank, ylYank]
end end

View File

@@ -1,3 +1,3 @@
# To-do list # To-do list
- Implement `yl` motion and add tests for it. - Implement 'yj' and 'yk' and add tests for them