home · contact · privacy
Add scrolling tests. master
authorChristian Heller <c.heller@plomlompom.de>
Thu, 16 Oct 2025 18:20:30 +0000 (20:20 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Thu, 16 Oct 2025 18:20:30 +0000 (20:20 +0200)
src/tests/tui_draw.test

index 22fdb61326322af749cd29bbfae96f77c31c8428..d1364c0693456f21c584338966c18951590b06b1 100644 (file)
@@ -1,4 +1,5 @@
 | empty-init-in
+| lines-to-19-empty-in
 | line-0-empty-in
 t.0 0.on_black.                                                                                
 | line-0-empty-out
@@ -21,6 +22,7 @@ repeat line-0-empty-in line-0-empty-out t.16
 repeat line-0-empty-in line-0-empty-out t.17
 repeat line-0-empty-in line-0-empty-out t.18
 repeat line-0-empty-in line-0-empty-out t.19
+| lines-to-19-empty-out
 repeat line-0-empty-in line-0-empty-out t.20
 repeat line-0-empty-in line-0-empty-out t.21
 | status-prompt-empty-in
@@ -36,8 +38,10 @@ t.23 3..
 repeat empty-init-in empty-init-out
 
 # non-empty command input starts log at bottom, with date above it
+| input-foo-in
 > foo
 0 .!# invalid prompt command: not prefixed by /
+| input-foo-out
 repeat line-0-empty-in line-0-empty-out
 repeat line-0-empty-in line-0-empty-out t.19
 | date-at-20-in
@@ -52,24 +56,245 @@ t.21 13.on_black,bold,bright_red,bright_cyan.invalid prompt command: not prefixe
 repeat status-prompt-empty-in status-prompt-empty-out
 
 # further inputs grow log upwards
+| input-cmd-foo-in
 > /foo
 0 .!# invalid prompt command: /foo unknown
-> /foo
-0 .!# invalid prompt command: /foo unknown
+| input-cmd-foo-out
+repeat input-cmd-foo-in input-cmd-foo-out
 repeat line-0-empty-in line-0-empty-out
 repeat line-0-empty-in line-0-empty-out t.17
 repeat date-at-20-in date-at-20-out t.18
+| foo-unprefixed-line-19-in
 t.19 13.on_black,bold,bright_red,bright_cyan.invalid prompt command: not prefixed by /                          
+| foo-unprefixed-line-19-out
+| foo-unknown-line-20-in
 t.20 13.on_black,bold,bright_red,bright_cyan.invalid prompt command: /foo unknown       
-t.21 13.on_black,bold,bright_red,bright_cyan.invalid prompt command: /foo unknown       
+| foo-unknown-line-20-out
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.21
 
 # check wrapping
 > /foo_0123456789_0123456789_01234567
 0 .!# invalid prompt command: /foo_0123456789_0123456789_01234567 unknown
+| unwrapped-at-21-in
 t.21 13.on_black,bold,bright_red,bright_cyan.invalid prompt command: /foo_0123456789_0123456789_01234567 unknown
+| unwrapped-at-21-out
+| input-wrapped-in
 > /foo_0123456789_0123456789_012345678
 0 .!# invalid prompt command: /foo_0123456789_0123456789_012345678 unknown
+| input-wrapped-out
+| wrapped-first-at-20-in
 t.20 13.on_black,bold,bright_red,bright_cyan.invalid prompt command: /foo_0123456789_0123456789_012345678       
+| wrapped-first-at-20-out
+| wrapped-second-at-21-in
 t.21 0.on_black,bold,bright_red,bright_cyan.    unknown                                                                     
+| wrapped-second-at-21-out
+
+# check scrolling up on short history
+> /window.history.scroll up
+| topmost-scroll-in
+repeat lines-to-19-empty-in lines-to-19-empty-out
+repeat date-at-20-in date-at-20-out
+| topmost-scroll-out
+t.21 0.reverse.vvv [6] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+repeat status-prompt-empty-in status-prompt-empty-out
+
+# check scrolling down on short history
+> /window.history.scroll down
+repeat line-0-empty-in line-0-empty-out
+repeat line-0-empty-in line-0-empty-out t.14
+repeat date-at-20-in date-at-20-out t.15
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.16
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.17
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.18
+repeat unwrapped-at-21-in unwrapped-at-21-out t.19
+repeat wrapped-first-at-20-in wrapped-first-at-20-out
+repeat wrapped-second-at-21-in wrapped-second-at-21-out
+repeat status-prompt-empty-in status-prompt-empty-out
+
+# check history growing below up-scroll
+> /window.history.scroll up
+repeat input-foo-in input-foo-out
+repeat input-cmd-foo-in input-cmd-foo-out
+repeat input-foo-in input-foo-out
+repeat input-cmd-foo-in input-cmd-foo-out
+repeat input-foo-in input-foo-out
+repeat topmost-scroll-in topmost-scroll-out
+t.21 0.reverse.vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+repeat status-prompt-empty-in status-prompt-empty-out
+
+# check scroll-down on longer history
+> /window.history.scroll down
+repeat line-0-empty-in line-0-empty-out
+repeat line-0-empty-in line-0-empty-out t.9
+repeat date-at-20-in date-at-20-out t.10
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.11
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.12
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.13
+repeat unwrapped-at-21-in unwrapped-at-21-out t.14
+repeat wrapped-first-at-20-in wrapped-first-at-20-out t.15
+repeat wrapped-second-at-21-in wrapped-second-at-21-out t.16
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.17
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.18
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.19
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.20
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.21
+repeat status-prompt-empty-in status-prompt-empty-out
+
+# check history growing upwards if scrolled down
+repeat input-foo-in input-foo-out
+repeat input-cmd-foo-in input-cmd-foo-out
+repeat input-foo-in input-foo-out
+repeat input-cmd-foo-in input-cmd-foo-out
+repeat input-foo-in input-foo-out
+repeat input-cmd-foo-in input-cmd-foo-out
+repeat input-foo-in input-foo-out
+repeat input-cmd-foo-in input-cmd-foo-out
+repeat input-foo-in input-foo-out
+repeat input-cmd-foo-in input-cmd-foo-out
+repeat input-foo-in input-foo-out
+repeat input-cmd-foo-in input-cmd-foo-out
+repeat input-foo-in input-foo-out
+repeat input-cmd-foo-in input-cmd-foo-out
+repeat input-foo-in input-foo-out
+repeat input-cmd-foo-in input-cmd-foo-out
+repeat input-foo-in input-foo-out
+repeat input-cmd-foo-in input-cmd-foo-out
+| bottom-longer-history-in
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.0
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.1
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.2
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.3
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.4
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.5
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.6
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.7
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.8
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.9
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.10
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.11
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.12
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.13
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.14
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.15
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.16
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.17
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.18
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.19
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.20
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.21
+repeat status-prompt-empty-in status-prompt-empty-out
+| bottom-longer-history-out
+
+# check scroll-up on longer history no longer starting at just date, and counting unwrapped below-lines one-to-one
+> /window.history.scroll up
+| scrolled-up-longer-history-in
+repeat line-0-empty-in line-0-empty-out
+repeat line-0-empty-in line-0-empty-out t.1
+repeat date-at-20-in date-at-20-out t.2
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.3
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.4
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.5
+repeat unwrapped-at-21-in unwrapped-at-21-out t.6
+repeat wrapped-first-at-20-in wrapped-first-at-20-out t.7
+repeat wrapped-second-at-21-in wrapped-second-at-21-out t.8
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.9
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.10
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.11
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.12
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.13
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.14
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.15
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.16
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.17
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.18
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.19
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.20
+| scrolled-up-longer-history-out
+t.21 0.reverse.vvv [12] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+repeat status-prompt-empty-in status-prompt-empty-out
+> /window.history.scroll down
+repeat bottom-longer-history-in bottom-longer-history-out
+
+# check adding a wrapped line under scroll-up increases visible below-count by one, but scroll down …
+> /window.history.scroll up
+repeat input-wrapped-in input-wrapped-out
+repeat scrolled-up-longer-history-in scrolled-up-longer-history-out
+t.21 0.reverse.vvv [13] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+> /window.history.scroll down
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.0
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.1
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.2
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.3
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.4
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.5
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.6
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.7
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.8
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.9
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.10
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.11
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.12
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.13
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.14
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.15
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.16
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.17
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.18
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.19
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.20
+t.21 0.reverse.vvv [2] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+repeat status-prompt-empty-in status-prompt-empty-out
+
+# check scroll-up over wrapped increases visible below-lines count only by fused history lines
+> /window.history.scroll down
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.0
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.1
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.2
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.3
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.4
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.5
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.6
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.7
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.8
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.9
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.10
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.11
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.12
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.13
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.14
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.15
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.16
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.17
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.18
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.19
+repeat wrapped-first-at-20-in wrapped-first-at-20-out t.20
+repeat wrapped-second-at-21-in wrapped-second-at-21-out t.21
+repeat status-prompt-empty-in status-prompt-empty-out
+> /window.history.scroll up
+t.21 0.reverse.vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+repeat status-prompt-empty-in status-prompt-empty-out
+
+# check scrolls-up over longer history until top
+> /window.history.scroll up
+repeat line-0-empty-in line-0-empty-out
+repeat line-0-empty-in line-0-empty-out t.5
+repeat line-0-empty-in line-0-empty-out t.10
+repeat date-at-20-in date-at-20-out t.11
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.12
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.13
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.14
+repeat unwrapped-at-21-in unwrapped-at-21-out t.15
+repeat wrapped-first-at-20-in wrapped-first-at-20-out t.16
+repeat wrapped-second-at-21-in wrapped-second-at-21-out t.17
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.18
+repeat foo-unknown-line-20-in foo-unknown-line-20-out t.19
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out t.20
+t.21 0.reverse.vvv [22] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+repeat status-prompt-empty-in status-prompt-empty-out
+> /window.history.scroll up
+repeat topmost-scroll-in topmost-scroll-out
+t.21 0.reverse.vvv [30] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+repeat status-prompt-empty-in status-prompt-empty-out
+
 > /quit
 0 ..<