AtlatestRepositorysigil-tui

sigil-tui / tree / testtest-layout.sgl

1(import (sigil test)
2 (sigil tui layout))
3
4(test-group "layout"
5
6 (test-group "horizontal split"
7 (test "splits width by ratio"
8 (let* ((tree (horizontal-split 0.5
9 (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.25
16 (panel "Left" (filler))
17 (panel "Right" (filler))))
18 (cmds (layout-tree tree 0 0 80 24)))
19 ;; Should produce 2 panel render commands
20 (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)) ;; x
25 (assert-equal 20 (cadddr left-cmd))) ;; w
26 ;; Second panel gets remaining 60 cols
27 (let ((right-cmd (cadr cmds)))
28 (assert-equal 20 (cadr right-cmd)) ;; x
29 (assert-equal 60 (cadddr right-cmd)))))) ;; w
31 (test-group "vertical split"
32 (test "splits height by ratio"
33 (let* ((tree (vertical-split 0.5
34 (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 rows
39 (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 inside
47 (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 1
51 (assert-equal 1 (cadr (cadr cmds))) ;; x=1
52 (assert-equal 1 (caddr (cadr cmds)))))) ;; y=1
54 (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))))))