From 222944543b5b0ae66d67c9c0fdb26fe5aac366cd Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Thu, 23 Oct 2025 01:42:34 +0200 Subject: [PATCH] In tests, replace anchoring from within script by inserts of pre-defined blocks. --- src/ircplom/testing.py | 53 +- src/tests/_timeout_retries.test | 73 +- src/tests/connect_disconnect_legalities.test | 30 +- src/tests/error_disconnects.test | 40 +- src/tests/pingpong.test | 71 +- src/tests/test.test | 178 ++-- src/tests/tui_draw.test | 843 ++++++++----------- 7 files changed, 576 insertions(+), 712 deletions(-) diff --git a/src/ircplom/testing.py b/src/ircplom/testing.py index 406d2f1..183df9d 100644 --- a/src/ircplom/testing.py +++ b/src/ircplom/testing.py @@ -16,12 +16,12 @@ from ircplom.tui_base import (TerminalInterface, TuiEvent, PATH_TESTS = Path('tests') _FAKE_TIMEOUT_PORTS_BEYOND = 10000 -_MARK_ANCHOR = '|' _MARK_COMMENT = '#' +_MARK_FRAGMENT = '×' +_MARK_INSERT = 'insert' _MARK_LOG = 'log' _MARK_LOGSRVRMSG = 'loggedservermsg' _MARK_PROMPT = '>' -_MARK_REPEAT = 'repeat' _MARK_SCREENLINE = 'line' _MARK_SERVERMSG = 'servermsg' _MARK_WAIT = 'wait' @@ -34,10 +34,10 @@ _TOK_IDX_LOGSRVRMSG = 's' _TOK_IDX_REPEAT = 'r' _SIGNATURE_FOR_CMD = { + _MARK_INSERT: (3, 2), _MARK_LOG: (2, 0), _MARK_LOGSRVRMSG: (3, 0), _MARK_PROMPT: (1, None), - _MARK_REPEAT: (2, 1), _MARK_SCREENLINE: (3, 0), _MARK_SERVERMSG: (2, 0), _MARK_WAIT: (1, 0), @@ -210,21 +210,18 @@ class _Playbook: (_SEP_2.join((index_str, _TOK_IDX_LOGSRVRMSG, str(1))), _SEP_0.join((_MARK_LOG, args[1], args[2])))] - def repeat(index_str: str, + def insert(index_str: str, args: tuple[str, ...], - anchors: dict[str, int], + fragments: dict[str, tuple[tuple[str, str], ...]], **__ ) -> list[tuple[str, str]]: candidates = [ - (_SEP_2.join((index_str, _TOK_IDX_REPEAT, lt[0])), lt[1]) - for lt in self._lines_t[int(anchors[args[0]+'-in']): - int(anchors[args[0]+'-out'])] - if not lt[1].startswith(_MARK_ANCHOR)] # keep anchors unique - idx_rep_offset = _SIGNATURE_FOR_CMD[_MARK_REPEAT][1] - assert idx_rep_offset is not None - if len(args) <= idx_rep_offset: - return candidates - rep_offset = int(args[idx_rep_offset]) + (_SEP_2.join((index_str, _TOK_IDX_REPEAT, lt[0])), lt[1]) + for lt in fragments[args[0]]] + idx_in, idx_out = ((int(val) if val else None) + for val in args[1].split(_SEP_2)) + candidates = candidates[idx_in:idx_out] + rep_offset = int(args[2]) lowest_int: Optional[int] = None inserts = [] for candidate in candidates: @@ -257,18 +254,30 @@ class _Playbook: self._lines_t = [line_t for line_t in self._lines_t if line_t[1].rstrip() and not line_t[1].startswith(_MARK_COMMENT)] - expand_parsed(_MARK_LOGSRVRMSG, split_server_put_and_log) + + 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: - anchors: dict[str, int] = {} - for idx, line_t in enumerate(self._lines_t): - if line_t[1].startswith(_MARK_ANCHOR): - anchors[line_t[1].split(_SEP_0, maxsplit=1)[1]] = idx snapshot_before = self._lines_t[:] - expand_parsed(_MARK_REPEAT, repeat, anchors=anchors) + expand_parsed(_MARK_INSERT, insert, fragments=fragments) if self._lines_t == snapshot_before: break - self._lines_t = [line_t for line_t in self._lines_t - if not line_t[1].startswith(_MARK_ANCHOR)] + + expand_parsed(_MARK_LOGSRVRMSG, split_server_put_and_log) if self._verbose: title_idx = 'line number(s)' diff --git a/src/tests/_timeout_retries.test b/src/tests/_timeout_retries.test index c6f10ad..d741f81 100644 --- a/src/tests/_timeout_retries.test +++ b/src/tests/_timeout_retries.test @@ -1,57 +1,59 @@ -# NB: FakeIrcConnection on any port > 10000 will fail connecting with a timeout -# the TestingClient meanwhile will decrement any port of that range by 1 after -# each started connection attempt -> /connect foo.bar.baz:10003 foo:bar baz:foobarbazquux - -| clientwin-init-in -| isupport-clear-in +× isupport-clear log 1 $.. isupport cleared log 1 $.. isupport:CHANTYPES set to: [#&] log 1 $.. isupport:PREFIX set to: [(ov)@+] log 1 $.. isupport:USERLEN set to: [10] -| isupport-clear-out + +× clientwin-init +insert isupport-clear : +1 log 1 $.. caps cleared log 1 $.. users cleared log 1 $.. channels cleared -| clientwin-init-out log , $.. DISCONNECTED -log 1 $.. hostname set to: [foo.bar.baz] -| conn-init-retries-in + +× conn-retry +log 1 $.. connection_state set to: [connecting] +log 1 $.. port set to: [10002] +log 1 $.. connection_state set to: [failed to connect: FAKE TESTING TIMEOUT] + +× conn-init-retries log 1 $.. port set to: [10003] log 1 $.. nick_wanted set to: [foo] log 1 $.. user_wanted set to: [foobarbazquux] log 1 $.. realname set to: [baz] log 1 $.. password set to: [bar] - -log 1 $.. connection_state set to: [connecting] -log 1 $.. port set to: [10002] -log 1 $.. connection_state set to: [failed to connect: FAKE TESTING TIMEOUT] +insert conn-retry : +1 log 1 $!. will retry connecting in 1 seconds - -log 1 $.. connection_state set to: [connecting] +insert conn-retry :1 +1 log 1 $.. port set to: [10001] -log 1 $.. connection_state set to: [failed to connect: FAKE TESTING TIMEOUT] +insert conn-retry 2: +1 log 1 $!. will retry connecting in 2 seconds - -log 1 $.. connection_state set to: [connecting] +insert conn-retry :1 +1 log 1 $.. port set to: [10000] -log 1 $.. connection_state set to: [failed to connect: FAKE TESTING TIMEOUT] +insert conn-retry 2: +1 log 1 $!. will retry connecting in 4 seconds -| conn-init-retries-out -# with TestingClient finally having reduced port to 10000, connecting works now -| conn-full-in -| conn0-in +× conn log 1 $.. connection_state set to: [connecting] log 1 $.. connection_state set to: [connected] -| conn0-out log , $.. CONNECTED -| conn1-in log 1 >.. CAP LS :302 log 1 >.. USER foobarbazquux 0 * :baz log 1 >.. NICK :foo -| conn1-out -| conn-full-out + +× + +# NB: FakeIrcConnection on any port > 10000 will fail connecting with a timeout +# the TestingClient meanwhile will decrement any port of that range by 1 after +# each started connection attempt +> /connect foo.bar.baz:10003 foo:bar baz:foobarbazquux + +insert clientwin-init : +1 +log 1 $.. hostname set to: [foo.bar.baz] +insert conn-init-retries : +1 + +# with TestingClient finally having reduced port to 10000, connecting works now +insert conn : +1 # test retry chain also started by in-connection timeout servermsg 0 timeout @@ -59,23 +61,20 @@ log 1 >.. PING :what's up? servermsg 0 timeout servermsg 0 no timely PONG from server log 1 $.. connection_state set to: [broken: no timely PONG from server] -repeat isupport-clear +insert isupport-clear : +1 log 1 $.. connection_state set to: [] log , $.. DISCONNECTED log 1 $!. will retry connecting in 1 seconds -repeat conn-full +insert conn : +1 # on second server, check timed auto-retries don't activate after manual intervention > /connect baz.bar.foo:10003 foo:bar baz:foobarbazquux -repeat clientwin-init +2 -log , $.. DISCONNECTED +insert clientwin-init : +2 log 2 $.. hostname set to: [baz.bar.foo] -repeat conn-init-retries +2 +insert conn-init-retries : +2 > /window 2 > /reconnect -repeat conn0 +2 -log , $.. CONNECTED -repeat conn1 +2 +insert conn : +2 wait 4 > /disconnect log 2 >.. QUIT :ircplom says bye diff --git a/src/tests/connect_disconnect_legalities.test b/src/tests/connect_disconnect_legalities.test index bed7b48..5277edd 100644 --- a/src/tests/connect_disconnect_legalities.test +++ b/src/tests/connect_disconnect_legalities.test @@ -1,11 +1,20 @@ -# to prepare, initiate connection -> /connect foo.bar.baz foo bar:baz -| isupport-clear-in +× isupport-clear log 1 $.. isupport cleared log 1 $.. isupport:CHANTYPES set to: [#&] log 1 $.. isupport:PREFIX set to: [(ov)@+] log 1 $.. isupport:USERLEN set to: [10] -| isupport-clear-out +× connecting +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 +× + +# to prepare, initiate connection +> /connect foo.bar.baz foo bar:baz +insert isupport-clear : +1 log 1 $.. caps cleared log 1 $.. users cleared log 1 $.. channels cleared @@ -16,14 +25,7 @@ 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] -| connecting-in -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 -| connecting-out +insert connecting : +1 # fail to reconnect while connected > /window 1 @@ -35,7 +37,7 @@ log 1 $!. not re-connecting since already connected log 1 >.. QUIT :ircplom says bye loggedservermsg 0 1 <.. ERROR :Closing link: (whatever@whatever.com) [Quit: ircplom says bye] log 1 $.. connection_state set to: [Closing link: (whatever@whatever.com) [Quit: ircplom says bye]] -repeat isupport-clear +insert isupport-clear : +1 log 1 $.. connection_state set to: [] log , $.. DISCONNECTED @@ -45,7 +47,7 @@ log 1 $!. cannot send, connection seems closed # succeed to re-connect after disconnect > /reconnect -repeat connecting +insert connecting : +1 > /quit log 0 <.. diff --git a/src/tests/error_disconnects.test b/src/tests/error_disconnects.test index e626d67..0b1b399 100644 --- a/src/tests/error_disconnects.test +++ b/src/tests/error_disconnects.test @@ -1,11 +1,24 @@ -# to prepare first test, initiate connected state -> /connect foo.bar.baz foo bar:baz -| isupport-clear-in +× isupport-clear log 1 $.. isupport cleared log 1 $.. isupport:CHANTYPES set to: [#&] log 1 $.. isupport:PREFIX set to: [(ov)@+] log 1 $.. isupport:USERLEN set to: [10] -| isupport-clear-out +× connecting +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 +× disconnecting +insert isupport-clear : +1 +log 1 $.. connection_state set to: [] +log , $.. DISCONNECTED +× + +# to prepare first test, initiate connected state +> /connect foo.bar.baz foo bar:baz +insert isupport-clear : +1 log 1 $.. caps cleared log 1 $.. users cleared log 1 $.. channels cleared @@ -16,33 +29,22 @@ 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] -| connecting-in -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 -| connecting-out +insert connecting : +1 # test default ERROR handling loggedservermsg 0 1 <.. ERROR :abc def ghi log 1 $.. connection_state set to: [abc def ghi] -| disconnecting-in -repeat isupport-clear -log 1 $.. connection_state set to: [] -log , $.. DISCONNECTED -| disconnecting-out +insert disconnecting : +1 # to prepare next test, get back to connected state > /window 1 > /reconnect -repeat connecting +insert connecting : +1 # test "timed out)" ERROR handling loggedservermsg 0 1 <.. ERROR :Closing link: (Connection timed out) log 1 $.. connection_state set to: [Closing link: (Connection timed out)] -repeat disconnecting +insert disconnecting : +1 log 1 $!. will retry connecting in 1 seconds # over and out diff --git a/src/tests/pingpong.test b/src/tests/pingpong.test index ae5ea5f..7c153f3 100644 --- a/src/tests/pingpong.test +++ b/src/tests/pingpong.test @@ -1,64 +1,67 @@ -> /connect foo.bar.baz foo:bar baz:foobarbazquux -| isupport-clear-in +× isupport-clear log 1 $.. isupport cleared log 1 $.. isupport:CHANTYPES set to: [#&] log 1 $.. isupport:PREFIX set to: [(ov)@+] log 1 $.. isupport:USERLEN set to: [10] -| isupport-clear-out -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: [foobarbazquux] -log 1 $.. realname set to: [baz] -log 1 $.. password set to: [bar] -log 1 $.. port set to: [6697] -| conn0-in + +× conn log 1 $.. connection_state set to: [connecting] log 1 $.. connection_state set to: [connected] -| conn0-out log , $.. CONNECTED -| conn1-in log 1 >.. CAP LS :302 log 1 >.. USER foobarbazquux 0 * :baz log 1 >.. NICK :foo -| conn1-out - -# ensure we PONG properly -loggedservermsg 0 1 <.. PING :? -log 1 >.. PONG :? +× full-timeout # ping on timeout, go on as normal if PONG received -| full-timeout-in -| trigger-ping-in -servermsg 0 timeout -log 1 >.. PING :what's up? -| trigger-ping-out +insert trigger-ping : +0 loggedservermsg 0 1 <.. :*.?.net PONG *.?.net :what's up? loggedservermsg 0 1 <.. :*.?.net NOTICE * :*** Looking up your ident... log 2 <.. (server) *** Looking up your ident... - # another timeout instead of pong? disconnect -repeat trigger-ping +insert trigger-ping : +0 servermsg 0 timeout servermsg 0 no timely PONG from server log 1 $.. connection_state set to: [broken: no timely PONG from server] -repeat isupport-clear +insert isupport-clear : +1 log 1 $.. connection_state set to: [] log 2 $.. DISCONNECTED log 1 $!. will retry connecting in 1 seconds -| full-timeout-out + +× trigger-ping +servermsg 0 timeout +log 1 >.. PING :what's up? + +× + +> /connect foo.bar.baz foo:bar baz:foobarbazquux +insert isupport-clear : +1 +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: [foobarbazquux] +log 1 $.. realname set to: [baz] +log 1 $.. password set to: [bar] +log 1 $.. port set to: [6697] +insert conn : +1 + +# ensure we PONG properly +loggedservermsg 0 1 <.. PING :? +log 1 >.. PONG :? + +insert full-timeout : +0 # on re-connect, ensure timer cleared, i.e. only 2nd time-out will disconnect > /window 1 > /reconnect -repeat conn0 +insert conn :2 +1 log 2 $.. CONNECTED -repeat conn1 -repeat full-timeout +insert conn 3: +1 +insert full-timeout : +0 > /quit log 0 <.. diff --git a/src/tests/test.test b/src/tests/test.test index b24b436..8ac97ef 100644 --- a/src/tests/test.test +++ b/src/tests/test.test @@ -1,38 +1,26 @@ -# on /connect init databases, log in new windows -> /connect foo.bar.baz foo:bar baz:foobarbazquux -| standard-clears-in -| isupport-clear-in +× isupport-clear log 1 $.. isupport cleared log 1 $.. isupport:CHANTYPES set to: [#&] log 1 $.. isupport:PREFIX set to: [(ov)@+] log 1 $.. isupport:USERLEN set to: [10] -| isupport-clear-out + +× standard-clear +insert isupport-clear : +1 log 1 $.. caps cleared log 1 $.. users cleared log 1 $.. channels cleared log , $.. DISCONNECTED -| standard-clears-out -# connect with values set by /connect, init CAP negotation -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: [foobarbazquux] -log 1 $.. realname set to: [baz] -log 1 $.. password set to: [bar] -| conn-in +× conn_init_0 log 1 $.. port set to: [6697] -| conn0-in log 1 $.. connection_state set to: [connecting] log 1 $.. connection_state set to: [connected] -| conn0-out log , $.. CONNECTED -| conn1-in log 1 >.. CAP LS :302 -| conn-out log 1 >.. USER foobarbazquux 0 * :baz log 1 >.. NICK :foo +× conn_init_1 # expect some NOTICE and PING to process/reply during initiation loggedservermsg 0 1 <.. :*.?.net NOTICE * :*** Looking up your ident... log 2 <.. (server) *** Looking up your ident... @@ -42,7 +30,6 @@ loggedservermsg 0 1 <.. :*.?.net NOTICE * :*** Found your hostname (baz.bar.foo) log 2 <.. (server) *** Found your hostname (baz.bar.foo) loggedservermsg 0 1 <.. PING :? log 1 >.. PONG :? - # handle 433 loggedservermsg 0 1 <.. :*.?.net 433 * foo :Nickname already in use log 1 $!. nickname already in use, trying increment @@ -50,7 +37,6 @@ log 1 >.. NICK :foo0 loggedservermsg 0 1 <.. :*.?.net 433 * foo0 :Nickname already in use log 1 $!. nickname already in use, trying increment log 1 >.. NICK :foo1 - # collect server capabilities loggedservermsg 0 1 <.. :*.?.net CAP * LS : foo bar sasl=PLAIN,EXTERNAL baz cap-notify log 1 >.. CAP REQ :sasl @@ -65,7 +51,6 @@ log 1 $.. caps:foo:data set to: [] log 1 $.. caps:sasl:data set to: [] log 1 $.. caps:sasl:data set to: [PLAIN,EXTERNAL] log 1 $.. caps:sasl:enabled set to: [True] - # authenticate via SASL, collect items of user identity log 1 $.. sasl_auth_state set to: [attempting] log 1 >.. AUTHENTICATE :PLAIN @@ -79,14 +64,12 @@ log 1 $.. users:me:host set to: [baz.bar.foo] log 1 $.. sasl_account set to: [foo] loggedservermsg 0 1 <.. :foo.bar.baz 903 foo1 :SASL authentication successful log 1 $.. sasl_auth_state set to: [SASL authentication successful] - # finish CAP negotation, thus login procedure log 1 >.. CAP :END +× conn_init_2 # of all pre-MOTD greeting messages, only process isupports loggedservermsg 0 1 <.. :foo.bar.baz 001 foo1 :Welcome to the foo.bar.baz network -| conn1-out -| conn2-in loggedservermsg 0 1 <.. :foo.bar.baz 002 foo1 :Your host is foo.bar.baz loggedservermsg 0 1 <.. :foo.bar.baz 003 foo1 :This server was created Jan 1 2020 loggedservermsg 0 1 <.. :foo.bar.baz 004 foo1 foo.bar.baz ircserver-1.0 abc def ghi @@ -105,7 +88,6 @@ loggedservermsg 0 1 <.. :foo.bar.baz 255 foo1 :I have 100 clients and 1 serveres loggedservermsg 0 1 <.. :foo.bar.baz 265 foo1 100 150 :Current local users 100, max 150 loggedservermsg 0 1 <.. :foo.bar.baz 266 foo1 1010 1050 :Current global users 1010, max 1050 loggedservermsg 0 1 <.. :foo.bar.baz 250 foo1 :Highest connection count: 151 (150 clients) (1080 connections received) - # collect MOTD into a single output (rather than line-by-line) loggedservermsg 0 1 <.. :foo.bar.baz 375 foo1 :- foo.bar.baz Message of the Day - loggedservermsg 0 1 <.. :foo.bar.baz 372 foo1 :- Howdy! - @@ -116,59 +98,19 @@ log 1 $.. motd set to: log 1 $.. - Howdy! - log 1 $.. - Welcome! - log 1 $.. - (to this server) - - # collect user mode loggedservermsg 0 1 <.. :foo1 MODE foo1 :+Ziw log 1 $.. users:me:modes set to: [+Ziw] - # handle bot query NOTICE loggedservermsg 0 1 <.. :SaslServ!SaslServ@services.bar.baz NOTICE foo1 :Last login from ~foobarbaz@foo.bar.baz on Jan 1 22:00:00 2021 +0000. log 3 <.. (SaslServ) Last login from ~foobarbaz@foo.bar.baz on Jan 1 22:00:00 2021 +0000. -| conn2-out - -# check difference in available commands when switching to client window -> /join #test -log 0 #!. invalid prompt command: /join unknown -> /list -log 0 #.. windows available via /window: -log 0 #.. 0) :start -log 0 #.. 1) foo.bar.baz:debug -log 0 #.. 2) foo.bar.baz:server -log 0 #.. 3) foo.bar.baz/SaslServ -| conn3-in -> /window 1 -> /help -log 1 #.. commands available in this window: -log 1 #.. /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME] -log 1 #.. /disconnect [QUIT_MSG] -log 1 #.. /help -log 1 #.. /join CHANNEL -log 1 #.. /list -log 1 #.. /nick NEW_NICK -log 1 #.. /privmsg TARGET MSG -log 1 #.. /prompt_enter -log 1 #.. /quit -log 1 #.. /raw VERB [PARAMS_STR] -log 1 #.. /reconnect -log 1 #.. /window TOWARDS -log 1 #.. /window.disconnect [QUIT_MSG] -log 1 #.. /window.history.scroll DIRECTION -log 1 #.. /window.join CHANNEL -log 1 #.. /window.nick NEW_NICK -log 1 #.. /window.paste -log 1 #.. /window.privmsg TARGET MSG -log 1 #.. /window.prompt.backspace -log 1 #.. /window.prompt.move_cursor DIRECTION -log 1 #.. /window.prompt.scroll DIRECTION -log 1 #.. /window.raw VERB [PARAMS_STR] -log 1 #.. /window.reconnect +× during_conn # test recoverable 432 > /nick @foo log 1 >.. NICK :@foo loggedservermsg 0 1 <.. :*.?.net 432 foo1 @foo :Erroneous nickname log 1 $!. nickname refused for bad format, keeping current one - # join channel, collect topic, residents; update me:user from JOIN message; ensure topic.who not affecting users DB > /join #test log 1 >.. JOIN :#test @@ -187,13 +129,11 @@ log 1 $.. channels:#test:user_ids set to: log 1 $.. 1 log 1 $.. me log 4 $.. residents: bar, foo1 - # deliver PRIVMSG to channel window, update sender's user+host from metadata loggedservermsg 0 1 <.. :bar!~bar@bar.bar PRIVMSG #test :hi there log 1 $.. users:1:user set to: [~bar] log 1 $.. users:1:host set to: [bar.bar] log 4 <.. [bar] hi there - # check _changing_ TOPIC message is communicated to channel window, as long as either content or who change loggedservermsg 0 1 <.. :bar!~bar@bar.bar TOPIC #test :foo bar baz log 1 $.. channels:#test:topic set to: [Topic(what='foo bar baz', who=NickUserHost(nick='bar', user='~bar', host='bar.bar'))] @@ -202,7 +142,6 @@ loggedservermsg 0 1 <.. :bar!~bar@bar.bar TOPIC #test :foo bar baz loggedservermsg 0 1 <.. :bar!~bar@bar.bar TOPIC #test :abc def ghi log 1 $.. channels:#test:topic set to: [Topic(what='abc def ghi', who=NickUserHost(nick='bar', user='~bar', host='bar.bar'))] log 4 $.. bar!~bar@bar.bar set topic: abc def ghi - # process non-self channel JOIN loggedservermsg 0 1 <.. :baz!~baz@baz.baz JOIN :#test log 1 $.. users:2:nick set to: [?] @@ -214,7 +153,6 @@ log 1 $.. 1 log 1 $.. 2 log 1 $.. me log 4 $.. baz!~baz@baz.baz joins - # join second channel with partial residents identity to compare distribution of resident-specific messages > /join #testtest log 1 >.. JOIN :#testtest @@ -230,7 +168,6 @@ log 1 $.. channels:#testtest:user_ids set to: log 1 $.. 2 log 1 $.. me log 5 $.. residents: baz, foo1 - # handle query window with known user loggedservermsg 0 1 <.. :baz!~baz@baz.baz PRIVMSG foo1 :hi there log 6 <.. [baz] hi there @@ -239,19 +176,16 @@ log 1 >.. PRIVMSG baz :hello, how is it going log 6 >.. [foo1] hello, how is it going loggedservermsg 0 1 <.. :baz!~baz@baz.baz PRIVMSG foo1 :fine! log 6 <.. [baz] fine! - # handle failure to query absent user > /privmsg barbar hello! log 1 >.. PRIVMSG barbar :hello! log 7 >.. [foo1] hello! loggedservermsg 0 1 <.. :*.?.net 401 foo1 barbar :No such nick/channel log 7 $!. barbar not online - # handle non-self renaming loggedservermsg 0 1 <.. :baz!~baz@baz.baz NICK :bazbaz log 1 $.. users:2:nick set to: [bazbaz] log 4,5,6 $.. baz!~baz@baz.baz renames bazbaz - # handle non-self PART in one of two inhabited channels, preserve identity into re-JOIN loggedservermsg 0 1 <.. :bazbaz!~baz@baz.baz PART :#test log 1 $.. channels:#test:exits:2 set to: [P] @@ -266,7 +200,6 @@ log 1 $.. 1 log 1 $.. 2 log 1 $.. me log 4 $.. bazbaz!~baz@baz.baz joins - # handle non-self PART in only inhabited channel, lose identity, re-join as new identity loggedservermsg 0 1 <.. :bar!~bar@bar.bar PART :#test log 1 $.. channels:#test:exits:1 set to: [P] @@ -286,7 +219,6 @@ log 1 $.. 2 log 1 $.. 3 log 1 $.. me log 4 $.. bar!~bar@bar.bar joins - # handle non-self QUIT loggedservermsg 0 1 <.. :bazbaz!~baz@baz.baz QUIT :Client Quit log 1 $.. users:2:exit_msg set to: [QClient Quit] @@ -303,7 +235,6 @@ log 1 $.. me log 5 $.. bazbaz!~baz@baz.baz quits: Client Quit log 1 $.. channels:#testtest:exits:2 cleared log 1 $.. users:2 cleared - # handle self-PART: clear channel, and its squatters loggedservermsg 0 1 <.. :foo1!~foobarbaz@baz.bar.foo PART :#test log 1 $.. channels:#test:exits:me set to: [P] @@ -313,12 +244,10 @@ log 4 $.. foo1!~foobarbaz@baz.bar.foo parts log 1 $.. channels:#test:exits:me cleared log 1 $.. channels:#test cleared log 1 $.. users:3 cleared - # handle lack of implementation loggedservermsg 0 1 <.. foo bar baz log 1 $!. No handler implemented for: foo bar baz log 2,3,4,5,6,7 $!. No handler implemented for: foo bar baz - # handle /disconnect, clear all > /disconnect log 1 >.. QUIT :ircplom says bye @@ -331,7 +260,7 @@ log 5 $.. foo1!~foobarbaz@baz.bar.foo quits: Client Quit log 1 $.. channels:#testtest:exits:me cleared loggedservermsg 0 1 <.. ERROR :Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye] log 1 $.. connection_state set to: [Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye]] -repeat isupport-clear +insert isupport-clear : +1 log 1 $.. caps cleared log 1 $.. channels cleared log 1 $.. connection_state set to: [] @@ -340,7 +269,6 @@ log 1 $.. motd set to: log 1 $.. sasl_account set to: [] log 1 $.. sasl_auth_state set to: [] log 1 $.. users cleared - # fail to send in disconnect, check alert window is command prompt window > /window 6 > /privmsg barbar test @@ -350,51 +278,109 @@ log 6 $!. cannot send, connection seems closed log 1 $!. cannot send, connection seems closed > /privmsg #test test log 1 $!. not sending, since not in channel -| conn3-out + +× disconnect +insert isupport-clear : +8 +log 8 $.. connection_state set to: [] +log , $.. DISCONNECTED + +× + +# on /connect init databases, log in new windows +> /connect foo.bar.baz foo:bar baz:foobarbazquux +insert standard-clear : +1 + +# connect with values set by /connect, init CAP negotation +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: [foobarbazquux] +log 1 $.. realname set to: [baz] +log 1 $.. password set to: [bar] +insert conn_init_0 : +1 + +insert conn_init_1 : +0 +insert conn_init_2 : +0 + +# check difference in available commands when switching to client window +> /join #test +log 0 #!. invalid prompt command: /join unknown +> /list +log 0 #.. windows available via /window: +log 0 #.. 0) :start +log 0 #.. 1) foo.bar.baz:debug +log 0 #.. 2) foo.bar.baz:server +log 0 #.. 3) foo.bar.baz/SaslServ +> /window 1 +> /help +log 1 #.. commands available in this window: +log 1 #.. /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME] +log 1 #.. /disconnect [QUIT_MSG] +log 1 #.. /help +log 1 #.. /join CHANNEL +log 1 #.. /list +log 1 #.. /nick NEW_NICK +log 1 #.. /privmsg TARGET MSG +log 1 #.. /prompt_enter +log 1 #.. /quit +log 1 #.. /raw VERB [PARAMS_STR] +log 1 #.. /reconnect +log 1 #.. /window TOWARDS +log 1 #.. /window.disconnect [QUIT_MSG] +log 1 #.. /window.history.scroll DIRECTION +log 1 #.. /window.join CHANNEL +log 1 #.. /window.nick NEW_NICK +log 1 #.. /window.paste +log 1 #.. /window.privmsg TARGET MSG +log 1 #.. /window.prompt.backspace +log 1 #.. /window.prompt.move_cursor DIRECTION +log 1 #.. /window.prompt.scroll DIRECTION +log 1 #.. /window.raw VERB [PARAMS_STR] +log 1 #.. /window.reconnect + +insert during_conn : +0 # test setting up second client, but 432 irrecoverably > /connect baz.bar.foo ?foo foo:foo -repeat standard-clears +8 +insert standard-clear : +8 log 8 $.. hostname set to: [baz.bar.foo] log 8 $.. port set to: [-1] log 8 $.. nick_wanted set to: [?foo] log 8 $.. user_wanted set to: [foo] log 8 $.. realname set to: [foo] -repeat conn +8 +insert conn_init_0 :5 +8 log 8 >.. USER foo 0 * :foo log 8 >.. NICK :?foo loggedservermsg 1 8 <.. :*.?.net 432 * ?foo :Erroneous nickname -| disconnect-in -repeat isupport-clear +8 -log 8 $.. connection_state set to: [] -log , $.. DISCONNECTED -| disconnect-out +insert disconnect : +8 log 8 $!. nickname refused for bad format, giving up # test failing third connection > /connect baz.baz.baz baz baz:baz -repeat standard-clears +9 +insert standard-clear : +9 log 9 $.. hostname set to: [baz.baz.baz] log 9 $.. port set to: [-1] log 9 $.. nick_wanted set to: [baz] log 9 $.. user_wanted set to: [baz] log 9 $.. realname set to: [baz] -repeat conn +9 +insert conn_init_0 :5 +9 log 9 >.. USER baz 0 * :baz log 9 >.. NICK :baz servermsg 2 FAKE_IRC_CONN_ABORT_EXCEPTION log 9 $.. connection_state set to: [broken: FAKE_IRC_CONN_ABORT_EXCEPTION] -repeat disconnect +9 +insert disconnect : +9 log 9 $!. will retry connecting in 1 seconds # check that (save TUI tests assuming start on window 0, and no 4 yet) on reconnect, all the same effects can be expected > /reconnect -repeat conn0 +insert conn_init_0 1:3 +1 log 2,3,4,5,6,7 $.. CONNECTED -repeat conn1 +insert conn_init_0 4: +1 +insert conn_init_1 : +0 +insert conn_init_2 :1 +0 log 1 >.. JOIN :#testtest -repeat conn2 -repeat conn3 +insert conn_init_2 1: +0 +insert during_conn : +0 > /quit log 0 <.. diff --git a/src/tests/tui_draw.test b/src/tests/tui_draw.test index d0f80f8..e7fd8d7 100644 --- a/src/tests/tui_draw.test +++ b/src/tests/tui_draw.test @@ -1,111 +1,235 @@ -| empty-init-in -| lines-empty-16-in -| lines-empty-8-in -| lines-empty-4-in -| lines-empty-2-in -| lines-empty-1-in +× lines-empty-1 line 0 on_black,bright_white §§ -| lines-empty-1-out -repeat lines-empty-1 +1 -| lines-empty-2-out -repeat lines-empty-1 +2 -repeat lines-empty-1 +3 -| lines-empty-4-out -repeat lines-empty-2 +4 -repeat lines-empty-2 +6 -| lines-empty-8-out -repeat lines-empty-4 +8 -repeat lines-empty-4 +12 -| lines-empty-16-out -repeat lines-empty-4 +16 -repeat lines-empty-2 +20 -| status-[0]-prompt-in -line 22 on_black,bright_white :start)=====================================================================([0]§§ -| prompt-empty-in + +× lines-empty +insert lines-empty-1 : +0 +insert lines-empty-1 : +1 +insert lines-empty-1 : +2 +insert lines-empty-1 : +3 +insert lines-empty-1 : +4 +insert lines-empty-1 : +5 +insert lines-empty-1 : +6 +insert lines-empty-1 : +7 +insert lines-empty-1 : +8 +insert lines-empty-1 : +9 +insert lines-empty-1 : +10 +insert lines-empty-1 : +11 +insert lines-empty-1 : +12 +insert lines-empty-1 : +13 +insert lines-empty-1 : +14 +insert lines-empty-1 : +15 +insert lines-empty-1 : +16 +insert lines-empty-1 : +17 +insert lines-empty-1 : +18 +insert lines-empty-1 : +19 +insert lines-empty-1 : +20 +insert lines-empty-1 : +21 + +× prompt-empty line 23 on_black,bright_white > § §§ line 23 on_black,bright_white,reverse §§ § -| prompt-empty-out -| status-[0]-prompt-out -| empty-init-out + +× bookmark +line 0 on_black,bright_white --------------------------------------------------------------------------------§§ + +× scrolldown-1 +line 21 on_black,bright_white,reverse vvv [1] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +× scrolldown-2 +line 21 on_black,bright_white,reverse vvv [2] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +× scrolldown-3 +line 21 on_black,bright_white,reverse vvv [3] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +× scrolldown-4 +line 21 on_black,bright_white,reverse vvv [4] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +× scrolldown-6 +line 21 on_black,bright_white,reverse vvv [6] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +× scrolldown-8 +line 21 on_black,bright_white,reverse vvv [8] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +× scrolldown-10 +line 21 on_black,bright_white,reverse vvv [10] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +× scrolldown-11 +line 21 on_black,bright_white,reverse vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +× scrolldown-12 +line 21 on_black,bright_white,reverse vvv [12] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +× scrolldown-14 +line 21 on_black,bright_white,reverse vvv [14] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +× scrolldown-22 +line 21 on_black,bright_white,reverse vvv [22] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +× scrolldown-25 +line 21 on_black,bright_white,reverse vvv [25] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ + +× status-[0]-prompt +line 22 on_black,bright_white :start)=====================================================================([0]§§ +insert prompt-empty : +23 +× status-[0]-1-prompt +line 22 on_black,bright_white :start)===================================================================([0] 1§§ +insert prompt-empty : +23 +× status-[0]-1:2-prompt +line 22 on_black,bright_white :start)===============================================================([0] (1:2)§§ +insert prompt-empty : +23 +× status-0-[1:2]-prompt +line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:2)]§§ +insert prompt-empty : +23 +× status-[0]-1:4-prompt +line 22 on_black,bright_white :start)===============================================================([0] (1:4)§§ +insert prompt-empty : +23 +× status-0-[1:4]-prompt +line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:4)]§§ +insert prompt-empty : +23 +× status-[0]-1:6-prompt +line 22 on_black,bright_white :start)===============================================================([0] (1:6)§§ +insert prompt-empty : +23 +× status-0-[1:6]-prompt +line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:6)]§§ +insert prompt-empty : +23 +× status-0-[1]-prompt +line 22 on_black,bright_white foo.bar.baz:debug)========================================================(0 [1]§§ +insert prompt-empty : +23 +× status-[0:1]-prompt +line 22 on_black,bright_white :start)=================================================================([(0:1)]§§ +insert prompt-empty : +23 +× status-[0:1]-1-prompt +line 22 on_black,bright_white :start)===============================================================([(0:1)] 1§§ +insert prompt-empty : +23 +× status-0:1-[1]-prompt +line 22 on_black,bright_white foo.bar.baz:debug)====================================================((0:1) [1]§§ +insert prompt-empty : +23 +× status-[0:1]-1:19-prompt +line 22 on_black,bright_white :start)==========================================================([(0:1)] (1:19)§§ +insert prompt-empty : +23 +× status-[0:3]-prompt +line 22 on_black,bright_white :start)=================================================================([(0:3)]§§ +insert prompt-empty : +23 +× status-[0:12]-prompt +line 22 on_black,bright_white :start)================================================================([(0:12)]§§ +insert prompt-empty : +23 + +× history_0 +line 0 on_black,bright_white 20§§-§§-§§ §§ +line 1 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: not prefixed by / §§ +line 2 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /foo unknown §§ +line 3 on_black,bright_cyan #.. §§:§§:§§ commands available in this window:§§ +line 4 on_black,bright_cyan #.. §§:§§:§§ /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]§§ +line 5 on_black,bright_cyan #.. §§:§§:§§ /help§§ +line 6 on_black,bright_cyan #.. §§:§§:§§ /list§§ +line 7 on_black,bright_cyan #.. §§:§§:§§ /prompt_enter§§ +line 8 on_black,bright_cyan #.. §§:§§:§§ /quit§§ +line 9 on_black,bright_cyan #.. §§:§§:§§ /window TOWARDS§§ +line 10 on_black,bright_cyan #.. §§:§§:§§ /window.history.scroll DIRECTION§§ +line 11 on_black,bright_cyan #.. §§:§§:§§ /window.paste +line 12 on_black,bright_cyan #.. §§:§§:§§ /window.prompt.backspace§§ +line 13 on_black,bright_cyan #.. §§:§§:§§ /window.prompt.move_cursor DIRECTION§§ +line 14 on_black,bright_cyan #.. §§:§§:§§ /window.prompt.scroll DIRECTION§§ +line 15 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /0 unknown§§ +line 16 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /1 unknown§§ +line 17 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /2 unknown§§ +line 18 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /3 unknown§§ +line 19 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /4 unknown§§ +line 20 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /5 unknown§§ +line 21 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /6 unknown§§ +line 22 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /7 unknown§§ +line 23 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_01234567 unknown§§ +line 24 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_012345678§§ +line 25 on_black,bright_red,bold unknown§§ +line 26 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /bar_0123456789_0123456789_012345678§§ +line 27 on_black,bright_red,bold unknown§§ +line 28 on_black,bright_cyan #.. §§:§§:§§ windows available via /window:§§ +line 29 on_black,bright_cyan #.. §§:§§:§§ 0) :start§§ +line 30 on_black,bright_cyan #.. §§:§§:§§ 1) foo.bar.baz:debug§§ + +× history_1 +line 0 on_black,bright_white 20§§-§§-§§ §§ +line 1 on_black,bright_yellow $.. §§:§§:§§ isupport cleared +line 2 on_black,bright_yellow $.. §§:§§:§§ isupport:CHANTYPES set to: [#&] +line 3 on_black,bright_yellow $.. §§:§§:§§ isupport:PREFIX set to: [(ov)@+] +line 4 on_black,bright_yellow $.. §§:§§:§§ isupport:USERLEN set to: [10] +line 5 on_black,bright_yellow $.. §§:§§:§§ caps cleared +line 6 on_black,bright_yellow $.. §§:§§:§§ users cleared +line 7 on_black,bright_yellow $.. §§:§§:§§ channels cleared +line 8 on_black,bright_yellow $.. §§:§§:§§ hostname set to: [foo.bar.baz] +line 9 on_black,bright_yellow $.. §§:§§:§§ port set to: [-1] +line 10 on_black,bright_yellow $.. §§:§§:§§ nick_wanted set to: [foo] +line 11 on_black,bright_yellow $.. §§:§§:§§ user_wanted set to: [baz] +line 12 on_black,bright_yellow $.. §§:§§:§§ realname set to: [bar] +line 13 on_black,bright_yellow $.. §§:§§:§§ port set to: [6697] +line 14 on_black,bright_yellow $.. §§:§§:§§ connection_state set to: [connecting] +line 15 on_black,bright_yellow $.. §§:§§:§§ connection_state set to: [connected] +line 16 on_black,bright_green >.. §§:§§:§§ CAP LS :302§§ +line 17 on_black,bright_green >.. §§:§§:§§ USER baz 0 * :bar§§ +line 18 on_black,bright_green >.. §§:§§:§§ NICK :foo§§ +line 19 on_black,bright_white <.. §§:§§:§§ PING :? +line 20 on_black,bright_green >.. §§:§§:§§ PONG :? +line 21 on_black,bright_white <.. §§:§§:§§ PING :123456789 123456789 123456789 123456789 123456789 123456789§§ +line 22 on_black,bright_white 123456789 123456789§§ +line 23 on_black,bright_green >.. §§:§§:§§ PONG :123456789 123456789 123456789 123456789 123456789 123456789§§ +line 24 on_black,bright_green 123456789 123456789§§ +line 25 on_black,bright_white <.. §§:§§:§§ PING :foo +line 26 on_black,bright_green >.. §§:§§:§§ PONG :foo +line 27 on_black,bright_white <.. §§:§§:§§ PING :bar +line 28 on_black,bright_green >.. §§:§§:§§ PONG :bar +line 29 on_black,bright_white <.. §§:§§:§§ PING :baz +line 30 on_black,bright_green >.. §§:§§:§§ PONG :baz + +× + +insert lines-empty : +0 +insert status-[0]-prompt : +22 # nothing happening on empty command input > -repeat empty-init +insert lines-empty : +0 +insert status-[0]-prompt : +22 # check scrolling on empty history does nothing > /window.history.scroll up -repeat empty-init +insert lines-empty : +0 +insert status-[0]-prompt : +22 > /window.history.scroll down -repeat empty-init +insert lines-empty : +0 +insert status-[0]-prompt : +22 # non-empty command input starts log at bottom, with date above it > foo log 0 #!. invalid prompt command: not prefixed by / -| with-only-2-lines-history-in -repeat lines-empty-16 +0 -repeat lines-empty-4 +16 -| history-lines-0:0:2-in -| history-lines-0:0:1-in -line 20 on_black,bright_white 20§§-§§-§§ §§ -| history-lines-0:0:1-out -| history-lines-0:1:2-in -line 21 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: not prefixed by / §§ -| history-lines-0:1:2-out -| history-lines-0:0:2-out -repeat status-[0]-prompt -| with-only-2-lines-history-out +insert lines-empty :20 +0 +insert history_0 :2 +20 +insert status-[0]-prompt : +22 # check scrolling on history merely 2 lines long won't do anything either > /window.history.scroll up -repeat with-only-2-lines-history +insert lines-empty :20 +0 +insert history_0 :2 +20 +insert status-[0]-prompt : +22 > /window.history.scroll down -repeat with-only-2-lines-history +insert lines-empty :20 +0 +insert history_0 :2 +20 +insert status-[0]-prompt : +22 # further inputs grow log upwards > /foo log 0 #!. invalid prompt command: /foo unknown -| before-first-scroll-in -repeat lines-empty-16 +0 -repeat lines-empty-2 +16 -repeat lines-empty-1 +18 -repeat history-lines-0:0:2 +19 -| history-lines-0:2:3-in -line 21 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /foo unknown §§ -| history-lines-0:2:3-out -repeat status-[0]-prompt -| before-first-scroll-out +insert lines-empty :19 +0 +insert history_0 :3 +19 +insert status-[0]-prompt : +22 # check scrolling up does something on history 3 lines long > /window.history.scroll up -| topmost-scroll-in -repeat lines-empty-16 +0 -repeat lines-empty-4 +16 -repeat history-lines-0:0:1 +20 -| topmost-scroll-out -| scrolldown-2-in -line 21 on_black,bright_white,reverse vvv [2] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ -| scrolldown-2-out -repeat status-[0]-prompt +insert lines-empty :20 +0 +insert history_0 :1 +20 +insert scrolldown-2 : +21 +insert status-[0]-prompt : +22 # check scrolling down on 3-lines history > /window.history.scroll down -repeat before-first-scroll - -# > /bar -# log 0 #!. invalid prompt command: /bar unknown -# | history-lines-0:0:4-in -# repeat history-lines-0:0:2 +18 -# | history-lines-0:2:4-in -# repeat history-lines-0:2:3 +20 -# line 21 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /bar unknown §§ -# | history-lines-0:2:4-out -# | history-lines-0:0:4-out +insert lines-empty :19 +0 +insert history_0 :3 +19 +insert status-[0]-prompt : +22 # check history growing below up-scroll > /window.history.scroll up -repeat topmost-scroll +0 -repeat scrolldown-2 -repeat status-[0]-prompt +insert lines-empty :20 +0 +insert history_0 :1 +20 +insert scrolldown-2 : +21 +insert status-[0]-prompt : +22 > /help log 0 #.. commands available in this window: log 0 #.. /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME] @@ -119,78 +243,35 @@ log 0 #.. /window.paste 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 topmost-scroll -| scrolldown-14-in -line 21 on_black,bright_white,reverse vvv [14] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ -| scrolldown-14-out -| before-scrolldown-not-to-bottom-out -line 22 on_black,bright_white :start)================================================================([(0:12)]§§ -repeat prompt-empty +insert lines-empty :20 +0 +insert history_0 :1 +20 +insert scrolldown-14 : +21 +insert status-[0:12]-prompt : +22 # check scroll-down on newer history longer than half a screen width does not fully land at bottom > /window.history.scroll down -| after-scrolldown-not-to-bottom-in -repeat lines-empty-8 +0 -repeat lines-empty-1 +8 -| history-lines-0:0:8-in -repeat history-lines-0:0:2 +9 -| history-lines-0:2:4-in -repeat history-lines-0:2:3 +11 -line 12 on_black,bright_cyan #.. §§:§§:§§ commands available in this window:§§ -| history-lines-0:2:4-out -| history-lines-0:4:8-in -line 13 on_black,bright_cyan #.. §§:§§:§§ /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]§§ -| history-lines-0:5:6-in -line 14 on_black,bright_cyan #.. §§:§§:§§ /help§§ -| history-lines-0:5:6-out -| history-lines-0:6:8-in -line 15 on_black,bright_cyan #.. §§:§§:§§ /list§§ -| history-lines-0:7:8-in -line 16 on_black,bright_cyan #.. §§:§§:§§ /prompt_enter§§ -| history-lines-0:7:8-out -| history-lines-0:6:8-out -| history-lines-0:4:8-out -| history-lines-0:0:8-out -| history-lines-0:8:12-in -line 17 on_black,bright_cyan #.. §§:§§:§§ /quit§§ -line 18 on_black,bright_cyan #.. §§:§§:§§ /window TOWARDS§§ -| history-lines-0:10:12-in -line 19 on_black,bright_cyan #.. §§:§§:§§ /window.history.scroll DIRECTION§§ -line 20 on_black,bright_cyan #.. §§:§§:§§ /window.paste -| history-lines-0:10:12-out -| history-lines-0:8:12-out -| scrolldown-3-in -line 21 on_black,bright_white,reverse vvv [3] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ -| scrolldown-3-out -| status-[0:3]-prompt-in -line 22 on_black,bright_white :start)=================================================================([(0:3)]§§ -repeat prompt-empty -| status-[0:3]-prompt-out -| after-scrolldown-not-to-bottom-out +insert lines-empty :9 +0 +insert history_0 :12 +9 +insert scrolldown-3 : +21 +insert status-[0:3]-prompt : +22 # check previous scroll-down not hitting bottom be fully reversible > /window.history.scroll up -repeat before-scrolldown-not-to-bottom -repeat status-[0:3]-prompt +insert lines-empty :20 +0 +insert history_0 :1 +20 +insert scrolldown-14 : +21 +insert status-[0:3]-prompt : +22 > /window.history.scroll down -repeat after-scrolldown-not-to-bottom +insert lines-empty :9 +0 +insert history_0 :12 +9 +insert scrolldown-3 : +21 +insert status-[0:3]-prompt : +22 # scroll to bottom, check history still growing up even beyond upper fold > /window.history.scroll down -repeat lines-empty-4 +0 -repeat lines-empty-2 +4 -repeat lines-empty-1 +6 -repeat history-lines-0:0:8 +7 -repeat history-lines-0:8:12 +15 -| history-lines-0:12:14-in -line 19 on_black,bright_cyan #.. §§:§§:§§ /window.prompt.backspace§§ -line 20 on_black,bright_cyan #.. §§:§§:§§ /window.prompt.move_cursor DIRECTION§§ -| history-lines-0:12:14-out -| history-lines-0:14:15-in -line 21 on_black,bright_cyan #.. §§:§§:§§ /window.prompt.scroll DIRECTION§§ -| history-lines-0:14:15-out -repeat status-[0]-prompt +insert lines-empty :7 +0 +insert history_0 :15 +7 +insert status-[0]-prompt : +22 > /0 log 0 #!. invalid prompt command: /0 unknown > /1 @@ -207,140 +288,77 @@ log 0 #!. invalid prompt command: /5 unknown log 0 #!. invalid prompt command: /6 unknown > /7 log 0 #!. invalid prompt command: /7 unknown -| at-bottom-before-wrapped-in -repeat history-lines-0:1:2 +0 -repeat history-lines-0:2:4 +1 -repeat history-lines-0:4:8 +3 -| history-lines-0:8:16-in -repeat history-lines-0:8:12 +7 -| history-lines-0:12:16-in -repeat history-lines-0:12:14 +11 -repeat history-lines-0:14:15 +13 -line 14 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /0 unknown§§ -| history-lines-0:12:16-out -| history-lines-0:8:16-out -| history-lines-0:16:20-in -| history-lines-0:16:18-in -line 15 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /1 unknown§§ -line 16 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /2 unknown§§ -| history-lines-0:16:18-out -line 17 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /3 unknown§§ -line 18 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /4 unknown§§ -| history-lines-0:16:20-out -| history-lines-0:20:22-in -line 19 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /5 unknown§§ -line 20 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /6 unknown§§ -| history-lines-0:20:22-out -| history-lines-0:22:23-in -line 21 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /7 unknown§§ -| history-lines-0:22:23-out -repeat status-[0]-prompt -| at-bottom-before-wrapped-out +insert history_0 1:23 +0 +insert status-[0]-prompt : +22 # check scroll-down even with long history does nothing > /window.history.scroll down -repeat at-bottom-before-wrapped +insert history_0 1:23 +0 +insert status-[0]-prompt : +22 # 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 -repeat lines-empty-1 +8 -repeat history-lines-0:0:8 +9 -repeat history-lines-0:8:12 +17 -| scrolldown-11-in -line 21 on_black,bright_white,reverse vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ -| scrolldown-11-out -repeat status-[0]-prompt -> /window.history.scroll down -repeat at-bottom-before-wrapped +insert lines-empty :9 +0 +insert history_0 :12 +9 +insert scrolldown-11 : +21 +insert status-[0]-prompt : +22 # check wrapping +> /window.history.scroll down > /foo_0123456789_0123456789_01234567 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-0:4:8 +0 -repeat history-lines-0:8:16 +4 -repeat history-lines-0:16:20 +12 -repeat history-lines-0:20:22 +16 -repeat history-lines-0:22:23 +18 -| history-lines-0:23:24-in -line 19 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_01234567 unknown§§ -| history-lines-0:23:24-out -| history-lines-0:24:26-in -line 20 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_012345678§§ -line 21 on_black,bright_red,bold unknown§§ -| history-lines-0:24:26-out -repeat status-[0]-prompt -| at-bottom-after-wrapped-out +insert history_0 4:26 +0 +insert status-[0]-prompt : +22 # check scroll-up over wrapped moves up less history lines than screen lines > /window.history.scroll up -| scrollup-after-wrapped-in -repeat lines-empty-4 +0 -repeat lines-empty-2 +4 -repeat history-lines-0:0:8 +6 -repeat history-lines-0:8:12 +14 -repeat history-lines-0:12:14 +18 -repeat history-lines-0:14:15 +20 -| scrollup-after-wrapped-out -| scrolldown-10-in -line 21 on_black,bright_white,reverse vvv [10] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ -| scrolldown-10-out -repeat status-[0]-prompt +insert lines-empty :6 +0 +insert history_0 :15 +6 +insert scrolldown-10 : +21 +insert status-[0]-prompt : +22 # check scroll-down fully reversible even if over wrapped > /window.history.scroll down -repeat at-bottom-after-wrapped +insert history_0 4:26 +0 +insert status-[0]-prompt : +22 > /window.history.scroll up -repeat scrollup-after-wrapped -repeat scrolldown-10 -repeat status-[0]-prompt +insert lines-empty :6 +0 +insert history_0 :15 +6 +insert scrolldown-10 : +21 +insert status-[0]-prompt : +22 # check wrapped input only increases below-scroll count by one > /bar_0123456789_0123456789_012345678 log 0 #!. invalid prompt command: /bar_0123456789_0123456789_012345678 unknown -repeat scrollup-after-wrapped -repeat scrolldown-11 -| status-[0:1]-prompt-in -line 22 on_black,bright_white :start)=================================================================([(0:1)]§§ -repeat prompt-empty -| status-[0:1]-prompt-out +insert lines-empty :6 +0 +insert history_0 :15 +6 +insert scrolldown-11 : +21 +insert status-[0:1]-prompt : +22 # check scroll-down over wrapped will snap down to bottom of wrapped > /window.history.scroll down -repeat history-lines-0:5:6 +0 -repeat history-lines-0:6:8 +1 -repeat history-lines-0:8:16 +3 -| history-lines-0:16:24-in -repeat history-lines-0:16:20 +11 -repeat history-lines-0:20:22 +15 -repeat history-lines-0:22:23 +17 -repeat history-lines-0:23:24 +18 -| history-lines-0:16:24-out -repeat history-lines-0:24:26 +19 -line 21 on_black,bright_white,reverse vvv [1] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ -repeat status-[0:1]-prompt +insert history_0 5:26 +0 +insert scrolldown-1 : +21 +insert status-[0:1]-prompt : +22 # # check scrolls-up over longer history until top > /window.history.scroll up -repeat scrollup-after-wrapped -repeat scrolldown-11 -repeat status-[0:1]-prompt +insert lines-empty :6 +0 +insert history_0 :15 +6 +insert scrolldown-11 : +21 +insert status-[0:1]-prompt : +22 > /window.history.scroll up -repeat lines-empty-16 +0 -repeat lines-empty-1 +16 -repeat history-lines-0:0:2 +17 -repeat history-lines-0:2:4 +19 -line 21 on_black,bright_white,reverse vvv [22] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ -repeat status-[0:1]-prompt +insert lines-empty :17 +0 +insert history_0 :3 +17 +insert scrolldown-22 : +21 +insert status-[0:1]-prompt : +22 > /window.history.scroll up -repeat topmost-scroll -| scrolldown-25-in -line 21 on_black,bright_white,reverse vvv [25] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ -| scrolldown-25-out -repeat status-[0:1]-prompt +insert lines-empty :20 +0 +insert history_0 :1 +20 +insert scrolldown-25 : +21 +insert status-[0:1]-prompt : +22 # 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 @@ -364,313 +382,158 @@ log , $.. CONNECTED log 1 >.. CAP LS :302 log 1 >.. USER baz 0 * :bar log 1 >.. NICK :foo -repeat topmost-scroll -repeat scrolldown-25 -line 22 on_black,bright_white :start)==========================================================([(0:1)] (1:19)§§ -repeat prompt-empty +insert lines-empty :20 +0 +insert history_0 :1 +20 +insert scrolldown-25 : +21 +insert status-[0:1]-1:19-prompt : +22 # check switch to other window, updates to status line (movement of brackets, clearing of own unread-lines count) > /window 1 -repeat lines-empty-2 +0 -repeat lines-empty-1 +2 -| history-lines-1:0:16-in -| history-lines-1:0:8-in -repeat history-lines-0:0:1 +3 -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-in -line 7 on_black,bright_yellow $.. §§:§§:§§ isupport:USERLEN set to: [10] -| history-lines-1:5:6-in -line 8 on_black,bright_yellow $.. §§:§§:§§ caps cleared -| history-lines-1:5:6-out -| history-lines-1:6:8-in -line 9 on_black,bright_yellow $.. §§:§§:§§ users cleared -line 10 on_black,bright_yellow $.. §§:§§:§§ channels cleared -| history-lines-1:6:8-out -| history-lines-1:4:8-out -| history-lines-1:0:8-out -| history-lines-1:8:16-in -| history-lines-1:8:12-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-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-out -| history-lines-1:8:12-out -| history-lines-1:12:16-in -| history-lines-1:12:14-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-out -| history-lines-1:14:15-in -line 17 on_black,bright_yellow $.. §§:§§:§§ connection_state set to: [connecting] -| history-lines-1:14:15-out -line 18 on_black,bright_yellow $.. §§:§§:§§ connection_state set to: [connected] -| history-lines-1:12:16-out -| history-lines-1:8:16-out -| history-lines-1:0:16-out -| history-lines-1:16:18-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-out -| history-lines-1:18:19-in -line 21 on_black,bright_green >.. §§:§§:§§ NICK :foo§§ -| history-lines-1:18:19-out -line 22 on_black,bright_white foo.bar.baz:debug)====================================================((0:1) [1]§§ -repeat prompt-empty +insert lines-empty :3 +0 +insert history_1 :19 +3 +insert status-0:1-[1]-prompt : +22 # check switch-back to window 0, retaining clearing of window 1's unread-lines count > /window 0 -repeat topmost-scroll -line 21 on_black,bright_white,reverse vvv [25] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ -| status-[0:1]-1-prompt-in -line 22 on_black,bright_white :start)===============================================================([(0:1)] 1§§ -repeat prompt-empty -| status-[0:1]-1-prompt-out +insert lines-empty :20 +0 +insert history_0 :1 +20 +insert scrolldown-25 : +21 +insert status-[0:1]-1-prompt : +22 # 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 +0 -repeat lines-empty-1 +8 -repeat history-lines-0:0:8 +9 -repeat history-lines-0:8:12 +17 -repeat scrolldown-14 -repeat status-[0:1]-1-prompt +insert lines-empty :9 +0 +insert history_0 :12 +9 +insert scrolldown-14 : +21 +insert status-[0:1]-1-prompt : +22 > /window.history.scroll down -| before-first-sight-of-bookmark-in -repeat history-lines-0:2:4 +0 -repeat history-lines-0:4:8 +2 -repeat history-lines-0:8:16 +6 -repeat history-lines-0:16:20 +14 -repeat history-lines-0:20:22 +18 -repeat history-lines-0:22:23 +20 -repeat scrolldown-3 -repeat status-[0:1]-1-prompt -| before-first-sight-of-bookmark-out +insert history_0 2:23 +0 +insert scrolldown-3 : +21 +insert status-[0:1]-1-prompt : +22 > /window.history.scroll down -| first-sight-of-bookmark-in -repeat history-lines-0:7:8 +0 -repeat history-lines-0:8:16 +1 -repeat history-lines-0:16:24 +9 -repeat history-lines-0:24:26 +17 -| bookmark-in -line 19 on_black,bright_white --------------------------------------------------------------------------------§§ -| bookmark-out -| history-lines-0:26:28-in -line 20 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /bar_0123456789_0123456789_012345678§§ -line 21 on_black,bright_red,bold unknown§§ -| history-lines-0:26:28-out -repeat status-[0]-1-prompt -repeat status-[0]-1-prompt -| first-sight-of-bookmark-out +insert history_0 7:26 +0 +insert bookmark : +19 +insert history_0 26:28 +20 +insert status-[0]-1-prompt : +22 # 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 +0 -repeat lines-empty-1 +2 -repeat history-lines-0:0:8 +3 -repeat history-lines-0:8:16 +11 -repeat history-lines-0:16:18 +19 -line 21 on_black,bright_white,reverse vvv [8] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ -repeat status-[0]-1-prompt +insert lines-empty :3 +0 +insert history_0 :18 +3 +insert scrolldown-8 : +21 +insert status-[0]-1-prompt : +22 > /window.history.scroll down -repeat first-sight-of-bookmark +insert history_0 7:26 +0 +insert bookmark : +19 +insert history_0 26:28 +20 +insert status-[0]-1-prompt : +22 # 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 +0 -repeat history-lines-1:0:16 +2 -repeat history-lines-1:16:18 +18 -repeat history-lines-1:18:19 +20 -repeat bookmark +21 -| status-0-[1]-prompt-in -line 22 on_black,bright_white foo.bar.baz:debug)========================================================(0 [1]§§ -repeat prompt-empty -| status-0-[1]-prompt-out +insert lines-empty :2 +0 +insert history_1 :19 +2 +insert bookmark : +21 +insert status-0-[1]-prompt : +22 # 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:7:8 +0 -repeat history-lines-0:8:16 +1 -repeat history-lines-0:16:24 +9 -| history-lines-0:24:28-in -repeat history-lines-0:24:26 +17 -repeat history-lines-0:26:28 +19 -| history-lines-0:24:28-out -repeat bookmark +21 -| status-[0]-1-prompt-in -line 22 on_black,bright_white :start)===================================================================([0] 1§§ -repeat prompt-empty -| status-[0]-1-prompt-out +insert history_0 7:28 +0 +insert bookmark : +21 +insert status-[0]-1-prompt : +22 # 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:10:12 +0 -repeat history-lines-0:12:16 +2 -repeat history-lines-0:16:24 +6 -repeat history-lines-0:24:28 +14 -repeat bookmark +18 -| history-lines-0:28:30-in -line 19 on_black,bright_cyan #.. §§:§§:§§ windows available via /window:§§ -line 20 on_black,bright_cyan #.. §§:§§:§§ 0) :start§§ -| history-lines-0:28:30-out -| history-lines-0:30:31-in -line 21 on_black,bright_cyan #.. §§:§§:§§ 1) foo.bar.baz:debug§§ -| history-lines-0:30:31-out -| before-first-server-responses-out -repeat status-[0]-1-prompt +insert history_0 10:28 +0 +insert bookmark : +18 +insert history_0 28:31 +19 +insert status-[0]-1-prompt : +22 # 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 -line 22 on_black,bright_white :start)===============================================================([0] (1:4)§§ -repeat prompt-empty +insert history_0 10:28 +0 +insert bookmark : +18 +insert history_0 28:31 +19 +insert status-[0]-1:4-prompt : +22 # 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 +0 -repeat history-lines-1:8:16 +4 -repeat history-lines-1:16:18 +12 -repeat history-lines-1:18:19 +14 -repeat bookmark +15 -| history-lines-1:19:20-in -line 16 on_black,bright_white <.. §§:§§:§§ PING :? -| history-lines-1:19:20-out -| history-lines-1:20:24-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-out -| history-lines-1:24:25-in -line 21 on_black,bright_green 123456789 123456789§§ -| history-lines-1:24:25-out -repeat status-0-[1]-prompt - -# check that growth below scroll does not by itself re-position bookmark in history +insert history_1 4:19 +0 +insert bookmark : +15 +insert history_1 19:25 +16 +insert status-0-[1]-prompt : +22 + +### # 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 +0 -repeat lines-empty-2 +4 -repeat history-lines-1:0:8 +6 -repeat history-lines-1:8:12 +14 -repeat history-lines-1:12:14 +18 -repeat history-lines-1:14:15 +20 -| early-win1-upscroll-out -repeat scrolldown-10 -| status-0-[1:2]-prompt-in -line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:2)]§§ -repeat prompt-empty -| status-0-[1:2]-prompt-out +insert lines-empty :6 +0 +insert history_1 0:15 +6 +insert scrolldown-10 : +21 +insert status-0-[1:2]-prompt : +22 > /window.history.scroll down -repeat history-lines-1:5:6 +0 -repeat history-lines-1:6:8 +1 -repeat history-lines-1:8:16 +3 -repeat history-lines-1:16:18 +11 -repeat history-lines-1:18:19 +13 -repeat bookmark +14 -repeat history-lines-1:19:20 +15 -repeat history-lines-1:20:24 +16 -repeat history-lines-1:24:25 +20 -repeat scrolldown-2 -repeat status-0-[1:2]-prompt +insert history_1 5:19 +0 +insert bookmark : +14 +insert history_1 19:25 +15 +insert scrolldown-2 : +21 +insert status-0-[1:2]-prompt : +22 # 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:10:12 +0 -repeat history-lines-0:12:16 +2 -repeat history-lines-0:16:24 +6 -repeat history-lines-0:24:28 +14 -repeat history-lines-0:28:30 +18 -repeat history-lines-0:30:31 +20 -repeat bookmark +21 -| win-0-only-for-win-1-tests-out -line 22 on_black,bright_white :start)===============================================================([0] (1:2)§§ -repeat prompt-empty +insert history_0 10:31 +0 +insert bookmark : +21 +insert status-[0]-1:2-prompt : +22 > /window 1 -| keep-bookmark-on-outside-growth-test-in -repeat history-lines-1:5:6 +0 -repeat history-lines-1:6:8 +1 -repeat history-lines-1:8:16 +3 -| history-lines-1:16:24-in -repeat history-lines-1:16:18 +11 -repeat history-lines-1:18:19 +13 -repeat history-lines-1:19:20 +14 -repeat history-lines-1:20:24 +15 -| history-lines-1:16:24-out -repeat history-lines-1:24:25 +19 -repeat bookmark +20 -| keep-bookmark-on-outside-growth-test-out -repeat scrolldown-2 -repeat status-0-[1:2]-prompt +insert history_1 5:25 +0 +insert bookmark : +20 +insert scrolldown-2 : +21 +insert status-0-[1:2]-prompt : +22 # 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 -line 22 on_black,bright_white :start)===============================================================([0] (1:4)§§ -repeat prompt-empty +insert history_0 10:31 +0 +insert bookmark : +21 +insert status-[0]-1:4-prompt : +22 > /window 1 -repeat keep-bookmark-on-outside-growth-test -line 21 on_black,bright_white,reverse vvv [4] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ -| status-0-[1:4]-prompt-in -line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:4)]§§ -repeat prompt-empty -| status-0-[1:4]-prompt-out +insert history_1 5:25 +0 +insert bookmark : +20 +insert scrolldown-4 : +21 +insert status-0-[1:4]-prompt : +22 # check same applies when leaving affected window with bookmark out-of-sight > /window.history.scroll up -repeat early-win1-upscroll -line 21 on_black,bright_white,reverse vvv [12] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ -repeat status-0-[1:4]-prompt +insert lines-empty :6 +0 +insert history_1 :15 +6 +insert scrolldown-12 : +21 +insert status-0-[1:4]-prompt : +22 > /window 0 loggedservermsg 0 1 <.. PING :baz log 1 >.. PONG :baz -repeat win-0-only-for-win-1-tests -line 22 on_black,bright_white :start)===============================================================([0] (1:6)§§ -repeat prompt-empty +insert history_0 10:31 +0 +insert bookmark : +21 +insert status-[0]-1:6-prompt : +22 > /window 1 -repeat early-win1-upscroll -repeat scrolldown-14 -| status-0-[1:6]-prompt-in -line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:6)]§§ -repeat prompt-empty -| status-0-[1:6]-prompt-out +insert lines-empty :6 +0 +insert history_1 :15 +6 +insert scrolldown-14 : +21 +insert status-0-[1:6]-prompt : +22 > /window.history.scroll down -repeat history-lines-1:5:6 +0 -repeat history-lines-1:6:8 +1 -repeat history-lines-1:8:16 +3 -repeat history-lines-1:16:24 +11 -repeat history-lines-1:24:25 +19 -repeat bookmark +20 -line 21 on_black,bright_white,reverse vvv [6] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ -repeat status-0-[1:6]-prompt +insert history_1 5:25 +0 +insert bookmark : +20 +insert scrolldown-6 : +21 +insert status-0-[1:6]-prompt : +22 > /window.history.scroll down -repeat history-lines-1:10:12 +0 -repeat history-lines-1:12:16 +2 -repeat history-lines-1:16:24 +6 -repeat history-lines-1:24:25 +14 -repeat bookmark +15 -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 -repeat status-0-[1]-prompt +insert history_1 10:25 +0 +insert bookmark : +15 +insert history_1 25:31 +16 +insert status-0-[1]-prompt : +22 > /quit log 0 <.. -- 2.30.2