AtlatestRepositorysigil-tui

sigil-tui / tree / testtest-input.sgl

1(import (sigil test)
2 (sigil tui event)
3 (sigil tui input))
4
5(test-group "text input"
6
7 (test-group "basic operations"
8 (test "initial state is empty"
9 (let ((state (make-input-state)))
10 (assert-equal "" (input-value state))
11 (assert-equal 0 (input-cursor state))))
13 (test "type characters"
14 (let ((state (make-input-state)))
15 (input-handle-key state '(key #\h))
16 (input-handle-key state '(key #\i))
17 (assert-equal "hi" (input-value state))
18 (assert-equal 2 (input-cursor state))))
20 (test "enter returns submit"
21 (let ((state (make-input-state)))
22 (input-handle-key state '(key #\h))
23 (assert-equal 'submit (input-handle-key state '(key enter))))))
25 (test-group "deletion"
26 (test "backspace"
27 (let ((state (make-input-state)))
28 (input-handle-key state '(key #\a))
29 (input-handle-key state '(key #\b))
30 (input-handle-key state '(key #\c))
31 (input-handle-key state '(key backspace))
32 (assert-equal "ab" (input-value state))
33 (assert-equal 2 (input-cursor state))))
35 (test "delete"
36 (let ((state (make-input-state)))
37 (input-handle-key state '(key #\a))
38 (input-handle-key state '(key #\b))
39 (input-handle-key state '(key left))
40 (input-handle-key state '(key delete))
41 (assert-equal "a" (input-value state))
42 (assert-equal 1 (input-cursor state)))))
44 (test-group "cursor movement"
45 (test "left and right arrows"
46 (let ((state (make-input-state)))
47 (input-handle-key state '(key #\a))
48 (input-handle-key state '(key #\b))
49 (input-handle-key state '(key left))
50 (assert-equal 1 (input-cursor state))
51 (input-handle-key state '(key right))
52 (assert-equal 2 (input-cursor state))))
54 (test "left at start stays at 0"
55 (let ((state (make-input-state)))
56 (input-handle-key state '(key left))
57 (assert-equal 0 (input-cursor state))))
59 (test "Ctrl-A goes to beginning"
60 (let ((state (make-input-state)))
61 (input-handle-key state '(key #\h))
62 (input-handle-key state '(key #\i))
63 (input-handle-key state '(key #\a ctrl))
64 (assert-equal 0 (input-cursor state))))
66 (test "Ctrl-E goes to end"
67 (let ((state (make-input-state)))
68 (input-handle-key state '(key #\h))
69 (input-handle-key state '(key #\i))
70 (input-handle-key state '(key #\a ctrl))
71 (input-handle-key state '(key #\e ctrl))
72 (assert-equal 2 (input-cursor state)))))
74 (test-group "kill operations"
75 (test "Ctrl-K kills forward"
76 (let ((state (make-input-state)))
77 (input-handle-key state '(key #\a))
78 (input-handle-key state '(key #\b))
79 (input-handle-key state '(key #\c))
80 (input-handle-key state '(key #\a ctrl)) ;; go to start
81 (input-handle-key state '(key right)) ;; move to pos 1
82 (input-handle-key state '(key #\k ctrl))
83 (assert-equal "a" (input-value state))
84 (assert-equal 1 (input-cursor state))))
86 (test "Ctrl-U kills backward"
87 (let ((state (make-input-state)))
88 (input-handle-key state '(key #\a))
89 (input-handle-key state '(key #\b))
90 (input-handle-key state '(key #\c))
91 (input-handle-key state '(key #\u ctrl))
92 (assert-equal "" (input-value state))
93 (assert-equal 0 (input-cursor state)))))
95 (test-group "clear"
96 (test "input-clear! resets everything"
97 (let ((state (make-input-state)))
98 (input-handle-key state '(key #\x))
99 (input-handle-key state '(key #\y))
100 (input-clear! state)
101 (assert-equal "" (input-value state))
102 (assert-equal 0 (input-cursor state))))))