home · contact · privacy
In testing line replacements also replace within fragments section.
authorChristian Heller <c.heller@plomlompom.de>
Fri, 7 Nov 2025 20:30:46 +0000 (21:30 +0100)
committerChristian Heller <c.heller@plomlompom.de>
Fri, 7 Nov 2025 20:30:46 +0000 (21:30 +0100)
src/ircplom/testing.py
src/tests/_timeout_retries.test
src/tests/test.test
src/tests/tui_draw.test

index 8d1e7e84879d97e1337d183213946ddb081f7f47..4f56c187105ee7289edc682055f5ad8ff911bd9e 100644 (file)
@@ -259,35 +259,41 @@ class _Playbook:
                 bump_int_fields(int(insert_args[2]))
             return [(c[0], c[1]) for c in candidates]
 
-        fragments: dict[str, tuple[tuple[str, str], ...]] = {}
-        anchor = ''
-        fragment: list[tuple[str, str]] = []
-        fragments_cutoff = 0
-        for idx, line_t in enumerate(self._lines_t[:] + [('', '')]):
-            if line_t[1].startswith(_MARK_FRAGMENT):
-                if anchor:
-                    fragments[anchor] = tuple(fragment)
-                if not line_t[1][len(_MARK_FRAGMENT):].rstrip():
-                    fragments_cutoff = idx + 1
-                    break
-                anchor = line_t[1].split(_SEP_0, maxsplit=1)[1]
-                fragment.clear()
-                continue
-            fragment += [line_t]
-        self._lines_t = self._lines_t[fragments_cutoff:]
-
         while True:
-            snapshot_before = self._lines_t[:]
+            fragments: dict[str, tuple[tuple[str, str], ...]] = {}
+            anchor = ''
+            fragment: list[tuple[str, str]] = []
+            fragments_cutoff = -1
+            for idx, line_t in enumerate(self._lines_t[:] + [('', '')]):
+                if line_t[1].startswith(_MARK_FRAGMENT):
+                    if anchor:
+                        fragments[anchor] = tuple(fragment)
+                    if not line_t[1][len(_MARK_FRAGMENT):].rstrip():
+                        fragments_cutoff = idx
+                        break
+                    anchor = line_t[1].split(_SEP_0, maxsplit=1)[1]
+                    fragment.clear()
+                    continue
+                fragment += [line_t]
+
             new_lines_t: list[tuple[str, str]] = []
-            for line_t in reversed(self._lines_t):
+            replacement_happened = False
+            for idx, line_t in enumerate(self._lines_t):
+                if replacement_happened or idx == fragments_cutoff:
+                    new_lines_t += [line_t]
+                    continue
                 cmd_name, remains = line_t[1].split(_SEP_0, maxsplit=1)
-                new_lines_t[0:0] = (
-                        [line_t] if cmd_name != _MARK_INSERT
-                        else insert(line_t[0],
-                                    self._args_for_cmd(cmd_name, remains),
-                                    fragments))
+                if cmd_name == _MARK_INSERT:
+                    new_lines_t += insert(
+                            line_t[0],
+                            self._args_for_cmd(cmd_name, remains),
+                            fragments)
+                    replacement_happened = True
+                else:
+                    new_lines_t += [line_t]
             self._lines_t = new_lines_t
-            if self._lines_t == snapshot_before:
+            if not replacement_happened:
+                self._lines_t = self._lines_t[fragments_cutoff + 1:]
                 break
 
     @staticmethod
index 9f7517d7ef61376df897de1a7732c978038e62e0..cd2e24d48083215e01f7acef86203ba5d9aad8cf 100644 (file)
@@ -21,13 +21,15 @@ log 2 $ - password: bar
 × connection_state
 log 1 $ connection_state set to: [?]
 
-× attempting-foobarbaz
+× attempting
 insert connection_state : +1 ? connecting
-log 2 $ attempting connection to foo.bar.baz:§§ identifying with …
+log 2 $ attempting connection to HOSTNAME:§§ identifying with …
+
+× attempting-foobarbaz
+insert attempting : +1 HOSTNAME foo.bar.baz
 
 × attempting-bazbarfoo
-insert connection_state : +3 ? connecting
-log 4 $ attempting connection to baz.bar.foo:§§ identifying with …
+insert attempting : +3 HOSTNAME baz.bar.foo
 
 × fake-testing-timeout
 insert connection_state : +1 ? failed to connect: FAKE TESTING TIMEOUT
index 68fc4dd20df7a62874d574ea76aa15ccb046482f..b8852f67b94e1821d92d147ffa4ccd316b91692d 100644 (file)
@@ -347,7 +347,7 @@ log 8 > USER foo 0 * :foo
 log 8 > NICK :?foo
 servermsg 1 :*.?.net 432 * ?foo :Erroneous nickname
 log 8 < :*.?.net 432 * ?foo :Erroneous nickname
-insert disconnect :2 +8
+insert disconnect :-1 +8
 log 9 $ DISCONNECTED
 log 8 $ nickname refused for bad format, giving up
 
@@ -381,7 +381,7 @@ log 10 > USER baz 0 * :baz
 log 10 > NICK :baz
 servermsg 2 FAKE_IRC_CONN_ABORT_EXCEPTION
 log 10 $ connection_state set to: [broken: FAKE_IRC_CONN_ABORT_EXCEPTION]
-insert disconnect :2 +10
+insert disconnect :-1 +10
 log 11 $ DISCONNECTED
 log 10 $ will retry connecting in 1 seconds
 > /window 10
@@ -407,7 +407,7 @@ insert conn_init_0 1:8
 log 2,3,4,5,6,7 $ CONNECTED
 insert conn_init_0 9:
 insert conn_init_1
-insert conn_init_2 :1
+insert conn_init_2 :2
 log 1 > JOIN :#testtest
-insert conn_init_2 1:
+insert conn_init_2 2:
 insert during_conn : +0
index e08b87cb17b3705684036fd14b18b3fef15aafdc..74686bf80130c6d6a3ab4609411ec17662ed5aab 100644 (file)
@@ -35,19 +35,21 @@ line 0 on_black,bright_white ---------------------------------------------------
 × line-scrolldown
 line 21 on_black,bright_white,reverse vvv XXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
 
-× lines-status-prompt-start
-line 22 on_black,bright_white :start)====================================================X123456789X123456789X§§
+× lines-status-prompt
+line 22 on_black,bright_white x123456789x1234567=========================================X123456789X123456789X§§
 insert lines-prompt-empty
 
+× lines-status-prompt-start
+insert lines-status-prompt : +22 x123456789x1234567 :start)===========
+
 × lines-status-prompt-foobarbaz
-line 22 on_black,bright_white foo.bar.baz:debug)=========================================X123456789X123456789X§§
-insert lines-prompt-empty
+insert lines-status-prompt : +22 x123456789x1234567 foo.bar.baz:debug)
 
 × line-invalid-prompt-command
-line 0 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: ?
+line 0 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: MSG§§
 
 × line-invalid-prompt-command-unknown
-line 0 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: /? unknown§§
+insert line-invalid-prompt-command : +0 MSG /CMD unknown
 
 × line-ping
 line 0 on_black,bright_white < §§:§§:§§ PING :?
@@ -55,6 +57,10 @@ line 0 on_black,bright_white < §§:§§:§§ PING :?
 × line-pong
 line 0 on_black,bright_green > §§:§§:§§ PONG :?
 
+× lines-ping-pong
+insert line-ping : +0 ? ??
+insert line-pong : +1 ? ??
+
 × line-tui-log
 line 0 on_black,bright_cyan # §§:§§:§§ ?§§
 
@@ -76,14 +82,22 @@ line 0 on_black,bright_green > §§:§§:§§ ?§§
 × line-cal
 line 0 on_black,bright_white 20§§-§§-§§ §§
 
+× enter-unknown
+> /?
+log 0 # invalid prompt command: /? unknown
+
 × servermsglogged
 servermsg 0 MSG
 log 1 < MSG
 
+× ping-pong
+insert servermsglogged : +0 MSG PING :?
+log 1 > PONG :?
+
 × history_0
 insert line-cal : +0
-insert line-invalid-prompt-command : +1 ? not prefixed by /§§
-insert line-invalid-prompt-command-unknown : +2 ? foo
+insert line-invalid-prompt-command : +1 MSG not prefixed by /
+insert line-invalid-prompt-command-unknown : +2 CMD foo
 insert line-tui-log : +3 ? commands available in this window:
 insert line-tui-log : +4 ?   /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]§§
 insert line-tui-log : +5 ?   /help§§
@@ -96,18 +110,18 @@ insert line-tui-log : +11 ?   /window.paste
 insert line-tui-log : +12 ?   /window.prompt.backspace§§
 insert line-tui-log : +13 ?   /window.prompt.move_cursor DIRECTION§§
 insert line-tui-log : +14 ?   /window.prompt.scroll DIRECTION§§
-insert line-invalid-prompt-command-unknown : +15 ? 0
-insert line-invalid-prompt-command-unknown : +16 ? 1
-insert line-invalid-prompt-command-unknown : +17 ? 2
-insert line-invalid-prompt-command-unknown : +18 ? 3
-insert line-invalid-prompt-command-unknown : +19 ? 4
-insert line-invalid-prompt-command-unknown : +20 ? 5
-insert line-invalid-prompt-command-unknown : +21 ? 6
-insert line-invalid-prompt-command-unknown : +22 ? 7
-insert line-invalid-prompt-command-unknown : +23 ? foo_0123456789_0123456789_0123456789
-insert line-invalid-prompt-command : +24 ? /foo_0123456789_0123456789_0123456789_§§
+insert line-invalid-prompt-command-unknown : +15 CMD 0
+insert line-invalid-prompt-command-unknown : +16 CMD 1
+insert line-invalid-prompt-command-unknown : +17 CMD 2
+insert line-invalid-prompt-command-unknown : +18 CMD 3
+insert line-invalid-prompt-command-unknown : +19 CMD 4
+insert line-invalid-prompt-command-unknown : +20 CMD 5
+insert line-invalid-prompt-command-unknown : +21 CMD 6
+insert line-invalid-prompt-command-unknown : +22 CMD 7
+insert line-invalid-prompt-command-unknown : +23 CMD foo_0123456789_0123456789_0123456789
+insert line-invalid-prompt-command : +24 MSG /foo_0123456789_0123456789_0123456789_§§
 insert line-bright-red-bold : +25 ?    unknown
-insert line-invalid-prompt-command : +26 ? /bar_0123456789_0123456789_0123456789_§§
+insert line-invalid-prompt-command : +26 MSG /bar_0123456789_0123456789_0123456789_§§
 insert line-bright-red-bold : +27 ?    unknown
 insert line-tui-log : +28 ? windows available via /window:§§
 insert line-tui-log : +29 ?   0) :start§§
@@ -134,66 +148,38 @@ insert line-server-log : +15 ? connection_state set to: [connected]
 insert line-client-msg : +16 ? CAP LS :302
 insert line-client-msg : +17 ? USER baz 0 * :bar
 insert line-client-msg : +18 ? NICK :foo
-insert line-ping : +19 ? ?
-insert line-pong : +20 ? ?
+insert lines-ping-pong : +19 ?? ?
 insert line-ping : +21 ? 9 123456789 123456789 123456789 123456789 123456789 123456789§§
 insert line-bright-white : +22 ?    123456789 123456789
 insert line-pong : +23 ? 9 123456789 123456789 123456789 123456789 123456789 123456789§§
 insert line-bright-green : +24 ?    123456789 123456789
-insert line-ping : +25 ? foo
-insert line-pong : +26 ? foo
-insert line-ping : +27 ? bar
-insert line-pong : +28 ? bar
-insert line-ping : +29 ? baz
-insert line-pong : +30 ? baz
-insert line-ping : +31 ? 0
-insert line-pong : +32 ? 0
-insert line-ping : +33 ? 1
-insert line-pong : +34 ? 1
-insert line-ping : +35 ? 2
-insert line-pong : +36 ? 2
-insert line-ping : +37 ? 3
-insert line-pong : +38 ? 3
-insert line-ping : +39 ? 4
-insert line-pong : +40 ? 4
-insert line-ping : +41 ? 5
-insert line-pong : +42 ? 5
-insert line-ping : +43 ? 6
-insert line-pong : +44 ? 6
-insert line-ping : +45 ? 7
-insert line-pong : +46 ? 7
-insert line-ping : +47 ? 8
-insert line-pong : +48 ? 8
-insert line-ping : +49 ? 9
-insert line-pong : +50 ? 9
-insert line-ping : +51 ? 10
-insert line-pong : +52 ? 10
-insert line-ping : +53 ? 11
-insert line-pong : +54 ? 11
-insert line-ping : +55 ? 12
-insert line-pong : +56 ? 12
-insert line-ping : +57 ? 13
-insert line-pong : +58 ? 13
-insert line-ping : +59 ? 14
-insert line-pong : +60 ? 14
-insert line-ping : +61 ? 15
-insert line-pong : +62 ? 15
-insert line-ping : +63 ? 16
-insert line-pong : +64 ? 16
-insert line-ping : +65 ? 17
-insert line-pong : +66 ? 17
-insert line-ping : +67 ? 18
-insert line-pong : +68 ? 18
-insert line-ping : +69 ? 19
-insert line-pong : +70 ? 19
-insert line-ping : +71 ? 20
-insert line-pong : +72 ? 20
-insert line-ping : +73 ? 21
-insert line-pong : +74 ? 21
-insert line-ping : +75 ? 22
-insert line-pong : +76 ? 22
-insert line-ping : +77 ? 23
-insert line-pong : +78 ? 23
+insert lines-ping-pong : +25 ?? foo
+insert lines-ping-pong : +27 ?? bar
+insert lines-ping-pong : +29 ?? baz
+insert lines-ping-pong : +31 ?? 0
+insert lines-ping-pong : +33 ?? 1
+insert lines-ping-pong : +35 ?? 2
+insert lines-ping-pong : +37 ?? 3
+insert lines-ping-pong : +39 ?? 4
+insert lines-ping-pong : +41 ?? 5
+insert lines-ping-pong : +43 ?? 6
+insert lines-ping-pong : +45 ?? 7
+insert lines-ping-pong : +47 ?? 8
+insert lines-ping-pong : +49 ?? 9
+insert lines-ping-pong : +51 ?? 10
+insert lines-ping-pong : +53 ?? 11
+insert lines-ping-pong : +55 ?? 12
+insert lines-ping-pong : +57 ?? 13
+insert lines-ping-pong : +59 ?? 14
+insert lines-ping-pong : +61 ?? 15
+insert lines-ping-pong : +63 ?? 16
+insert lines-ping-pong : +65 ?? 17
+insert lines-ping-pong : +67 ?? 18
+insert lines-ping-pong : +69 ?? 19
+insert lines-ping-pong : +71 ?? 20
+insert lines-ping-pong : +73 ?? 21
+insert lines-ping-pong : +75 ?? 22
+insert lines-ping-pong : +77 ?? 23
 
 ×
 
@@ -298,22 +284,14 @@ insert lines-status-prompt-start : +22 X123456789X123456789X =============([(0:3
 insert lines-empty :7
 insert history_0 :15 +7
 insert lines-status-prompt-start : +22 X123456789X123456789X =================([0]
-> /0
-log 0 # invalid prompt command: /0 unknown
-> /1
-log 0 # invalid prompt command: /1 unknown
-> /2
-log 0 # invalid prompt command: /2 unknown
-> /3
-log 0 # invalid prompt command: /3 unknown
-> /4
-log 0 # invalid prompt command: /4 unknown
-> /5
-log 0 # invalid prompt command: /5 unknown
-> /6
-log 0 # invalid prompt command: /6 unknown
-> /7
-log 0 # invalid prompt command: /7 unknown
+insert enter-unknown : +0 ? 0
+insert enter-unknown : +0 ? 1
+insert enter-unknown : +0 ? 2
+insert enter-unknown : +0 ? 3
+insert enter-unknown : +0 ? 4
+insert enter-unknown : +0 ? 5
+insert enter-unknown : +0 ? 6
+insert enter-unknown : +0 ? 7
 insert history_0 1:23 +0
 insert lines-status-prompt-start : +22 X123456789X123456789X =================([0]
 
@@ -484,10 +462,8 @@ insert history_0 28:32 +18
 insert lines-status-prompt-start : +22 X123456789X123456789X =========([0] 1 (2:7)
 
 # 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) 
-insert servermsglogged : +0 MSG PING :?
-log 1 > PONG :?
-insert servermsglogged : +0 MSG PING :9 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789
-log 1 > PONG :9 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789
+insert ping-pong : +0 ? ?
+insert ping-pong : +0 ? 9 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789
 insert history_0 11:28 +0
 insert line-bookmark : +17
 insert history_0 28:32 +18
@@ -500,10 +476,9 @@ insert line-bookmark : +15
 insert history_1 19:25 +16
 insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7)
 
-### # check that growth below scroll does not by itself re-position bookmark in history
+# check that growth below scroll does not by itself re-position bookmark in history
 > /window.history.scroll up
-insert servermsglogged : +0 MSG PING :foo
-log 1 > PONG :foo
+insert ping-pong : +0 ? foo
 insert lines-empty :6
 insert history_1 0:15 +6
 insert line-scrolldown : +21 XXXXXX [10] v
@@ -528,8 +503,7 @@ insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:2)]
 
 # check that growing lines below scroll in other preserves non-bottom bookmark (left in sight on previous window leave)
 > /window 0
-insert servermsglogged : +0 MSG PING :bar
-log 1 > PONG :bar
+insert ping-pong : +0 ? bar
 insert history_0 11:32 +0
 insert line-bookmark : +21
 insert lines-status-prompt-start : +22 X123456789X123456789X =====([0] (1:4) (2:7)
@@ -546,8 +520,7 @@ insert history_1 :15 +6
 insert line-scrolldown : +21 XXXXXX [12] v
 insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:4)] (2:7)
 > /window 0
-insert servermsglogged : +0 MSG PING :baz
-log 1 > PONG :baz
+insert ping-pong : +0 ? baz
 insert history_0 11:32 +0
 insert line-bookmark : +21
 insert lines-status-prompt-start : +22 X123456789X123456789X =====([0] (1:6) (2:7)
@@ -568,8 +541,7 @@ insert history_1 25:31 +16
 insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7)
 
 # check log growth beyond max depth only remarkable after scrolling up to limit
-insert servermsglogged : +0 MSG PING :0
-log 1 > PONG :0
+insert ping-pong : +0 ? 0
 insert history_1 12:25 +0
 insert line-bookmark : +13
 insert history_1 25:33 +14
@@ -590,8 +562,7 @@ insert line-scrolldown : +21 XXXXXX [29] v
 insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7)
 
 # check cut-off log growth seen from topmost scroll not affecting scrolldown count, but unread-lines status
-insert servermsglogged : +0 MSG PING :0
-log 1 > PONG :0
+insert ping-pong : +0 ? 0
 insert lines-empty :20
 insert history_1 3:4 +20
 insert line-scrolldown : +21 XXXXXX [29] v
@@ -602,36 +573,21 @@ insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:2)]
 insert history_0 11:32 +0
 insert line-bookmark : +21
 insert lines-status-prompt-start : +22 X123456789X123456789X =====([0] (1:2) (2:7)
-insert servermsglogged : +0 MSG PING :1
-log 1 > PONG :1
-insert servermsglogged : +0 MSG PING :2
-log 1 > PONG :2
-insert servermsglogged : +0 MSG PING :3
-log 1 > PONG :3
-insert servermsglogged : +0 MSG PING :4
-log 1 > PONG :4
-insert servermsglogged : +0 MSG PING :5
-log 1 > PONG :5
-insert servermsglogged : +0 MSG PING :6
-log 1 > PONG :6
-insert servermsglogged : +0 MSG PING :7
-log 1 > PONG :7
-insert servermsglogged : +0 MSG PING :8
-log 1 > PONG :8
-insert servermsglogged : +0 MSG PING :9
-log 1 > PONG :9
-insert servermsglogged : +0 MSG PING :10
-log 1 > PONG :10
-insert servermsglogged : +0 MSG PING :11
-log 1 > PONG :11
-insert servermsglogged : +0 MSG PING :12
-log 1 > PONG :12
-insert servermsglogged : +0 MSG PING :13
-log 1 > PONG :13
-insert servermsglogged : +0 MSG PING :14
-log 1 > PONG :14
-insert servermsglogged : +0 MSG PING :15
-log 1 > PONG :15
+insert ping-pong : +0 ? 1
+insert ping-pong : +0 ? 2
+insert ping-pong : +0 ? 3
+insert ping-pong : +0 ? 4
+insert ping-pong : +0 ? 5
+insert ping-pong : +0 ? 6
+insert ping-pong : +0 ? 7
+insert ping-pong : +0 ? 8
+insert ping-pong : +0 ? 9
+insert ping-pong : +0 ? 10
+insert ping-pong : +0 ? 11
+insert ping-pong : +0 ? 12
+insert ping-pong : +0 ? 13
+insert ping-pong : +0 ? 14
+insert ping-pong : +0 ? 15
 insert history_0 11:32 +0
 insert line-bookmark : +21
 insert lines-status-prompt-start : +22 X123456789X123456789X ====([0] (1:32) (2:7)
@@ -656,8 +612,7 @@ insert history_1 41:61 +0
 insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7)
 
 # check bookmark remains absent with log growing while scrolled to bottom, …
-insert servermsglogged : +0 MSG PING :16
-log 1 > PONG :16
+insert ping-pong : +0 ? 16
 insert history_1 43:63 +0
 insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7)
 
@@ -667,8 +622,7 @@ insert lines-empty :2
 insert history_1 35:54 +2
 insert line-scrolldown : +21 XXXXXX [11] v
 insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7)
-insert servermsglogged : +0 MSG PING :17
-log 1 > PONG :17
+insert ping-pong : +0 ? 17
 insert lines-empty :4
 insert history_1 37:54 +4
 insert line-scrolldown : +21 XXXXXX [13] v
@@ -687,36 +641,21 @@ insert lines-empty :2
 insert history_1 37:54 +2
 insert line-scrolldown : +21 XXXXXX [11] v
 insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7)
-insert servermsglogged : +0 MSG PING :18
-log 1 > PONG :18
-insert servermsglogged : +0 MSG PING :19
-log 1 > PONG :19
-insert servermsglogged : +0 MSG PING :20
-log 1 > PONG :20
-insert servermsglogged : +0 MSG PING :21
-log 1 > PONG :21
-insert servermsglogged : +0 MSG PING :22
-log 1 > PONG :22
-insert servermsglogged : +0 MSG PING :23
-log 1 > PONG :23
-insert servermsglogged : +0 MSG PING :24
-log 1 > PONG :24
-insert servermsglogged : +0 MSG PING :25
-log 1 > PONG :25
-insert servermsglogged : +0 MSG PING :26
-log 1 > PONG :26
-insert servermsglogged : +0 MSG PING :27
-log 1 > PONG :27
-insert servermsglogged : +0 MSG PING :28
-log 1 > PONG :28
-insert servermsglogged : +0 MSG PING :29
-log 1 > PONG :29
-insert servermsglogged : +0 MSG PING :30
-log 1 > PONG :30
-insert servermsglogged : +0 MSG PING :31
-log 1 > PONG :31
-insert servermsglogged : +0 MSG PING :32
-log 1 > PONG :32
+insert ping-pong : +0 ? 18
+insert ping-pong : +0 ? 19
+insert ping-pong : +0 ? 20
+insert ping-pong : +0 ? 21
+insert ping-pong : +0 ? 22
+insert ping-pong : +0 ? 23
+insert ping-pong : +0 ? 24
+insert ping-pong : +0 ? 25
+insert ping-pong : +0 ? 26
+insert ping-pong : +0 ? 27
+insert ping-pong : +0 ? 28
+insert ping-pong : +0 ? 29
+insert ping-pong : +0 ? 30
+insert ping-pong : +0 ? 31
+insert ping-pong : +0 ? 32
 insert lines-empty :20
 insert history_1 67:68 +20
 insert line-scrolldown : +21 XXXXXX [29] v