AtlatestRepositorysigil-tui
1
(import (sigil test)2
(sigil tui layout))4
(test-group "layout"6
(test-group "horizontal split"7
(test "splits width by ratio"8
(let* ((tree (horizontal-split 0.59
(filler) (filler)))10
(cmds (layout-tree tree 0 0 80 24)))11
;; Should produce no render commands (fillers are empty)12
(assert-equal 0 (length cmds))))14
(test "split with panels"15
(let* ((tree (horizontal-split 0.2516
(panel "Left" (filler))17
(panel "Right" (filler))))18
(cmds (layout-tree tree 0 0 80 24)))19
;; Should produce 2 panel render commands20
(assert-equal 2 (length cmds))21
;; First panel gets 20 cols (25% of 80)22
(let ((left-cmd (car cmds)))23
(assert-equal 'render-panel (car left-cmd))24
(assert-equal 0 (cadr left-cmd)) ;; x25
(assert-equal 20 (cadddr left-cmd))) ;; w26
;; Second panel gets remaining 60 cols27
(let ((right-cmd (cadr cmds)))28
(assert-equal 20 (cadr right-cmd)) ;; x29
(assert-equal 60 (cadddr right-cmd)))))) ;; w31
(test-group "vertical split"32
(test "splits height by ratio"33
(let* ((tree (vertical-split 0.534
(panel "Top" (filler))35
(panel "Bottom" (filler))))36
(cmds (layout-tree tree 0 0 80 24)))37
(assert-equal 2 (length cmds))38
;; First panel gets 12 rows39
(let ((top-cmd (car cmds)))40
(assert-equal 'render-panel (car top-cmd))))))42
(test-group "panel"43
(test "panel with text child"44
(let* ((tree (panel "Test" (text-block '(("Hello")))))45
(cmds (layout-tree tree 0 0 40 10)))46
;; Panel + text inside47
(assert-equal 2 (length cmds))48
(assert-equal 'render-panel (car (car cmds)))49
(assert-equal 'render-text (car (cadr cmds)))50
;; Text is inset by 151
(assert-equal 1 (cadr (cadr cmds))) ;; x=152
(assert-equal 1 (caddr (cadr cmds)))))) ;; y=154
(test-group "status bar"55
(test "status bar layout"56
(let* ((tree (status-bar "left" "center" "right"))57
(cmds (layout-tree tree 0 0 80 1)))58
(assert-equal 1 (length cmds))59
(assert-equal 'render-status-bar (car (car cmds))))))61
(test-group "zero dimensions"62
(test "zero width produces no commands"63
(let ((cmds (layout-tree (panel "X" (filler)) 0 0 0 10)))64
(assert-equal 0 (length cmds))))66
(test "zero height produces no commands"67
(let ((cmds (layout-tree (panel "X" (filler)) 0 0 10 0)))68
(assert-equal 0 (length cmds))))))