AtlatestRepositorysigil-tui
1
(import (sigil test)2
(sigil tui event)3
(sigil tui input))5
(test-group "text input"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 start81
(input-handle-key state '(key right)) ;; move to pos 182
(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))))))