add tests for matching pairs
This commit is contained in:
235
test/test.sml
235
test/test.sml
@@ -1079,8 +1079,241 @@ val caretMove = describe "move motion '^'"
|
|||||||
end)
|
end)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
val GMove = describe "move motion 'G'"
|
||||||
|
[test "moves cursor to last char in buffer" (fn _ =>
|
||||||
|
(* Note: We assume unix-style line endings:
|
||||||
|
* End of file always has \n at the end.
|
||||||
|
* We don't want cursor to ever reach this last \n
|
||||||
|
* so we say last char is the char before \n
|
||||||
|
* *)
|
||||||
|
let
|
||||||
|
(* arrange *)
|
||||||
|
val buffer = LineGap.fromString "01234\n56789\n"
|
||||||
|
val app = AppType.init (buffer, 0, 0)
|
||||||
|
|
||||||
|
(* act *)
|
||||||
|
val (app, _) = AppUpdate.update (app, CHAR_EVENT #"G")
|
||||||
|
in
|
||||||
|
(* assert *)
|
||||||
|
Expect.isTrue (getChr app = #"9")
|
||||||
|
end)]
|
||||||
|
|
||||||
|
val percentMove = describe "move motion '%'"
|
||||||
|
[ test "moves to next ) when cursor is on (" (fn _ =>
|
||||||
|
let
|
||||||
|
(* arrange *)
|
||||||
|
val buffer = LineGap.fromString "(hello)\n"
|
||||||
|
val app = AppType.init (buffer, 0, 0)
|
||||||
|
|
||||||
|
(* act *)
|
||||||
|
val (app, _) = AppUpdate.update (app, CHAR_EVENT #"%")
|
||||||
|
in
|
||||||
|
(* assert *)
|
||||||
|
Expect.isTrue (getChr app = #")")
|
||||||
|
end)
|
||||||
|
, test "moves to preceding ( when cursur is on )" (fn _ =>
|
||||||
|
let
|
||||||
|
(* arrange *)
|
||||||
|
val buffer = LineGap.fromString "(hello)\n"
|
||||||
|
val app = AppType.init (buffer, 0, 0)
|
||||||
|
val app = withIdx (app, 6)
|
||||||
|
|
||||||
|
(* act *)
|
||||||
|
val (app, _) = AppUpdate.update (app, CHAR_EVENT #"%")
|
||||||
|
in
|
||||||
|
(* assert *)
|
||||||
|
Expect.isTrue (getChr app = #"(")
|
||||||
|
end)
|
||||||
|
(* testing that cursor goes to correct level of nesting *)
|
||||||
|
, test "moves to outermost ) when cursor is on outermost (" (fn _ =>
|
||||||
|
let
|
||||||
|
(* arrange *)
|
||||||
|
val buffer = LineGap.fromString "(((hello)))\n"
|
||||||
|
val app = AppType.init (buffer, 0, 0)
|
||||||
|
|
||||||
|
(* act *)
|
||||||
|
val (app, _) = AppUpdate.update (app, CHAR_EVENT #"%")
|
||||||
|
val newIdx = #cursorIdx app
|
||||||
|
in
|
||||||
|
(* assert *)
|
||||||
|
Expect.isTrue (newIdx = 10)
|
||||||
|
end)
|
||||||
|
, test "moves to outermost ( when cursor is on outermost )" (fn _ =>
|
||||||
|
let
|
||||||
|
(* arrange *)
|
||||||
|
val buffer = LineGap.fromString "(((hello)))\n"
|
||||||
|
val app = AppType.init (buffer, 0, 0)
|
||||||
|
val app = withIdx (app, 10)
|
||||||
|
|
||||||
|
(* act *)
|
||||||
|
val (app, _) = AppUpdate.update (app, CHAR_EVENT #"%")
|
||||||
|
val newIdx = #cursorIdx app
|
||||||
|
in
|
||||||
|
(* assert *)
|
||||||
|
Expect.isTrue (newIdx = 0)
|
||||||
|
end)
|
||||||
|
, test "moves to middle ) when cursor is on middle (" (fn _ =>
|
||||||
|
let
|
||||||
|
(* arrange *)
|
||||||
|
val buffer = LineGap.fromString "(((hello)))\n"
|
||||||
|
val app = AppType.init (buffer, 0, 0)
|
||||||
|
val app = withIdx (app, 1)
|
||||||
|
|
||||||
|
(* act *)
|
||||||
|
val (app, _) = AppUpdate.update (app, CHAR_EVENT #"%")
|
||||||
|
val newIdx = #cursorIdx app
|
||||||
|
in
|
||||||
|
(* assert *)
|
||||||
|
Expect.isTrue (newIdx = 9)
|
||||||
|
end)
|
||||||
|
, test "moves to middle ( when cursor is on middle )" (fn _ =>
|
||||||
|
let
|
||||||
|
(* arrange *)
|
||||||
|
val buffer = LineGap.fromString "(((hello)))\n"
|
||||||
|
val app = AppType.init (buffer, 0, 0)
|
||||||
|
val app = withIdx (app, 9)
|
||||||
|
|
||||||
|
(* act *)
|
||||||
|
val (app, _) = AppUpdate.update (app, CHAR_EVENT #"%")
|
||||||
|
val newIdx = #cursorIdx app
|
||||||
|
in
|
||||||
|
(* assert *)
|
||||||
|
Expect.isTrue (newIdx = 1)
|
||||||
|
end)
|
||||||
|
, test "moves to innermost ) when cursor is on innermost (" (fn _ =>
|
||||||
|
let
|
||||||
|
(* arrange *)
|
||||||
|
val buffer = LineGap.fromString "(((hello)))\n"
|
||||||
|
val app = AppType.init (buffer, 0, 0)
|
||||||
|
val app = withIdx (app, 2)
|
||||||
|
|
||||||
|
(* act *)
|
||||||
|
val (app, _) = AppUpdate.update (app, CHAR_EVENT #"%")
|
||||||
|
val newIdx = #cursorIdx app
|
||||||
|
in
|
||||||
|
(* assert *)
|
||||||
|
Expect.isTrue (newIdx = 8)
|
||||||
|
end)
|
||||||
|
, test "moves to innermost ( when cursor is on innermost )" (fn _ =>
|
||||||
|
let
|
||||||
|
(* arrange *)
|
||||||
|
val buffer = LineGap.fromString "(((hello)))\n"
|
||||||
|
val app = AppType.init (buffer, 0, 0)
|
||||||
|
val app = withIdx (app, 8)
|
||||||
|
|
||||||
|
(* act *)
|
||||||
|
val (app, _) = AppUpdate.update (app, CHAR_EVENT #"%")
|
||||||
|
val newIdx = #cursorIdx app
|
||||||
|
in
|
||||||
|
(* assert *)
|
||||||
|
Expect.isTrue (newIdx = 2)
|
||||||
|
end)
|
||||||
|
(* testing different pair combinations *)
|
||||||
|
, test "moves to next ] when cursor is on [" (fn _ =>
|
||||||
|
let
|
||||||
|
(* arrange *)
|
||||||
|
val buffer = LineGap.fromString "[hello]\n"
|
||||||
|
val app = AppType.init (buffer, 0, 0)
|
||||||
|
|
||||||
|
(* act *)
|
||||||
|
val (app, _) = AppUpdate.update (app, CHAR_EVENT #"%")
|
||||||
|
in
|
||||||
|
(* assert *)
|
||||||
|
Expect.isTrue (getChr app = #"]")
|
||||||
|
end)
|
||||||
|
, test "moves to preceding [ when cursur is on ]" (fn _ =>
|
||||||
|
let
|
||||||
|
(* arrange *)
|
||||||
|
val buffer = LineGap.fromString "[hello]\n"
|
||||||
|
val app = AppType.init (buffer, 0, 0)
|
||||||
|
val app = withIdx (app, 6)
|
||||||
|
|
||||||
|
(* act *)
|
||||||
|
val (app, _) = AppUpdate.update (app, CHAR_EVENT #"%")
|
||||||
|
in
|
||||||
|
(* assert *)
|
||||||
|
Expect.isTrue (getChr app = #"[")
|
||||||
|
end)
|
||||||
|
, test "moves to next } when cursor is on {" (fn _ =>
|
||||||
|
let
|
||||||
|
(* arrange *)
|
||||||
|
val buffer = LineGap.fromString "{hello}\n"
|
||||||
|
val app = AppType.init (buffer, 0, 0)
|
||||||
|
|
||||||
|
(* act *)
|
||||||
|
val (app, _) = AppUpdate.update (app, CHAR_EVENT #"%")
|
||||||
|
in
|
||||||
|
(* assert *)
|
||||||
|
Expect.isTrue (getChr app = #"}")
|
||||||
|
end)
|
||||||
|
, test "moves to preceding { when cursur is on }" (fn _ =>
|
||||||
|
let
|
||||||
|
(* arrange *)
|
||||||
|
val buffer = LineGap.fromString "{hello}\n"
|
||||||
|
val app = AppType.init (buffer, 0, 0)
|
||||||
|
val app = withIdx (app, 6)
|
||||||
|
|
||||||
|
(* act *)
|
||||||
|
val (app, _) = AppUpdate.update (app, CHAR_EVENT #"%")
|
||||||
|
in
|
||||||
|
(* assert *)
|
||||||
|
Expect.isTrue (getChr app = #"{")
|
||||||
|
end)
|
||||||
|
, test "moves to next > when cursor is on <" (fn _ =>
|
||||||
|
let
|
||||||
|
(* arrange *)
|
||||||
|
val buffer = LineGap.fromString "<hello>\n"
|
||||||
|
val app = AppType.init (buffer, 0, 0)
|
||||||
|
|
||||||
|
(* act *)
|
||||||
|
val (app, _) = AppUpdate.update (app, CHAR_EVENT #"%")
|
||||||
|
in
|
||||||
|
(* assert *)
|
||||||
|
Expect.isTrue (getChr app = #">")
|
||||||
|
end)
|
||||||
|
, test "moves to preceding < when cursur is on >" (fn _ =>
|
||||||
|
let
|
||||||
|
(* arrange *)
|
||||||
|
val buffer = LineGap.fromString "<hello>\n"
|
||||||
|
val app = AppType.init (buffer, 0, 0)
|
||||||
|
val app = withIdx (app, 6)
|
||||||
|
|
||||||
|
(* act *)
|
||||||
|
val (app, _) = AppUpdate.update (app, CHAR_EVENT #"%")
|
||||||
|
in
|
||||||
|
(* assert *)
|
||||||
|
Expect.isTrue (getChr app = #"<")
|
||||||
|
end)
|
||||||
|
(* testing that % on a non-pair character is a no-op *)
|
||||||
|
, test "does not move when cursor is on a non-pair-character" (fn _ =>
|
||||||
|
let
|
||||||
|
(* arrange *)
|
||||||
|
val buffer = LineGap.fromString "hello, world\n"
|
||||||
|
val app = AppType.init (buffer, 0, 0)
|
||||||
|
val app = withIdx (app, 5)
|
||||||
|
val oldIdx = #cursorIdx app
|
||||||
|
|
||||||
|
(* act *)
|
||||||
|
val (app, _) = AppUpdate.update (app, CHAR_EVENT #"%")
|
||||||
|
val newIdx = #cursorIdx app
|
||||||
|
in
|
||||||
|
(* assert *)
|
||||||
|
Expect.isTrue (newIdx = oldIdx)
|
||||||
|
end)
|
||||||
|
]
|
||||||
|
|
||||||
val tests = concat
|
val tests = concat
|
||||||
[hMove, lMove, jMove, kMove, wMove, WMove, zeroMove, dlrMove, caretMove]
|
[ hMove
|
||||||
|
, lMove
|
||||||
|
, jMove
|
||||||
|
, kMove
|
||||||
|
, wMove
|
||||||
|
, WMove
|
||||||
|
, zeroMove
|
||||||
|
, dlrMove
|
||||||
|
, caretMove
|
||||||
|
, GMove
|
||||||
|
, percentMove
|
||||||
|
]
|
||||||
|
|
||||||
val _ = run tests
|
val _ = run tests
|
||||||
|
|||||||
Reference in New Issue
Block a user