From: Christian Heller Date: Thu, 16 Oct 2025 18:20:30 +0000 (+0200) Subject: Add scrolling tests. X-Git-Url: https://plomlompom.com/repos/%7B%7B%20web_path%20%7D%7D/static/%7B%7Bprefix%7D%7D/process?a=commitdiff_plain;p=ircplom Add scrolling tests. --- diff --git a/src/tests/tui_draw.test b/src/tests/tui_draw.test index 22fdb61..d1364c0 100644 --- a/src/tests/tui_draw.test +++ b/src/tests/tui_draw.test @@ -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 ..<