home · contact · privacy
Greatly extend TUI drawing tests. master
authorChristian Heller <c.heller@plomlompom.de>
Sun, 19 Oct 2025 04:48:53 +0000 (06:48 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Sun, 19 Oct 2025 04:48:53 +0000 (06:48 +0200)
src/tests/tui_draw.test

index 029635b5bc81e2b2e6cb63e09a4ec8954a4f37ae..f0dda65b74e042ea891f6241069f62cbf2e3dff5 100644 (file)
@@ -18,12 +18,13 @@ repeat lines-empty-4-in lines-empty-4-out +8
 repeat lines-empty-4-in lines-empty-4-out +12
 | lines-empty-16-out
 repeat lines-empty-4-in lines-empty-4-out +16
-repeat lines-empty-2-in lines-empty-2-out +19
-repeat lines-empty-1-in lines-empty-1-out +21
+repeat lines-empty-2-in lines-empty-2-out +20
 | status-prompt-empty-in
 line 22 , :start)=====================================================================([0]§§
+| prompt-empty-in
 line 23 , > § §§
 line 23 reverse §§ §
+| prompt-empty-out
 | status-prompt-empty-out
 | empty-init-out
 
@@ -36,12 +37,12 @@ repeat empty-init-in empty-init-out
 log 0 .!# invalid prompt command: not prefixed by /
 repeat lines-empty-16-in lines-empty-16-out
 repeat lines-empty-4-in lines-empty-4-out +16
-| history-lines-0:2-at-20-in
-| history-lines-0:1-at-20-in
+| history-lines-0:0:2-at-20-in
+| history-lines-0:0:1-at-20-in
 line 20 on_black 20§§-§§-§§ §§
-| history-lines-0:1-at-20-out
+| history-lines-0:0:1-at-20-out
 line 21 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: not prefixed by / §§
-| history-lines-0:2-at-20-out
+| history-lines-0:0:2-at-20-out
 repeat status-prompt-empty-in status-prompt-empty-out
 
 # further inputs grow log upwards
@@ -52,22 +53,24 @@ log 0 .!# invalid prompt command: /bar unknown
 | before-1st-scroll-in
 repeat lines-empty-16-in lines-empty-16-out
 repeat lines-empty-2-in lines-empty-2-out +16
-| history-lines-0:4-at-18-in
-repeat history-lines-0:2-at-20-in history-lines-0:2-at-20-out -2
-| history-lines-2:4-at-20-in
+| history-lines-0:0:4-at-18-in
+repeat history-lines-0:0:2-at-20-in history-lines-0:0:2-at-20-out -2
+| history-lines-0:2:4-at-20-in
 line 20 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /foo unknown §§
 line 21 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /bar unknown §§
-| history-lines-2:4-at-20-out
-| history-lines-0:4-at-18-out
+| history-lines-0:2:4-at-20-out
+| history-lines-0:0:4-at-18-out
 repeat status-prompt-empty-in status-prompt-empty-out
 | before-1st-scroll-out
 
 # check scrolling up on short history
 > /window.history.scroll up
 | after-1st-scroll-in
+| topmost-scroll-in
 repeat lines-empty-16-in lines-empty-16-out
 repeat lines-empty-4-in lines-empty-4-out +16
-repeat history-lines-0:1-at-20-in history-lines-0:1-at-20-out
+repeat history-lines-0:0:1-at-20-in history-lines-0:0:1-at-20-out
+| topmost-scroll-out
 line 21 reverse vvv [4] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
 repeat status-prompt-empty-in status-prompt-empty-out
 | after-1st-scroll-out
@@ -93,9 +96,7 @@ log 0 ..#   /window.prompt.backspace
 log 0 ..#   /window.prompt.move_cursor DIRECTION
 log 0 ..#   /window.prompt.scroll DIRECTION
 | before-scrolldown-not-to-bottom-in
-repeat lines-empty-16-in lines-empty-16-out
-repeat lines-empty-4-in lines-empty-4-out +16
-repeat history-lines-0:1-at-20-in history-lines-0:1-at-20-out
+repeat topmost-scroll-in topmost-scroll-out
 line 21 reverse vvv [16] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
 repeat status-prompt-empty-in status-prompt-empty-out
 | before-scrolldown-not-to-bottom-out
@@ -105,27 +106,29 @@ repeat status-prompt-empty-in status-prompt-empty-out
 | after-scrolldown-not-to-bottom-in
 repeat lines-empty-8-in lines-empty-8-out
 repeat lines-empty-1-in lines-empty-1-out +8
-| history-lines-0:8-at-9-in
-repeat history-lines-0:4-at-18-in history-lines-0:4-at-18-out -9
-| history-lines-4:8-at-13-in
-| history-lines-4:5-at-13-in
+| history-lines-0:0:8-at-9-in
+repeat history-lines-0:0:4-at-18-in history-lines-0:0:4-at-18-out -9
+| history-lines-0:4:8-at-13-in
+| history-lines-0:4:5-at-13-in
 line 13 on_black,bright_cyan ..# §§:§§:§§ commands available in this window:§§
-| history-lines-4:5-at-13-out
-| history-lines-5:6-at-14-in
+| history-lines-0:4:5-at-13-out
+| history-lines-0:5:6-at-14-in
 line 14 on_black,bright_cyan ..# §§:§§:§§   /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]§§
-| history-lines-5:6-at-14-out
-| history-lines-6:8-at-15-in
+| history-lines-0:5:6-at-14-out
+| history-lines-0:6:8-at-15-in
 line 15 on_black,bright_cyan ..# §§:§§:§§   /help§§
 line 16 on_black,bright_cyan ..# §§:§§:§§   /list§§
-| history-lines-6:8-at-15-out
-| history-lines-4:8-at-13-out
-| history-lines-0:8-at-9-out
-| history-lines-8:12-at-17-in
+| history-lines-0:6:8-at-15-out
+| history-lines-0:4:8-at-13-out
+| history-lines-0:0:8-at-9-out
+| history-lines-0:8:12-at-17-in
 line 17 on_black,bright_cyan ..# §§:§§:§§   /prompt_enter§§
 line 18 on_black,bright_cyan ..# §§:§§:§§   /quit§§
 line 19 on_black,bright_cyan ..# §§:§§:§§   /window TOWARDS§§
+| history-lines-0:11:12-at-20-in
 line 20 on_black,bright_cyan ..# §§:§§:§§   /window.history.scroll DIRECTION§§
-| history-lines-8:12-at-17-out
+| history-lines-0:11:12-at-20-out
+| history-lines-0:8:12-at-17-out
 line 21 reverse vvv [5] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
 repeat status-prompt-empty-in status-prompt-empty-out
 | after-scrolldown-not-to-bottom-out
@@ -139,19 +142,19 @@ repeat after-scrolldown-not-to-bottom-in after-scrolldown-not-to-bottom-out
 # scroll to bottom, check history still growing up even beyond upper fold
 > /window.history.scroll down
 repeat lines-empty-4-in lines-empty-4-out
-repeat lines-empty-1-in lines-empty-1-out +5
-| history-lines-0:16-at-6-in
-repeat history-lines-0:8-at-9-in history-lines-0:8-at-9-out -3
-repeat history-lines-8:12-at-17-in history-lines-8:12-at-17-out -3
-| history-lines-12:16-at-18-in
-| history-lines-12:13-at-18-in
+repeat lines-empty-2-in lines-empty-2-out +4
+| history-lines-0:0:16-at-6-in
+repeat history-lines-0:0:8-at-9-in history-lines-0:0:8-at-9-out -3
+repeat history-lines-0:8:12-at-17-in history-lines-0:8:12-at-17-out -3
+| history-lines-0:12:16-at-18-in
+| history-lines-0:12:13-at-18-in
 line 18 on_black,bright_cyan ..# §§:§§:§§   /window.paste§§
-| history-lines-12:13-at-18-out
+| history-lines-0:12:13-at-18-out
 line 19 on_black,bright_cyan ..# §§:§§:§§   /window.prompt.backspace§§
 line 20 on_black,bright_cyan ..# §§:§§:§§   /window.prompt.move_cursor DIRECTION§§
 line 21 on_black,bright_cyan ..# §§:§§:§§   /window.prompt.scroll DIRECTION§§
-| history-lines-12:16-at-18-out
-| history-lines-0:16-at-6-out
+| history-lines-0:12:16-at-18-out
+| history-lines-0:0:16-at-6-out
 repeat status-prompt-empty-in status-prompt-empty-out
 > /0
 log 0 .!# invalid prompt command: /0 unknown
@@ -170,29 +173,39 @@ log 0 .!# invalid prompt command: /6 unknown
 > /7
 log 0 .!# invalid prompt command: /7 unknown
 | at-bottom-before-wrapped-in
-repeat history-lines-2:4-at-20-in history-lines-2:4-at-20-out -20
-repeat history-lines-4:8-at-13-in history-lines-4:8-at-13-out -11
-repeat history-lines-8:12-at-17-in history-lines-8:12-at-17-out -11
-repeat history-lines-12:16-at-18-in history-lines-12:16-at-18-out -8
-| history-lines-16:24-at-14-in
+repeat history-lines-0:2:4-at-20-in history-lines-0:2:4-at-20-out -20
+repeat history-lines-0:4:8-at-13-in history-lines-0:4:8-at-13-out -11
+repeat history-lines-0:8:12-at-17-in history-lines-0:8:12-at-17-out -11
+repeat history-lines-0:12:16-at-18-in history-lines-0:12:16-at-18-out -8
+| history-lines-0:16:24-at-14-in
+| history-lines-0:16:20-at-14-in
+| history-lines-0:16:18-at-14-in
 line 14 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /0 unknown§§
 line 15 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /1 unknown§§
+| history-lines-0:16:18-at-14-out
+| history-lines-0:18:19-at-16-in
 line 16 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /2 unknown§§
+| history-lines-0:18:19-at-16-out
 line 17 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /3 unknown§§
+| history-lines-0:16:20-at-14-out
+| history-lines-0:20:22-at-18-in
 line 18 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /4 unknown§§
 line 19 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /5 unknown§§
+| history-lines-0:20:22-at-18-out
+| history-lines-0:22:23-at-20-in
 line 20 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /6 unknown§§
+| history-lines-0:22:23-at-20-out
 line 21 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /7 unknown§§
-| history-lines-16:24-at-14-out
+| history-lines-0:16:24-at-14-out
 repeat status-prompt-empty-in status-prompt-empty-out
 | at-bottom-before-wrapped-out
 
 # quick look one scroll up to check single-scroll increase of below-scroll count (when up-scroll not limited, and all lines un-wrapped)
 > /window.history.scroll up
 repeat lines-empty-8-in lines-empty-8-out
-repeat history-lines-0:8-at-9-in history-lines-0:8-at-9-out -1
-repeat history-lines-8:12-at-17-in history-lines-8:12-at-17-out -1
-repeat history-lines-12:13-at-18-in history-lines-12:13-at-18-out +2
+repeat history-lines-0:0:8-at-9-in history-lines-0:0:8-at-9-out -1
+repeat history-lines-0:8:12-at-17-in history-lines-0:8:12-at-17-out -1
+repeat history-lines-0:12:13-at-18-in history-lines-0:12:13-at-18-out +2
 line 21 reverse vvv [12] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
 repeat status-prompt-empty-in status-prompt-empty-out
 > /window.history.scroll down
@@ -204,20 +217,20 @@ log 0 .!# invalid prompt command: /foo_0123456789_0123456789_01234567 unknown
 > /foo_0123456789_0123456789_012345678
 log 0 .!# invalid prompt command: /foo_0123456789_0123456789_012345678 unknown
 | at-bottom-after-wrapped-in
-repeat history-lines-5:6-at-14-in history-lines-5:6-at-14-out -14
-repeat history-lines-6:8-at-15-in history-lines-6:8-at-15-out -14
-| history-lines-8:16-at-3-in
-repeat history-lines-8:12-at-17-in history-lines-8:12-at-17-out -14
-repeat history-lines-12:16-at-18-in history-lines-12:16-at-18-out -11
-| history-lines-8:16-at-3-out
-repeat history-lines-16:24-at-14-in history-lines-16:24-at-14-out -3
-| history-lines-24:26-at-19-in
+repeat history-lines-0:5:6-at-14-in history-lines-0:5:6-at-14-out -14
+repeat history-lines-0:6:8-at-15-in history-lines-0:6:8-at-15-out -14
+| history-lines-0:8:16-at-3-in
+repeat history-lines-0:8:12-at-17-in history-lines-0:8:12-at-17-out -14
+repeat history-lines-0:12:16-at-18-in history-lines-0:12:16-at-18-out -11
+| history-lines-0:8:16-at-3-out
+repeat history-lines-0:16:24-at-14-in history-lines-0:16:24-at-14-out -3
+| history-lines-0:24:26-at-19-in
 line 19 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_01234567 unknown§§
-line 20 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_012345678§§ 
-| history-lines-24:26-at-19-out
-| history-lines-26:27-at-21-in
+line 20 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_012345678§§
+| history-lines-0:24:26-at-19-out
+| history-lines-0:26:27-at-21-in
 line 21 on_black,bold,bright_red,bright_cyan     unknown§§
-| history-lines-26:27-at-21-out
+| history-lines-0:26:27-at-21-out
 repeat status-prompt-empty-in status-prompt-empty-out
 | at-bottom-after-wrapped-out
 
@@ -226,7 +239,7 @@ repeat status-prompt-empty-in status-prompt-empty-out
 | scrollup-after-wrapped-in
 repeat lines-empty-4-in lines-empty-4-out
 repeat lines-empty-1-in lines-empty-1-out +4
-repeat history-lines-0:16-at-6-in history-lines-0:16-at-6-out -1
+repeat history-lines-0:0:16-at-6-in history-lines-0:0:16-at-6-out -1
 | scrollup-after-wrapped-out
 line 21 reverse vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
 repeat status-prompt-empty-in status-prompt-empty-out
@@ -248,11 +261,11 @@ repeat status-prompt-empty-in status-prompt-empty-out
 
 # check scroll-down over wrapped will snap down to bottom of wrapped
 > /window.history.scroll down
-repeat history-lines-6:8-at-15-in history-lines-6:8-at-15-out -15
-repeat history-lines-8:16-at-3-in history-lines-8:16-at-3-out -1
-repeat history-lines-16:24-at-14-in history-lines-16:24-at-14-out -4
-repeat history-lines-24:26-at-19-in history-lines-24:26-at-19-out -1
-repeat history-lines-26:27-at-21-in history-lines-26:27-at-21-out -1
+repeat history-lines-0:6:8-at-15-in history-lines-0:6:8-at-15-out -15
+repeat history-lines-0:8:16-at-3-in history-lines-0:8:16-at-3-out -1
+repeat history-lines-0:16:24-at-14-in history-lines-0:16:24-at-14-out -4
+repeat history-lines-0:24:26-at-19-in history-lines-0:24:26-at-19-out -1
+repeat history-lines-0:26:27-at-21-in history-lines-0:26:27-at-21-out -1
 line 21 reverse vvv [2] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
 repeat status-prompt-empty-in status-prompt-empty-out
 
@@ -263,16 +276,345 @@ line 21 reverse vvv [12] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
 repeat status-prompt-empty-in status-prompt-empty-out
 > /window.history.scroll up
 repeat lines-empty-16-in lines-empty-16-out
-repeat history-lines-0:4-at-18-in history-lines-0:4-at-18-out -2
-repeat history-lines-4:5-at-13-in history-lines-4:5-at-13-out +7
+repeat history-lines-0:0:4-at-18-in history-lines-0:0:4-at-18-out -2
+repeat history-lines-0:4:5-at-13-in history-lines-0:4:5-at-13-out +7
 line 21 reverse vvv [23] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
 repeat status-prompt-empty-in status-prompt-empty-out
 > /window.history.scroll up
-repeat lines-empty-16-in lines-empty-16-out
-repeat lines-empty-4-in lines-empty-4-out +16
-repeat history-lines-0:1-at-20-in history-lines-0:1-at-20-out
+repeat topmost-scroll-in topmost-scroll-out
 line 21 reverse vvv [27] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
 repeat status-prompt-empty-in status-prompt-empty-out
 
+# check that triggering creation of new window with new lines adds it to status, with unread-lines count
+> /connect foo.bar.baz foo bar:baz
+log 1 ..$ isupport cleared
+log 1 ..$ isupport:CHANTYPES set to: [#&]
+log 1 ..$ isupport:PREFIX set to: [(ov)@+]
+log 1 ..$ isupport:USERLEN set to: [10]
+log 1 ..$ caps cleared
+log 1 ..$ users cleared
+log 1 ..$ channels cleared
+log , ..$ DISCONNECTED
+log 1 ..$ hostname set to: [foo.bar.baz]
+log 1 ..$ port set to: [-1]
+log 1 ..$ nick_wanted set to: [foo]
+log 1 ..$ user_wanted set to: [baz]
+log 1 ..$ realname set to: [bar]
+log 1 ..$ port set to: [6697]
+log 1 ..$ connection_state set to: [connecting]
+log 1 ..$ connection_state set to: [connected]
+log , ..$ CONNECTED
+log 1 ..> CAP LS :302
+log 1 ..> USER baz 0 * :bar
+log 1 ..> NICK :foo
+repeat topmost-scroll-in topmost-scroll-out
+line 21 reverse vvv [27] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 22 , :start)==========================================================([(0:1)] (1:19)§§
+repeat prompt-empty-in prompt-empty-out
+
+# check switch to other window, updates to status line (movement of brackets, clearing of own unread-lines count)
+> /window 1
+repeat lines-empty-2-in lines-empty-2-out
+repeat lines-empty-1-in lines-empty-1-out +2
+| history-lines-1:0:16-at-3-in
+| history-lines-1:0:8-at-3-in
+repeat history-lines-0:0:1-at-20-in history-lines-0:0:1-at-20-out -17
+line 4 on_black,bright_yellow ..$ §§:§§:§§ isupport cleared
+line 5 on_black,bright_yellow ..$ §§:§§:§§ isupport:CHANTYPES set to: [#&]
+line 6 on_black,bright_yellow ..$ §§:§§:§§ isupport:PREFIX set to: [(ov)@+]
+| history-lines-1:4:8-at-7-in
+line 7 on_black,bright_yellow ..$ §§:§§:§§ isupport:USERLEN set to: [10]
+| history-lines-1:5:6-at-8-in
+line 8 on_black,bright_yellow ..$ §§:§§:§§ caps cleared
+| history-lines-1:5:6-at-8-out
+| history-lines-1:6:8-at-9-in
+line 9 on_black,bright_yellow ..$ §§:§§:§§ users cleared
+line 10 on_black,bright_yellow ..$ §§:§§:§§ channels cleared
+| history-lines-1:6:8-at-9-out
+| history-lines-1:4:8-at-7-out
+| history-lines-1:0:8-at-3-out
+| history-lines-1:8:16-at-11-in
+| history-lines-1:8:12-at-11-in
+line 11 on_black,bright_yellow ..$ §§:§§:§§ hostname set to: [foo.bar.baz]
+line 12 on_black,bright_yellow ..$ §§:§§:§§ port set to: [-1]
+| history-lines-1:10:12-at-13-in
+line 13 on_black,bright_yellow ..$ §§:§§:§§ nick_wanted set to: [foo]
+line 14 on_black,bright_yellow ..$ §§:§§:§§ user_wanted set to: [baz]
+| history-lines-1:10:12-at-13-out
+| history-lines-1:8:12-at-11-out
+| history-lines-1:12:16-at-15-in
+| history-lines-1:12:14-at-15-in
+line 15 on_black,bright_yellow ..$ §§:§§:§§ realname set to: [bar]
+line 16 on_black,bright_yellow ..$ §§:§§:§§ port set to: [6697]
+| history-lines-1:12:14-at-15-out
+| history-lines-1:14:15-at-17-in
+line 17 on_black,bright_yellow ..$ §§:§§:§§ connection_state set to: [connecting]
+| history-lines-1:14:15-at-17-out
+line 18 on_black,bright_yellow ..$ §§:§§:§§ connection_state set to: [connected]
+| history-lines-1:12:16-at-15-out
+| history-lines-1:8:16-at-11-out
+| history-lines-1:0:16-at-3-out
+| history-lines-1:16:18-at-19-in
+line 19 on_black,bright_green ..> §§:§§:§§ CAP LS :302 
+line 20 on_black,bright_green ..> §§:§§:§§ USER baz 0 * :bar 
+| history-lines-1:16:18-at-19-out
+| history-lines-1:18:19-at-21-in
+line 21 on_black,bright_green ..> §§:§§:§§ NICK :foo
+| history-lines-1:18:19-at-21-out
+line 22 , foo.bar.baz:debug)====================================================((0:1) [1]§§
+repeat prompt-empty-in prompt-empty-out
+
+# check switch-back to window 0, retaining clearing of window 1's unread-lines count
+> /window 0
+repeat topmost-scroll-in topmost-scroll-out
+line 21 reverse vvv [27] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+repeat status-prompt-after-first-return-in status-prompt-after-first-return-out
+| status-prompt-after-first-return-in
+line 22 , :start)===============================================================([(0:1)] 1§§
+repeat prompt-empty-in prompt-empty-out
+| status-prompt-after-first-return-out
+
+# check that on full scroll-down, we now have a bookmark above the newest lines not previously scrolled into
+> /window.history.scroll down
+repeat lines-empty-8-in lines-empty-8-out
+repeat lines-empty-1-in lines-empty-1-out +8
+repeat history-lines-0:0:8-at-9-in history-lines-0:0:8-at-9-out
+repeat history-lines-0:8:12-at-17-in history-lines-0:8:12-at-17-out
+line 21 reverse vvv [16] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+repeat status-prompt-after-first-return-in status-prompt-after-first-return-out
+> /window.history.scroll down
+| before-first-sight-of-bookmark-in
+repeat history-lines-0:2:4-at-20-in history-lines-0:2:4-at-20-out -20
+repeat history-lines-0:4:8-at-13-in history-lines-0:4:8-at-13-out -11
+repeat history-lines-0:8:16-at-3-in history-lines-0:8:16-at-3-out +3
+repeat history-lines-0:16:20-at-14-in history-lines-0:16:20-at-14-out
+repeat history-lines-0:20:22-at-18-in history-lines-0:20:22-at-18-out
+repeat history-lines-0:22:23-at-20-in history-lines-0:22:23-at-20-out
+line 21 reverse vvv [5] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+repeat status-prompt-after-first-return-in status-prompt-after-first-return-out
+| before-first-sight-of-bookmark-out
+> /window.history.scroll down
+| first-sight-of-bookmark-in
+repeat history-lines-0:8:16-at-3-in history-lines-0:8:16-at-3-out -3
+repeat history-lines-0:16:24-at-14-in history-lines-0:16:24-at-14-out -6
+repeat history-lines-0:24:26-at-19-in history-lines-0:24:26-at-19-out -3
+repeat history-lines-0:26:27-at-21-in history-lines-0:26:27-at-21-out -3
+| bookmark-at-19-in
+line 19 on_black --------------------------------------------------------------------------------§§
+| bookmark-at-19-out
+| history-lines-0:27:28-at-20-in
+line 20 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /bar_0123456789_0123456789_012345678§§
+| history-lines-0:27:28-at-20-out
+| history-lines-0:28:29-at-21-in
+line 21 on_black,bold,bright_red,bright_cyan     unknown§§
+| history-lines-0:28:29-at-21-out
+repeat status-prompt-after-first-return-in status-prompt-after-first-return-out
+| first-sight-of-bookmark-out
+
+# check that scrolling non-bottom bookmark out of sight, then scrolling it back into view again does not by itself move its position in the log history
+> /window.history.scroll up
+repeat lines-empty-2-in lines-empty-2-out
+repeat history-lines-0:0:16-at-6-in history-lines-0:0:16-at-6-out -4
+repeat history-lines-0:16:18-at-14-in history-lines-0:16:18-at-14-out +4
+repeat history-lines-0:18:19-at-16-in history-lines-0:18:19-at-16-out +4
+line 21 reverse vvv [9] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+repeat status-prompt-after-first-return-in status-prompt-after-first-return-out
+> /window.history.scroll down
+repeat first-sight-of-bookmark-in first-sight-of-bookmark-out
+
+# check that second switch to new window, previously left on bottom of history, establishes bookmark at bottom of log
+> /window 1
+repeat lines-empty-2-in lines-empty-2-out
+repeat history-lines-1:0:16-at-3-in history-lines-1:0:16-at-3-out -1
+repeat history-lines-1:16:18-at-19-in history-lines-1:16:18-at-19-out -1
+repeat history-lines-1:18:19-at-21-in history-lines-1:18:19-at-21-out -1
+repeat bookmark-at-19-in bookmark-at-19-out +2
+| status-prompt-both-empty-in
+line 22 , foo.bar.baz:debug)========================================================(0 [1]§§
+repeat prompt-empty-in prompt-empty-out
+| status-prompt-both-empty-out
+
+# check second switch-back places bookmark at bottom there too, since the newest lines previously succeeding it have now been read by us
+> /window 0
+repeat history-lines-0:8:16-at-3-in history-lines-0:8:16-at-3-out -3
+repeat history-lines-0:16:24-at-14-in history-lines-0:16:24-at-14-out -6
+| history-lines-0:24:28-at-16-in
+repeat history-lines-0:24:26-at-19-in history-lines-0:24:26-at-19-out -3
+repeat history-lines-0:26:27-at-21-in history-lines-0:26:27-at-21-out -3
+repeat history-lines-0:27:28-at-20-in history-lines-0:27:28-at-20-out -1
+| history-lines-0:24:28-at-16-out
+repeat history-lines-0:28:29-at-21-in history-lines-0:28:29-at-21-out -1
+repeat bookmark-at-19-in bookmark-at-19-out +2
+line 22 , :start)===================================================================([0] 1§§
+repeat prompt-empty-in prompt-empty-out
+
+# check new lines push bookmark up
+> /list
+log 0 ..# windows available via /window:
+log 0 ..#   0) :start
+log 0 ..#   1) foo.bar.baz:debug
+| before-first-server-responses-in
+repeat history-lines-0:11:12-at-20-in history-lines-0:11:12-at-20-out -20
+repeat history-lines-0:12:16-at-18-in history-lines-0:12:16-at-18-out -17
+repeat history-lines-0:16:24-at-14-in history-lines-0:16:24-at-14-out -9
+repeat history-lines-0:24:28-at-16-in history-lines-0:24:28-at-16-out -3
+repeat history-lines-0:28:29-at-21-in history-lines-0:28:29-at-21-out -4
+repeat bookmark-at-19-in bookmark-at-19-out -1
+| history-lines-0:29:30-at-19-in
+line 19 on_black,bright_cyan ..# §§:§§:§§ windows available via /window:§§
+| history-lines-0:29:30-at-19-out
+| history-lines-0:30:32-at-20-in
+line 20 on_black,bright_cyan ..# §§:§§:§§   0) :start§§
+line 21 on_black,bright_cyan ..# §§:§§:§§   1) foo.bar.baz:debug§§
+| history-lines-0:30:32-at-20-out
+| before-first-server-responses-out
+line 22 , :start)===================================================================([0] 1§§
+repeat prompt-empty-in prompt-empty-out
+
+# check new lines growing in other window, one of which long enough to wrap, to be re-start count in status (with wrapped only as single) 
+loggedservermsg 0 1 ..< PING :?
+log 1 ..> PONG :?
+loggedservermsg 0 1 ..< PING :123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789
+log 1 ..> PONG :123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789
+repeat before-first-server-responses-in before-first-server-responses-out
+line 22 , :start)===============================================================([0] (1:4)§§
+repeat prompt-empty-in prompt-empty-out
+
+# check that switching to window with new lines, but left scroll-to-bottom, keeps the scroll-to-bottom, keeps bookmark after last line previously seen there
+> /window 1
+repeat history-lines-1:4:8-at-7-in history-lines-1:4:8-at-7-out -7
+repeat history-lines-1:8:16-at-11-in history-lines-1:8:16-at-11-out -7
+repeat history-lines-1:16:18-at-19-in history-lines-1:16:18-at-19-out -7
+repeat history-lines-1:18:19-at-21-in history-lines-1:18:19-at-21-out -7
+repeat bookmark-at-19-in bookmark-at-19-out -4
+| history-lines-1:19:20-at-16-in
+line 16 on_black,bright_white ..< §§:§§:§§ PING :?
+| history-lines-1:19:20-at-16-out
+| history-lines-1:20:24-at-17-in
+line 17 on_black,bright_green ..> §§:§§:§§ PONG :?
+line 18 on_black,bright_white ..< §§:§§:§§ PING :123456789 123456789 123456789 123456789 123456789 123456789§§
+line 19 on_black,bright_white     123456789 123456789§§
+line 20 on_black,bright_green ..> §§:§§:§§ PONG :123456789 123456789 123456789 123456789 123456789 123456789§§
+| history-lines-1:20:24-at-17-out
+| history-lines-1:24:25-at-21-in
+line 21 on_black,bright_green     123456789 123456789§§
+| history-lines-1:24:25-at-21-out
+repeat status-prompt-both-empty-in status-prompt-both-empty-out
+
+# check that growth below scroll does not by itself re-position bookmark in history
+> /window.history.scroll up
+loggedservermsg 0 1 ..< PING :foo
+log 1 ..> PONG :foo
+| early-win1-upscroll-in
+repeat lines-empty-4-in lines-empty-4-out
+repeat lines-empty-2-in lines-empty-2-out +4
+repeat history-lines-1:0:8-at-3-in history-lines-1:0:8-at-3-out +3
+repeat history-lines-1:8:12-at-11-in history-lines-1:8:12-at-11-out +3
+repeat history-lines-1:12:14-at-15-in history-lines-1:12:14-at-15-out +3
+repeat history-lines-1:14:15-at-17-in history-lines-1:14:15-at-17-out +3
+| early-win1-upscroll-out
+line 21 reverse vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+repeat status-prompt-both-empty-in status-prompt-both-empty-out
+> /window.history.scroll down
+repeat history-lines-1:5:6-at-8-in history-lines-1:5:6-at-8-out -8
+repeat history-lines-1:6:8-at-9-in history-lines-1:6:8-at-9-out -8
+repeat history-lines-1:8:16-at-11-in history-lines-1:8:16-at-11-out -8
+repeat history-lines-1:16:18-at-19-in history-lines-1:16:18-at-19-out -8
+repeat history-lines-1:18:19-at-21-in history-lines-1:18:19-at-21-out -8
+repeat bookmark-at-19-in bookmark-at-19-out -5
+repeat history-lines-1:19:20-at-16-in history-lines-1:19:20-at-16-out -1
+repeat history-lines-1:20:24-at-17-in history-lines-1:20:24-at-17-out -1
+repeat history-lines-1:24:25-at-21-in history-lines-1:24:25-at-21-out -1
+line 21 reverse vvv [3] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+repeat status-prompt-both-empty-in status-prompt-both-empty-out
+
+# check that with new lines left unread, switch away and back into window moves bookmark below newest read line, counts unread lines in status
+> /window 0
+| win-0-only-for-win-1-tests-in
+repeat history-lines-0:11:12-at-20-in history-lines-0:11:12-at-20-out -20
+repeat history-lines-0:12:16-at-18-in history-lines-0:12:16-at-18-out -17
+repeat history-lines-0:16:24-at-14-in history-lines-0:16:24-at-14-out -9
+repeat history-lines-0:24:28-at-16-in history-lines-0:24:28-at-16-out -3
+repeat history-lines-0:28:29-at-21-in history-lines-0:28:29-at-21-out -4
+repeat history-lines-0:29:30-at-19-in history-lines-0:29:30-at-19-out -1
+repeat history-lines-0:30:32-at-20-in history-lines-0:30:32-at-20-out -1
+repeat bookmark-at-19-in bookmark-at-19-out +2
+| win-0-only-for-win-1-tests-out
+line 22 , :start)===============================================================([0] (1:2)§§
+repeat prompt-empty-in prompt-empty-out
+> /window 1
+| keep-bookmark-on-outside-growth-test-in
+repeat history-lines-1:5:6-at-8-in history-lines-1:5:6-at-8-out -8
+repeat history-lines-1:6:8-at-9-in history-lines-1:6:8-at-9-out -8
+repeat history-lines-1:8:16-at-11-in history-lines-1:8:16-at-11-out -8
+| history-lines-1:16:24-at-11-in
+repeat history-lines-1:16:18-at-19-in history-lines-1:16:18-at-19-out -8
+repeat history-lines-1:18:19-at-21-in history-lines-1:18:19-at-21-out -8
+repeat history-lines-1:19:20-at-16-in history-lines-1:19:20-at-16-out -2
+repeat history-lines-1:20:24-at-17-in history-lines-1:20:24-at-17-out -2
+| history-lines-1:16:24-at-11-out
+repeat history-lines-1:24:25-at-21-in history-lines-1:24:25-at-21-out -2
+repeat bookmark-at-19-in bookmark-at-19-out +1
+| keep-bookmark-on-outside-growth-test-out
+line 21 reverse vvv [3] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 22 , foo.bar.baz:debug)====================================================(0 [(1:2)]§§
+repeat prompt-empty-in prompt-empty-out
+
+# check that growing lines below scroll in other preserves non-bottom bookmark (left in sight on previous window leave)
+> /window 0
+loggedservermsg 0 1 ..< PING :bar
+log 1 ..> PONG :bar
+repeat win-0-only-for-win-1-tests-in win-0-only-for-win-1-tests-out
+line 22 , :start)===============================================================([0] (1:4)§§
+repeat prompt-empty-in prompt-empty-out
+> /window 1
+repeat keep-bookmark-on-outside-growth-test-in keep-bookmark-on-outside-growth-test-out
+line 21 reverse vvv [5] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+| status-prompt-on-win1-4-unread-in
+line 22 , foo.bar.baz:debug)====================================================(0 [(1:4)]§§
+repeat prompt-empty-in prompt-empty-out
+| status-prompt-on-win1-4-unread-out
+
+# check same applies when leaving affected window with bookmark out-of-sight
+> /window.history.scroll up
+repeat early-win1-upscroll-in early-win1-upscroll-out
+line 21 reverse vvv [13] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+repeat status-prompt-on-win1-4-unread-in status-prompt-on-win1-4-unread-out
+> /window 0
+loggedservermsg 0 1 ..< PING :baz
+log 1 ..> PONG :baz
+repeat win-0-only-for-win-1-tests-in win-0-only-for-win-1-tests-out
+line 22 , :start)===============================================================([0] (1:6)§§
+repeat prompt-empty-in prompt-empty-out
+> /window 1
+repeat early-win1-upscroll-in early-win1-upscroll-out
+line 21 reverse vvv [15] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 22 , foo.bar.baz:debug)====================================================(0 [(1:6)]§§
+repeat prompt-empty-in prompt-empty-out
+> /window.history.scroll down
+repeat history-lines-1:5:6-at-8-in history-lines-1:5:6-at-8-out -8
+repeat history-lines-1:6:8-at-9-in history-lines-1:6:8-at-9-out -8
+repeat history-lines-1:8:16-at-11-in history-lines-1:8:16-at-11-out -8
+repeat history-lines-1:16:24-at-11-in history-lines-1:16:24-at-11-out
+repeat history-lines-1:24:25-at-21-in history-lines-1:24:25-at-21-out -2
+repeat bookmark-at-19-in bookmark-at-19-out +1
+line 21 reverse vvv [7] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 22 , foo.bar.baz:debug)====================================================(0 [(1:6)]§§
+repeat prompt-empty-in prompt-empty-out
+> /window.history.scroll down
+repeat history-lines-1:10:12-at-13-in history-lines-1:10:12-at-13-out -13
+repeat history-lines-1:12:16-at-15-in history-lines-1:12:16-at-15-out -13
+repeat history-lines-1:16:24-at-11-in history-lines-1:16:24-at-11-out -5
+repeat history-lines-1:24:25-at-21-in history-lines-1:24:25-at-21-out -7
+repeat bookmark-at-19-in bookmark-at-19-out -4
+line 16 on_black,bright_white ..< §§:§§:§§ PING :foo
+line 17 on_black,bright_green ..> §§:§§:§§ PONG :foo
+line 18 on_black,bright_white ..< §§:§§:§§ PING :bar
+line 19 on_black,bright_green ..> §§:§§:§§ PONG :bar
+line 20 on_black,bright_white ..< §§:§§:§§ PING :baz
+line 21 on_black,bright_green ..> §§:§§:§§ PONG :baz
+line 22 , foo.bar.baz:debug)====================================================(0 [(1:6)]§§
+repeat prompt-empty-in prompt-empty-out
+
 > /quit
 log 0 ..<