From d8cbe248b69aaff81a48d77f618be6ec4bde43c9 Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Sat, 15 Nov 2025 23:10:10 +0100 Subject: [PATCH] In testing script inserts, allow more than one replacement instruction. --- src/ircplom/testing.py | 57 +- src/tests/_timeout_retries.test | 50 +- src/tests/caps.test | 53 +- src/tests/channels.test | 251 ++++----- src/tests/config.test | 6 +- src/tests/connect_disconnect_legalities.test | 31 +- src/tests/error_disconnects.test | 20 +- src/tests/isupports.test | 167 +++--- src/tests/lib/001-setting-nick | 6 +- src/tests/lib/001-to-usermode | 12 + src/tests/lib/attempting-to-connected | 2 +- src/tests/lib/bazbarfoo | 8 - src/tests/lib/cap-msg | 4 + src/tests/lib/caps | 10 - src/tests/lib/caps-data-set | 3 + src/tests/lib/caps-neg-empty | 7 + src/tests/lib/channels | 37 -- src/tests/lib/cmd-disconnect | 8 +- src/tests/lib/cmd-nick | 12 + src/tests/lib/connect-to-connected | 3 +- .../lib/disconnect-to-stop-auto-reconnect | 3 + src/tests/lib/error-to-disconnect | 4 +- src/tests/lib/error-to-disconnected | 4 +- src/tests/lib/join-empty | 17 +- src/tests/lib/no-handler | 6 + src/tests/lib/no-timely-pong | 6 +- src/tests/lib/part | 11 + src/tests/lib/pingpong | 2 +- src/tests/lib/privmsg | 4 + src/tests/lib/req-sasl | 8 + src/tests/lib/servernotice | 2 +- src/tests/lib/trigger-ping | 3 + src/tests/lib/user-set-to | 6 + src/tests/lib/usermode | 7 - src/tests/pingpong.test | 19 +- src/tests/test.test | 259 ++++----- src/tests/tui_draw.test | 492 +++++++++--------- src/tests/tui_line_formattings.test | 22 +- src/tests/tui_prompt_basics.test | 4 +- 39 files changed, 764 insertions(+), 862 deletions(-) create mode 100644 src/tests/lib/001-to-usermode delete mode 100644 src/tests/lib/bazbarfoo create mode 100644 src/tests/lib/cap-msg delete mode 100644 src/tests/lib/caps create mode 100644 src/tests/lib/caps-data-set create mode 100644 src/tests/lib/caps-neg-empty delete mode 100644 src/tests/lib/channels create mode 100644 src/tests/lib/cmd-nick create mode 100644 src/tests/lib/disconnect-to-stop-auto-reconnect create mode 100644 src/tests/lib/no-handler create mode 100644 src/tests/lib/part create mode 100644 src/tests/lib/privmsg create mode 100644 src/tests/lib/req-sasl create mode 100644 src/tests/lib/trigger-ping create mode 100644 src/tests/lib/user-set-to delete mode 100644 src/tests/lib/usermode diff --git a/src/ircplom/testing.py b/src/ircplom/testing.py index 3c3e179..0f53f97 100644 --- a/src/ircplom/testing.py +++ b/src/ircplom/testing.py @@ -32,7 +32,7 @@ _TOK_IDX_REPEAT = 'r' _SIGNATURE_FOR_CMD = { _MARK_FRAGMENT: (1, None), - _MARK_INSERT: (5, 2), + _MARK_INSERT: (4, 2), _MARK_LOG: (2, 0), _MARK_PROMPT: (1, None), _MARK_SCREENLINE: (3, 0), @@ -209,11 +209,8 @@ class _Playbook: ) -> list[tuple[str, str]]: def crop_to_range(range_str: str) -> None: - try: - idx_in, idx_out = ((int(val) if val else None) - for val in range_str.split(_SEP_2)) - except ValueError as e: - assert False, (e, idx_str, insert_args) + idx_in, idx_out = ((int(val) if val else None) + for val in range_str.split(_SEP_2)) candidates[:] = candidates[idx_in:idx_out] def replace_pattern(to_replace: str, replacement: str) -> None: @@ -252,23 +249,37 @@ class _Playbook: or ','] candidate[1] = _SEP_0.join(to_join) - assert len(insert_args) in (1, 2, 3, 5), (idx_str, insert_args) - if len(insert_args) == 1 and insert_args[0].startswith(_TOK_FILE): - if insert_args[0] in inserted_files: - return [] - inserted_files.add(insert_args[0]) - return lines_t_from_file(PATH_TESTS.joinpath(insert_args[0]), - f'{idx_str}{_TOK_FILE}{_SEP_2}') - candidates = [ - [_SEP_2.join((idx_str, _TOK_IDX_REPEAT, sub_idx_str)), - line] - for sub_idx_str, line in fragments[insert_args[0]]] - if len(insert_args) >= 2: - crop_to_range(insert_args[1]) - if len(insert_args) >= 5: - replace_pattern(*insert_args[3:5]) - if len(insert_args) >= 3: - bump_int_fields(int(insert_args[2])) + try: + if len(insert_args) == 1\ + and insert_args[0].startswith(_TOK_FILE): + if insert_args[0] in inserted_files: + return [] + inserted_files.add(insert_args[0]) + return lines_t_from_file( + PATH_TESTS.joinpath(insert_args[0]), + f'{idx_str}{_TOK_FILE}{_SEP_2}') + candidates = [ + [_SEP_2.join((idx_str, _TOK_IDX_REPEAT, sub_idx_str)), + line] + for sub_idx_str, line in fragments[insert_args[0]]] + if len(insert_args) >= 2: + crop_to_range(insert_args[1]) + if len(insert_args) == 4: + remainder = insert_args[-1][:] + repl_args = [] + while not remainder.startswith(':'): + repl_arg, remainder = remainder.split(maxsplit=1) + repl_args += [repl_arg] + repl_args += [remainder[1:]] + assert len(repl_args) >= 2, (idx_str, insert_args) + for arg in repl_args[:-2]: + assert '=' in arg + replace_pattern(*arg.split('=', maxsplit=1)) + replace_pattern(*repl_args[-2:]) + if len(insert_args) >= 3: + bump_int_fields(int(insert_args[2])) + except (AssertionError, ValueError): + assert False, (idx_str, insert_args) return [(c[0], c[1]) for c in candidates] self._lines_t = lines_t_from_file(self._path) diff --git a/src/tests/_timeout_retries.test b/src/tests/_timeout_retries.test index 1f0e04b..32ace8f 100644 --- a/src/tests/_timeout_retries.test +++ b/src/tests/_timeout_retries.test @@ -1,46 +1,41 @@ -insert ./lib/001-setting-nick +insert ./lib/001-to-usermode insert ./lib/attempting-to-connected -insert ./lib/bazbarfoo -# for: attempting-bazbarfoo, connect-bazbarfoo insert ./lib/conn # for: attempting, connect, connected insert ./lib/cmd-disconnect +# for: cmd-disconnect insert ./lib/disconnect # for: disconnect1 -insert ./lib/enter-list-start +insert ./lib/disconnect-to-stop-auto-reconnect insert ./lib/no-timely-pong insert ./lib/retry-in -insert ./lib/usermode +insert ./lib/trigger-ping × fake-testing-timeout log 1 $ connection_state set to: [failed to connect: FAKE TESTING TIMEOUT] -insert retry-in : +1 ? §§ +insert retry-in : +1 ? :§§ × attempting-to-connected-plus-timeout -insert attempting-to-connected : +1 6697 10000 -servermsg 0 timeout -log 1 > PING :what's up? +insert attempting-to-connected : +1 6697=10000 WIN_IDS :2 +insert trigger-ping : +0 LOG_ID=1 SERVER_ID :0 insert no-timely-pong +× timeout-w-exponential-wait +insert attempting : +1 6697 :OLD_PORT +log 1 $ port set to: [NEW_PORT] +insert fake-testing-timeout : +1 §§ :SECONDS + × ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× # 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 -insert connect : +1 6697 10003 +insert connect : +1 6697 :10003 # check increase of retry waits -insert attempting : +1 6697 10003 -log 1 $ port set to: [10002] -insert fake-testing-timeout : +1 §§ 1 -# -insert attempting : +1 6697 10002 -log 1 $ port set to: [10001] -insert fake-testing-timeout : +1 §§ 2 -# -insert attempting : +1 6697 10001 -log 1 $ port set to: [10000] -insert fake-testing-timeout : +1 §§ 4 +insert timeout-w-exponential-wait : +1 OLD_PORT=10003 NEW_PORT=10002 SECONDS :1 +insert timeout-w-exponential-wait : +1 OLD_PORT=10002 NEW_PORT=10001 SECONDS :2 +insert timeout-w-exponential-wait : +1 OLD_PORT=10001 NEW_PORT=10000 SECONDS :4 # check connecting works with TestingClient port finally reduced to 10000, # and retry chain also started by in-connection timeout @@ -48,8 +43,7 @@ insert attempting-to-connected-plus-timeout # check /disconnect aborts retry chain > /window 1 -> /disconnect -log 1 $ already disconnected, stopped connecting attempts +insert disconnect-to-stop-auto-reconnect wait 2 # to check timed auto-retries don't activate after manual intervention: @@ -57,13 +51,11 @@ wait 2 > /reconnect insert attempting-to-connected-plus-timeout > /reconnect -insert attempting-to-connected : +1 6697 10000 +insert attempting-to-connected : +1 6697=10000 WIN_IDS :2 wait 2 # same way ensure retry chain wasn't solely blocked by being connected -insert 001-setting-nick -insert usermode -insert cmd-disconnect-0 -insert cmd-disconnect-1 :-1 -insert disconnect1 1: +1 WIN_IDS 2 +insert 001-to-usermode +insert cmd-disconnect :-1 +insert disconnect1 1: +1 WIN_IDS :2 wait 2 diff --git a/src/tests/caps.test b/src/tests/caps.test index 1fe22a9..ee4b947 100644 --- a/src/tests/caps.test +++ b/src/tests/caps.test @@ -1,24 +1,25 @@ insert ./lib/001-setting-nick +insert ./lib/001-to-usermode insert ./lib/attempting-to-connected insert ./lib/connect-to-connected -insert ./lib/caps -# for: cap-msg, caps-neg-empty +insert ./lib/cap-msg +insert ./lib/caps-neg-empty +insert ./lib/caps-data-set insert ./lib/cmd-disconnect +# for: cmd-disconnect insert ./lib/disconnect +insert ./lib/req-sasl # for: disconnect1 insert ./lib/servermsglogged -insert ./lib/usermode × disconnect-to-reconnect-0 -insert 001-setting-nick : +0 -insert usermode : +0 -insert cmd-disconnect-0 : +0 -insert cmd-disconnect-1 : +0 +insert 001-to-usermode : +0 +insert cmd-disconnect : +0 × disconnect-to-reconnect-1 -insert disconnect1 1: +1 WIN_IDS 2 +insert disconnect1 1: +1 WIN_IDS :2 > /reconnect -insert attempting-to-connected : +1 +insert attempting-to-connected : +1 WIN_IDS :2 × disconnect-to-reconnect insert disconnect-to-reconnect-0 @@ -36,9 +37,9 @@ insert disconnect-to-reconnect-0 :-1 insert disconnect-to-reconnect-1 # check full, alphabetical processing of multi-line responses -insert cap-msg : +0 ??? * LS * :foo bar baz -insert cap-msg : +0 ??? * LS * :oof rab zab -insert cap-msg : +0 ??? * LS :ofo rba zba +insert cap-msg : +0 CAPMSG :* LS * :foo bar baz +insert cap-msg : +0 CAPMSG :* LS * :oof rab zab +insert cap-msg : +0 CAPMSG :* LS :ofo rba zba log 1 $ caps:bar:data set to: [] log 1 $ caps:baz:data set to: [] log 1 $ caps:foo:data set to: [] @@ -49,8 +50,8 @@ log 1 $ caps:rba:data set to: [] log 1 $ caps:zab:data set to: [] log 1 $ caps:zba:data set to: [] log 1 > CAP :LIST -insert cap-msg : +0 ??? * LIST * :foo rab oof -insert cap-msg : +0 ??? * LIST :zab rba +insert cap-msg : +0 CAPMSG :* LIST * :foo rab oof +insert cap-msg : +0 CAPMSG :* LIST :zab rba log 1 $ caps:foo:enabled set to: [True] log 1 $ caps:oof:enabled set to: [True] log 1 $ caps:rab:enabled set to: [True] @@ -61,26 +62,19 @@ log 1 > CAP :END insert disconnect-to-reconnect # check REQ for "sasl" (even if no PLAIN), denied -insert servermsglogged : +0 MSG :*.?.net CAP * LS :foo bar sasl +insert servermsglogged : +0 MSG ::*.?.net CAP * LS :foo bar sasl log 1 $ caps:bar:data set to: [] log 1 $ caps:foo:data set to: [] log 1 $ caps:sasl:data set to: [] -log 1 > CAP REQ :sasl -log 1 > CAP :LIST -insert cap-msg : +0 ??? * NAK :sasl -insert cap-msg : +0 ??? * LIST : +insert req-sasl : +0 REPLY=NAK CAPLIST : log 1 > CAP :END insert disconnect-to-reconnect # check REQ for "sasl" with PLAIN successful (but for lack of password, negotiation still ending instantly) -insert cap-msg : +0 ??? * LS :sasl=PLAIN -log 1 $ caps:sasl:data set to: [] -log 1 $ caps:sasl:data set to: [PLAIN] -log 1 > CAP REQ :sasl -log 1 > CAP :LIST -insert cap-msg : +0 ??? * ACK :sasl -insert cap-msg : +0 ??? * LIST :sasl +insert cap-msg : +0 CAPMSG :* LS :sasl=PLAIN +insert caps-data-set : +1 CAPNAME=sasl CAPVAL :PLAIN +insert req-sasl : +0 REPLY=ACK CAPLIST :sasl log 1 $ caps:sasl:enabled set to: [True] log 1 > CAP :END @@ -88,10 +82,9 @@ log 1 > CAP :END insert 001-setting-nick # check NEW, DEL working after CAP :END -insert cap-msg : +0 ??? foo NEW :foo bar=baz -log 1 $ caps:bar:data set to: [] -log 1 $ caps:bar:data set to: [baz] +insert cap-msg : +0 CAPMSG :foo NEW :foo bar=baz +insert caps-data-set : +1 CAPNAME=bar CAPVAL :baz log 1 $ caps:foo:data set to: [] -insert cap-msg : +0 ??? foo DEL :sasl foo +insert cap-msg : +0 CAPMSG :foo DEL :sasl foo log 1 $ caps:foo cleared log 1 $ caps:sasl cleared diff --git a/src/tests/channels.test b/src/tests/channels.test index cb700ff..e970aa3 100644 --- a/src/tests/channels.test +++ b/src/tests/channels.test @@ -1,53 +1,46 @@ insert ./lib/001-setting-nick -insert ./lib/caps -# for: caps-neg-empty -insert ./lib/channels -# for: cmd-nick, JOIN0, join-w-topic, part0, part1, topics-test +insert ./lib/001-to-usermode +insert ./lib/attempting-to-connected +insert ./lib/caps-neg-empty insert ./lib/cmd-disconnect -insert ./lib/conn -# for: attempting, connected +# for: cmd-disconnect-0, cmd-disconnect-1 +insert ./lib/cmd-nick +# for: cmd-nick, rename insert ./lib/connect-to-connected insert ./lib/disconnect # for: disconnect0, disconnect1 insert ./lib/join-empty +# for: join-channel-0, join-channel-1, join-empty +insert ./lib/part +insert ./lib/privmsg insert ./lib/retry-in insert ./lib/servermsglogged -insert ./lib/usermode +insert ./lib/user-set-to -× part-ch_test0 -insert part0 : +0 CHANNEL #ch_test0 -log 3 $ foo!~foobarbaz@baz.bar.foo parts -insert part1 : +1 CHANNEL #ch_test0 +× part-empty +insert part :-3 +0 USERIDS_CLEAR :cleared +log CHAN_WIN_ID $ foo!~baz@baz.bar.foo parts +insert part -2: -× part-ch_test1 -insert part0 : +0 CHANNEL #ch_test1 -log 4 $ foo!~foobarbaz@baz.bar.foo parts -insert part1 : +1 CHANNEL #ch_test1 - -× conn-init -insert caps-neg-empty : +0 -insert 001-setting-nick : +0 - -× privmsg_ch_test0 -> /privmsg #ch_test0 TXT -log 1 > PRIVMSG #ch_test0 :TXT -log 3 > [foo] TXT +× topic-set-to +log 1 $ channels:CHANNEL:topic set to: [Topic(what='NEWTOPIC', who=NickUserHost(nick='baz', user='~baz', host='baz.baz'))] +log 4 $ baz!~baz@baz.baz set topic: NEWTOPIC × reconnect > /reconnect -insert attempting : +1 -insert connected : +1 WIN_IDS 2,3,4 -insert conn-init : +0 +insert attempting-to-connected : +1 WIN_IDS :2,3,4 +insert caps-neg-empty : +0 +insert 001-setting-nick : +0 log 1 > JOIN :#ch_test0 -insert usermode : +0 ~baz ~foobarbaz -insert servermsglogged : +0 MSG :foo!~foobarbaz@baz.bar.foo JOIN #ch_test0 -insert join-empty : +0 CHANNEL #ch_test0 +insert usermode +insert servermsglogged : +0 MSG ::foo!~baz@baz.bar.foo JOIN #ch_test0 +insert join-empty : +0 CHANNEL :#ch_test0 × ×-------------------------- insert connect-to-connected -insert conn-init -insert usermode : +0 ~baz ~foobarbaz +insert caps-neg-empty +insert 001-to-usermode # check inability to privmsg into channel not yet joined > /window 2 @@ -55,36 +48,31 @@ insert usermode : +0 ~baz ~foobarbaz log 2 $ not sending, since not in channel # check join with minimum context (no topic, no other users etc.) -> /join #ch_test0 -insert JOIN0 : +0 CHANNEL #ch_test0 -insert join-empty : +0 CHANNEL #ch_test0 +insert join-empty : +0 CHANNEL :#ch_test0 # check privmsg into channel from other window only works by direct addressing -> /window 2 > msg_test1 log 2 # invalid prompt command: not prefixed by / -insert privmsg_ch_test0 : +1 TXT msg_test1 +insert privmsg : +1 TARGET=#ch_test0 TXT :msg_test1 # check from within channel window privmsg works directly and indirectly > /window 3 -> msg_test2 -log 1 > PRIVMSG #ch_test0 :msg_test2 -log 3 > [foo] msg_test2 -insert privmsg_ch_test0 : +1 TXT msg_test2 +insert privmsg : +1 TARGET=#ch_test0 TXT :msg_test2 +> msg_test3 +insert privmsg 1: +1 TARGET=#ch_test0 TXT :msg_test3 -# check /part from minimal context, and that it only works from within channel window, and if already in channel +# check /part and that it only works from within channel window, and if already in channel > /window 2 > /part log 2 # invalid prompt command: /part unknown > /window 3 -insert part-ch_test0 +insert part-empty : +0 CHAN_WIN_ID=3 CHANNEL :#ch_test0 > /part log 3 $ not in that channel # check /join without argument joins channel previously joined in same window > /join -insert JOIN0 : +0 CHANNEL #ch_test0 -insert join-empty : +0 CHANNEL #ch_test0 +insert join-empty 1: +0 CHANNEL :#ch_test0 # check cannot /join channel already joined, neither from its window nor from elsewhere > /join @@ -97,147 +85,138 @@ log 2 $ already in that channel # check join to different channel name initiates new window, even if there's already a window for a channel that's been /parted > /window 3 -insert part-ch_test0 -> /join #ch_test1 -insert JOIN0 : +0 CHANNEL #ch_test1 -insert join-empty :-1 +0 CHANNEL #ch_test1 +insert part-empty : +0 CHAN_WIN_ID=3 CHANNEL :#ch_test0 +insert join-empty :-1 +0 CHANNEL :#ch_test1 log 4 $ residents: foo -# check /join into channel with other users, with multi-line 353, and @ rather than = -> /join #ch_test0 -insert JOIN0 : +0 CHANNEL #ch_test0 -insert servermsglogged : +0 MSG :foo.bar.baz 353 foo = #ch_test0 :foo bar baz -log 1 $ channels:#ch_test0:exits cleared -log 1 $ users:1:nick set to: [?] -log 1 $ users:1:nick set to: [bar] -log 1 $ users:2:nick set to: [?] -log 1 $ users:2:nick set to: [baz] -insert servermsglogged : +0 MSG :foo.bar.baz 353 foo = #ch_test0 :oof rab zab -log 1 $ users:3:nick set to: [?] -log 1 $ users:3:nick set to: [oof] -log 1 $ users:4:nick set to: [?] -log 1 $ users:4:nick set to: [rab] -log 1 $ users:5:nick set to: [?] -log 1 $ users:5:nick set to: [zab] -insert servermsglogged : +0 MSG :foo.bar.baz 366 foo #ch_test0 :End of /NAMES list. -log 1 $ channels:#ch_test0:user_ids set to: [1], [2], [3], [4], [5], [me] -log 3 $ residents: bar, baz, oof, rab, zab, foo +# check /join to channel with one other user, and @ rather than = in 353 message +insert join-channel-0 :-3 +0 CHANNEL :#ch_test0 +insert servermsglogged : +0 MSG ::foo.bar.baz 353 foo @ #ch_test0 :foo bar +insert join-channel-0 -1: +1 CHANNEL :#ch_test0 +insert user-set-to :2 +1 USER_ID=1 USERNICK :bar +insert join-channel-1 : +0 CHANNEL=#ch_test0 RESIDENT_IDS :[1], [me] +log 3 $ residents: bar, foo + +# check /part from channel with other user +insert part : +0 CHANNEL=#ch_test0 CHAN_WIN_ID=3 USERIDS_CLEAR :set to: [1] +log 1 $ users:1 cleared + +# check /join into channel with many other users, with multi-line 353 +insert join-channel-0 : +0 CHANNEL=#ch_test0 RESIDENT_NAMES :foo baz oof +insert user-set-to :2 +1 USER_ID=2 USERNICK :baz +insert user-set-to :2 +1 USER_ID=3 USERNICK :oof +insert servermsglogged : +0 MSG ::foo.bar.baz 353 foo = #ch_test0 :rab zab +insert user-set-to :2 +1 USER_ID=4 USERNICK :rab +insert user-set-to :2 +1 USER_ID=5 USERNICK :zab +insert join-channel-1 : +0 CHANNEL=#ch_test0 RESIDENT_IDS :[2], [3], [4], [5], [me] +log 3 $ residents: baz, oof, rab, zab, foo # check /join into channel with topic set > /window 4 -insert part-ch_test1 -insert join-w-topic : +0 CHANNAME #ch_test1 -insert servermsglogged : +0 MSG :foo.bar.baz 353 foo @ #ch_test1 :foo bar -insert servermsglogged : +0 MSG :foo.bar.baz 366 foo #ch_test1 :End of /NAMES list. -log 1 $ channels:#ch_test1:user_ids set to: [1], [me] -log 4 $ residents: bar, foo +insert part-empty : +0 CHAN_WIN_ID=4 CHANNEL :#ch_test1 +insert join-channel-0 :4 +0 CHANNEL :#ch_test1 +insert servermsglogged : +0 MSG ::foo.bar.baz 332 foo #ch_test1 :foo bar baz +log 1 $ channels:#ch_test1:exits cleared +insert servermsglogged : +0 MSG ::foo.bar.baz 333 foo #ch_test1 baz!~baz@OLD.baz.baz 1234567890 +insert topic-set-to : +1 baz.baz=OLD.baz.baz CHANNEL=#ch_test1 NEWTOPIC :foo bar baz +insert servermsglogged : +0 MSG ::foo.bar.baz 353 foo = #ch_test1 :foo baz + +insert join-channel-1 : +0 CHANNEL=#ch_test1 RESIDENT_IDS :[2], [me] +log 4 $ residents: baz, foo # check _observed_ topic change _does_ affect users database, and … -insert servermsglogged : +0 MSG :bar!~bar@bar.bar TOPIC #ch_test1 :foo bar baz -log 1 $ users:1:user set to: [~bar] -log 1 $ users:1:host set to: [bar.bar] +insert servermsglogged : +0 MSG ::baz!~baz@baz.baz TOPIC #ch_test1 :foo bar baz +insert user-set-to 2: +1 USER_ID=2 USERNAME=~baz USERHOST :baz.baz # … is echoed into channel window _if_ either content or setter change -insert topics-test : +0 CHANNAME #ch_test1 +insert topic-set-to : +1 CHANNEL=#ch_test1 NEWTOPIC :foo bar baz +insert servermsglogged : +0 MSG ::baz!~baz@baz.baz TOPIC #ch_test1 :foo bar baz +insert servermsglogged : +0 MSG ::baz!~baz@baz.baz TOPIC #ch_test1 :foo foo baz +insert topic-set-to : +1 CHANNEL=#ch_test1 NEWTOPIC :foo foo baz # check effects of other users' messages (PRIVMSG and NOTICE) -insert servermsglogged : +0 MSG :bar!~bar@bar.bar PRIVMSG #ch_test0 :msg_test3 msg_test4 -log 3 < [bar] msg_test3 msg_test4 -insert servermsglogged : +0 MSG :oof!~oof@oof.oof NOTICE #ch_test0 :msg_test5 msg_test6 -log 1 $ users:3:user set to: [~oof] -log 1 $ users:3:host set to: [oof.oof] +insert servermsglogged : +0 MSG ::baz!~baz@baz.baz PRIVMSG #ch_test0 :msg_test3 msg_test4 +log 3 < [baz] msg_test3 msg_test4 +insert servermsglogged : +0 MSG ::oof!~oof@oof.oof NOTICE #ch_test0 :msg_test5 msg_test6 +insert user-set-to 2: +1 USER_ID=3 USERNAME=~oof USERHOST :oof.oof log 3 < (oof) msg_test5 msg_test6 # check effect of server NOTICE to channel -insert servermsglogged : +0 MSG :*.?.net NOTICE #ch_test0 :msg_test6 msg_test7 +insert servermsglogged : +0 MSG ::*.?.net NOTICE #ch_test0 :msg_test6 msg_test7 log 3 < (*.?.net) msg_test6 msg_test7 # check part of user visible in other channel -insert servermsglogged : +0 MSG :bar!~bar@bar.bar PART :#ch_test0 -log 1 $ channels:#ch_test0:exits:1 set to: [P] -log 1 $ channels:#ch_test0:user_ids set to: [2], [3], [4], [5], [me] -log 3 $ bar!~bar@bar.bar parts -log 1 $ channels:#ch_test0:exits:1 cleared +insert servermsglogged : +0 MSG ::baz!~baz@baz.baz PART :#ch_test0 +log 1 $ channels:#ch_test0:exits:2 set to: [P] +log 1 $ channels:#ch_test0:user_ids set to: [3], [4], [5], [me] +log 3 $ baz!~baz@baz.baz parts +log 1 $ channels:#ch_test0:exits:2 cleared # check part of user NOT visible in other channel -insert servermsglogged : +0 MSG :oof!~oof@oof.oof PART :#ch_test0 +insert servermsglogged : +0 MSG ::oof!~oof@oof.oof PART :#ch_test0 log 1 $ channels:#ch_test0:exits:3 set to: [P] -log 1 $ channels:#ch_test0:user_ids set to: [2], [4], [5], [me] +log 1 $ channels:#ch_test0:user_ids set to: [4], [5], [me] log 3 $ oof!~oof@oof.oof parts log 1 $ channels:#ch_test0:exits:3 cleared log 1 $ users:3 cleared # check other-user part with exit message -insert servermsglogged : +0 MSG :zab!~zab@zab.zab PART #ch_test0 :goodbye world -log 1 $ users:5:user set to: [~zab] -log 1 $ users:5:host set to: [zab.zab] +insert servermsglogged : +0 MSG ::zab!~zab@zab.zab PART #ch_test0 :goodbye world +insert user-set-to 2: +1 USER_ID=5 USERNAME=~zab USERHOST :zab.zab log 1 $ channels:#ch_test0:exits:5 set to: [Pgoodbye world] -log 1 $ channels:#ch_test0:user_ids set to: [2], [4], [me] +log 1 $ channels:#ch_test0:user_ids set to: [4], [me] log 3 $ zab!~zab@zab.zab parts: goodbye world log 1 $ channels:#ch_test0:exits:5 cleared log 1 $ users:5 cleared # check re-join of user kept visible in other channel -insert servermsglogged : +0 MSG :bar!~bar@bar.bar JOIN :#ch_test0 -log 1 $ channels:#ch_test0:user_ids set to: [1], [2], [4], [me] -log 3 $ bar!~bar@bar.bar joins +insert servermsglogged : +0 MSG ::baz!~baz@baz.baz JOIN :#ch_test0 +log 1 $ channels:#ch_test0:user_ids set to: [2], [4], [me] +log 3 $ baz!~baz@baz.baz joins # check re-join of user NOT kept visible in other channel -insert servermsglogged : +0 MSG :oof!~oof@oof.oof JOIN :#ch_test0 -log 1 $ users:6:nick set to: [?] -log 1 $ users:6:nick set to: [oof] -log 1 $ users:6:user set to: [~oof] -log 1 $ users:6:host set to: [oof.oof] -log 1 $ channels:#ch_test0:user_ids set to: [1], [2], [4], [6], [me] +insert servermsglogged : +0 MSG ::oof!~oof@oof.oof JOIN :#ch_test0 +insert user-set-to : +1 USER_ID=6 USERNICK=oof USERNAME=~oof USERHOST :oof.oof +log 1 $ channels:#ch_test0:user_ids set to: [2], [4], [6], [me] log 3 $ oof!~oof@oof.oof joins # check renaming of user communicated into all windows of channels they're in – be it others, or oneself -insert servermsglogged : +0 MSG :bar!~bar@bar.bar NICK :bazbaz -log 1 $ users:1:nick set to: [bazbaz] -log 3,4 $ bar!~bar@bar.bar renames bazbaz -insert cmd-nick : +1 ? myself -insert servermsglogged : +0 MSG :foo!~foobarbaz@baz.bar.foo NICK :myself -log 1 $ users:me:nick set to: [myself] -log 3,4 $ foo!~foobarbaz@baz.bar.foo renames myself -log 1 $ nick_wanted set to: [myself] +insert rename : +0 USER_ID=2 NUH=baz!~baz@baz.baz NEWNICK :bazbaz +insert cmd-nick : +0 NUH=foo!~baz@baz.bar.foo USER_ID=me NEWNICK :myself # reverting to foo to easen fragment re-use later on -insert cmd-nick : +1 ? foo -insert servermsglogged : +0 MSG :myself!~foobarbaz@baz.bar.foo NICK :foo -log 1 $ users:me:nick set to: [foo] -log 3,4 $ myself!~foobarbaz@baz.bar.foo renames foo -log 1 $ nick_wanted set to: [foo] +insert cmd-nick : +0 NUH=myself!~baz@baz.bar.foo USER_ID=me NEWNICK :foo # check QUIT affecting user in all their channels, removing them from DB -insert servermsglogged : +0 MSG :bazbaz!~bar@bar.bar QUIT :Client Quit -log 1 $ users:1:exit_msg set to: [QClient Quit] -log , $ bazbaz!~bar@bar.bar quits: Client Quit -log 1 $ channels:#ch_test0:exits:1 set to: [QClient Quit] -log 1 $ channels:#ch_test0:user_ids set to: [2], [4], [6], [me] -log 3 $ bazbaz!~bar@bar.bar quits: Client Quit -log 1 $ channels:#ch_test0:exits:1 cleared -log 1 $ channels:#ch_test1:exits:1 set to: [QClient Quit] +insert servermsglogged : +0 MSG ::bazbaz!~baz@baz.baz QUIT :Client Quit +log 1 $ users:2:exit_msg set to: [QClient Quit] +log , $ bazbaz!~baz@baz.baz quits: Client Quit +log 1 $ channels:#ch_test0:exits:2 set to: [QClient Quit] +log 1 $ channels:#ch_test0:user_ids set to: [4], [6], [me] +log 3 $ bazbaz!~baz@baz.baz quits: Client Quit +log 1 $ channels:#ch_test0:exits:2 cleared +log 1 $ channels:#ch_test1:exits:2 set to: [QClient Quit] log 1 $ channels:#ch_test1:user_ids set to: [me] -log 4 $ bazbaz!~bar@bar.bar quits: Client Quit -log 1 $ channels:#ch_test1:exits:1 cleared -log 1 $ users:1 cleared +log 4 $ bazbaz!~baz@baz.baz quits: Client Quit +log 1 $ channels:#ch_test1:exits:2 cleared +log 1 $ users:2 cleared # check effects of own QUIT while present in one channel -insert part-ch_test1 -insert cmd-disconnect-0 : +0 ~baz ~foobarbaz +insert part-empty : +0 CHAN_WIN_ID=4 CHANNEL :#ch_test1 +insert cmd-disconnect-0 log 1 $ channels:#ch_test0:exits:me set to: [QClient Quit] -log 1 $ channels:#ch_test0:user_ids set to: [2], [4], [6] -log 3 $ foo!~foobarbaz@baz.bar.foo quits: Client Quit +log 1 $ channels:#ch_test0:user_ids set to: [4], [6] +log 3 $ foo!~baz@baz.bar.foo quits: Client Quit log 1 $ channels:#ch_test0:exits:me cleared insert cmd-disconnect-1 :-1 +0 -insert disconnect1 : +1 WIN_IDS 2,3,4 +insert disconnect1 : +1 WIN_IDS :2,3,4 # check /reconnect calling auto-rejoin on the one channel inhabited on previous leaving insert reconnect # check same mechanism holding on externally triggered disconnect servermsg 0 FAKE_IRC_CONN_ABORT_EXCEPTION -insert disconnect0 :-1 +1 EXIT_MSG broken: FAKE_IRC_CONN_ABORT_EXCEPTION -insert disconnect1 : +1 WIN_IDS 2,3,4 -insert retry-in : +1 ? 1 +insert disconnect0 :-1 +1 EXIT_MSG :broken: FAKE_IRC_CONN_ABORT_EXCEPTION +insert disconnect1 : +1 WIN_IDS :2,3,4 +insert retry-in : +1 ? :1 insert reconnect diff --git a/src/tests/config.test b/src/tests/config.test index 3593348..b87aeed 100644 --- a/src/tests/config.test +++ b/src/tests/config.test @@ -6,8 +6,8 @@ insert ./lib/conn log 0 # Found config at tests/config.toml, reading … log 0 # Connecting: {'hostname': 'foo.bar.baz', 'nickname': 'foo', 'password': 'supersecret', 'username': 'baz', 'realname': 'bar', 'port': 1234, 'channels': ['#test', '##testtest']} -insert connect 1: +1 6697 1234 +insert connect 1: +1 6697 :1234 log 1 $ password set to: [supersecret] -insert attempting :-1 +1 6697 1234 +insert attempting :-1 +1 6697 :1234 log 2 $ - password: supersecret -insert connected : +1 WIN_IDS 2 +insert connected : +1 WIN_IDS :2 diff --git a/src/tests/connect_disconnect_legalities.test b/src/tests/connect_disconnect_legalities.test index a412915..c001320 100644 --- a/src/tests/connect_disconnect_legalities.test +++ b/src/tests/connect_disconnect_legalities.test @@ -1,23 +1,20 @@ -insert ./lib/001-setting-nick -insert ./lib/attempting-to-connected +insert ./lib/001-to-usermode +insert ./lib/already-disconnected insert ./lib/cmd-disconnect -insert ./lib/conn -# for: connect -insert ./lib/conn-error +# for: cmd-disconnect +insert ./lib/connect-to-connected insert ./lib/disconnect # for: disconnect1 +insert ./lib/disconnect-to-stop-auto-reconnect insert ./lib/error-to-disconnect insert ./lib/error-to-disconnected insert ./lib/retry-in -insert ./lib/usermode × ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× # to prepare, initiate connection -insert connect -insert attempting-to-connected -insert 001-setting-nick -insert usermode +insert connect-to-connected +insert 001-to-usermode # fail to reconnect while connected > /window 1 @@ -25,9 +22,8 @@ insert usermode log 1 $ not re-connecting since already connected # handle /disconnect on being connected -insert cmd-disconnect-0 -insert cmd-disconnect-1 :-1 -insert disconnect1 1: +1 WIN_IDS 2 +insert cmd-disconnect :-1 +insert disconnect1 1: +1 WIN_IDS :2 # fail to disconnect when already disconnected > /disconnect @@ -35,10 +31,9 @@ log 1 $ already disconnected and not attempting connect # succeed to re-connect after disconnect > /reconnect -insert attempting-to-connected +insert attempting-to-connected : +1 WIN_IDS :2 # allow /disconnect outside connection for auto-connect stops -insert error-to-disconnected : +0 §§§ Closing link: (Connection timed out) -insert retry-in : +1 ? 1 -> /disconnect -log 1 $ already disconnected, stopped connecting attempts +insert error-to-disconnected : +0 §§§ :Closing link: (Connection timed out) +insert retry-in : +1 ? :1 +insert disconnect-to-stop-auto-reconnect diff --git a/src/tests/error_disconnects.test b/src/tests/error_disconnects.test index 4817f7b..b9c89ca 100644 --- a/src/tests/error_disconnects.test +++ b/src/tests/error_disconnects.test @@ -8,8 +8,8 @@ insert ./lib/retry-in × reconnect-error-logged > /reconnect -insert attempting-to-connected -insert error-to-disconnected : +0 §§§ XXX +insert attempting-to-connected : +1 WIN_IDS :2 +insert error-to-disconnected : +0 §§§ :XXX × ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× @@ -17,14 +17,14 @@ insert error-to-disconnected : +0 §§§ XXX insert connect-to-connected # test default ERROR handling -insert error-to-disconnected : +0 §§§ abc def ghi +insert error-to-disconnected : +0 §§§ :abc def ghi # test ERROR regex (non-)matches > /window 1 -insert reconnect-error-logged : +0 XXX Closing link: (this should not match) -insert reconnect-error-logged : +0 XXX Closing link: (Connection timed out) -insert retry-in : +1 ? 1 -insert reconnect-error-logged : +0 XXX closing Link: (connection timed out) -insert retry-in : +1 ? 1 -insert reconnect-error-logged : +0 XXX Closing link: (Ping timeout: 240 seconds) -insert retry-in : +1 ? 1 +insert reconnect-error-logged : +0 XXX :Closing link: (this should not match) +insert reconnect-error-logged : +0 XXX :Closing link: (Connection timed out) +insert retry-in : +1 ? :1 +insert reconnect-error-logged : +0 XXX :closing Link: (connection timed out) +insert retry-in : +1 ? :1 +insert reconnect-error-logged : +0 XXX :Closing link: (Ping timeout: 240 seconds) +insert retry-in : +1 ? :1 diff --git a/src/tests/isupports.test b/src/tests/isupports.test index b52e66a..b414461 100644 --- a/src/tests/isupports.test +++ b/src/tests/isupports.test @@ -1,29 +1,34 @@ -insert ./lib/001-setting-nick -insert ./lib/caps -# for: caps-neg-empty +insert ./lib/001-to-usermode +insert ./lib/caps-neg-empty insert ./lib/cmd-disconnect +# for: cmd-disconnect insert ./lib/attempting-to-connected insert ./lib/connect-to-connected insert ./lib/disconnect insert ./lib/isupport-clear insert ./lib/join-empty +# for: join-channel-0, join-channel-1, join-empty +insert ./lib/no-handler insert ./lib/servermsglogged -insert ./lib/usermode +insert ./lib/user-set-to × un-default -# CHANTYPES (with parameter parsing test: will = confuse it?): -insert servermsglogged : +0 MSG :foo.bar.baz 005 foo CHANTYPES=123=456 : -log 1 $ isupport:CHANTYPES set to: [123=456] -# PREFIX (with parameter parsing test: will = confuse it?): -insert servermsglogged : +0 MSG :foo.bar.baz 005 foo PREFIX=(ovE)@+= : -log 1 $ isupport:PREFIX set to: [(ovE)@+=] -# USERLEN: -insert servermsglogged : +0 MSG :foo.bar.baz 005 foo USERLEN=8 : -log 1 $ isupport:USERLEN set to: [8] - -× no-handler -log 1 $ No handler implemented for: :? -log 2,3,4,5 $ No handler implemented for: :? +insert servermsglogged : +0 MSG ::foo.bar.baz 005 foo KEY=VALUE : +log 1 $ isupport:KEY set to: [VALUE] + +× un-defaults +insert un-default : +0 KEY=CHANTYPES VALUE :123=456 +insert un-default : +0 KEY=PREFIX VALUE :(ovE)@+= +insert un-default : +0 KEY=USERLEN VALUE :8 + +× join-and-hi +insert servermsglogged : +0 MSG ::NICKNAME!TO_CUTq@NICKNAME.NICKNAME JOIN :#ch_test8 +insert user-set-to : +1 USERHOST=NICKNAME.NICKNAME USERNAME=TO_CUTq USERNICK :NICKNAME +log 1 $ channels:#ch_test8:user_ids set to: RESIDENT_IDS, [me] +log 9 $ NICKNAME!TO_CUTq@NICKNAME.NICKNAME joins +insert servermsglogged : +0 MSG ::NICKNAME!~TO_CUT@NICKNAME.NICKNAME PRIVMSG #ch_test8 :hi +log 1 $ users:USER_ID:user set to: [~TO_CUT] +log 9 < [NICKNAME] hi × ×----------------------- @@ -32,114 +37,70 @@ log 2,3,4,5 $ No handler implemented for: :? insert connect-to-connected insert caps-neg-empty # -# prepare minimal further connection setup with user nickname known -# (referenced by later 005s) -insert 001-setting-nick +# prepare minimal further connection setup with user identity known +insert 001-to-usermode # check setting of ISUPPORTs both with and without parameters, and last arg ignored -insert servermsglogged : +0 MSG :foo.bar.baz 005 foo ABC=DEF GHI :are supported by this server +insert servermsglogged : +0 MSG ::foo.bar.baz 005 foo ABC=DEF GHI :are supported by this server log 1 $ isupport:ABC set to: [DEF] log 1 $ isupport:GHI set to: [] # check further 005 not re-setting whole dict, and last arg possibly empty -insert servermsglogged : +0 MSG :foo.bar.baz 005 foo MNO=PQR STU=VWX,YZ : +insert servermsglogged : +0 MSG ::foo.bar.baz 005 foo MNO=PQR STU=VWX,YZ : log 1 $ isupport:MNO set to: [PQR] log 1 $ isupport:STU set to: [VWX,YZ] # check minus args clearing non-defaulty ISUPPORTs, and intermingling with positive args -insert servermsglogged : +0 MSG :foo.bar.baz 005 foo -GHI DEF=MNO -STU :ignore me +insert servermsglogged : +0 MSG ::foo.bar.baz 005 foo -GHI DEF=MNO -STU :ignore me log 1 $ isupport:GHI cleared log 1 $ isupport:DEF set to: [MNO] log 1 $ isupport:STU cleared # check setting and un-setting of defaulty ISUPPORTs -insert un-default -insert servermsglogged : +0 MSG :foo.bar.baz 005 foo -CHANTYPES -PREFIX -USERLEN : +insert un-defaults +insert servermsglogged : +0 MSG ::foo.bar.baz 005 foo -CHANTYPES -PREFIX -USERLEN : insert isupport-clear 1: # check disconnect on defaulty ISUPPORTs re-instates the respective defaults -insert un-default -insert usermode +insert un-defaults > /window 1 -insert cmd-disconnect-0 -insert cmd-disconnect-1 :-1 -insert disconnect1 1: +1 WIN_IDS 2 - -# test effect of USERLEN +insert cmd-disconnect :-1 +insert disconnect1 1: +1 WIN_IDS :2 > /reconnect -insert attempting-to-connected -insert caps-neg-empty : +0 -insert 001-setting-nick : +0 -insert usermode -> /join #ch_test0 -log 1 > JOIN :#ch_test0 -insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo JOIN #ch_test0 -insert join-empty : +0 CHANNEL #ch_test0 - -insert servermsglogged : +0 MSG :bar!foobarbazq@bar.bar JOIN :#ch_test0 -log 1 $ users:1:nick set to: [?] -log 1 $ users:1:nick set to: [bar] -log 1 $ users:1:user set to: [foobarbazq] -log 1 $ users:1:host set to: [bar.bar] -log 1 $ channels:#ch_test0:user_ids set to: [1], [me] -log 3 $ bar!foobarbazq@bar.bar joins -insert servermsglogged : +0 MSG :bar!~foobarbaz@bar.bar PRIVMSG #ch_test0 :hi -log 1 $ users:1:user set to: [~foobarbaz] -log 3 < [bar] hi - -insert servermsglogged : +0 MSG :foo.bar.baz 005 foo USERLEN=8 : -log 1 $ isupport:USERLEN set to: [8] +insert attempting-to-connected : +1 WIN_IDS :2 +insert caps-neg-empty +insert 001-to-usermode -insert servermsglogged : +0 MSG :baz!foobarba@baz.baz JOIN :#ch_test0 -log 1 $ users:2:nick set to: [?] -log 1 $ users:2:nick set to: [baz] -log 1 $ users:2:user set to: [foobarba] -log 1 $ users:2:host set to: [baz.baz] -log 1 $ channels:#ch_test0:user_ids set to: [1], [2], [me] -log 3 $ baz!foobarba@baz.baz joins -insert servermsglogged : +0 MSG :baz!~foobarb@baz.baz PRIVMSG #ch_test0 :hi -log 1 $ users:2:user set to: [~foobarb] -log 3 < [baz] hi +# check effect of CHANTYPES +insert join-empty : +0 CHANNEL :#ch_test0 +insert join-empty :-1 +0 CHANNEL :&ch_test1 +log 4 $ residents: foo +insert no-handler : +0 ALERT_WIN_IDS=2,3,4 ? :foo!~baz@baz.bar.foo JOIN $ch_test2 +insert un-default : +0 KEY=CHANTYPES VALUE :#$% +insert join-empty :-1 +0 CHANNEL :#ch_test3 +log 5 $ residents: foo +insert no-handler : +0 ALERT_WIN_IDS=2,3,4,5 ? :foo!~baz@baz.bar.foo JOIN &ch_test4 +insert join-empty :-1 +0 CHANNEL :#ch_test5 +log 6 $ residents: foo # test effect of PREFIX +insert join-channel-0 : +0 CHANNEL=#ch_test6 RESIDENT_NAMES :foo @bar +baz =quux +insert user-set-to :2 +1 USER_ID=1 USERNICK :bar +insert user-set-to :2 +1 USER_ID=2 USERNICK :baz +insert user-set-to :2 +1 USER_ID=3 USERNICK :=quux +insert join-channel-1 : +0 CHANNEL=#ch_test6 RESIDENT_IDS :[1], [2], [3], [me] +log 7 $ residents: bar, baz, =quux, foo +insert un-default : +0 KEY=PREFIX VALUE :(vE)+= +insert join-channel-0 : +0 CHANNEL=#ch_test7 RESIDENT_NAMES :foo @bar +baz =quux +insert user-set-to :2 +1 USER_ID=4 USERNICK :@bar +insert user-set-to :2 +1 USER_ID=5 USERNICK :quux +insert join-channel-1 : +0 CHANNEL=#ch_test7 RESIDENT_IDS :[2], [4], [5], [me] +log 8 $ residents: baz, @bar, quux, foo -> /join #ch_test1 -log 1 > JOIN :#ch_test1 -insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo JOIN #ch_test1 -insert servermsglogged : +0 MSG :foo.bar.baz 353 foo @ #ch_test1 :foo @bar +baz =quux -log 1 $ channels:#ch_test1:exits cleared -log 1 $ users:3:nick set to: [?] -log 1 $ users:3:nick set to: [=quux] -insert servermsglogged : +0 MSG :foo.bar.baz 366 foo #ch_test1 :End of /NAMES list. -log 1 $ channels:#ch_test1:user_ids set to: [1], [2], [3], [me] -log 4 $ residents: bar, baz, =quux, foo - -insert servermsglogged : +0 MSG :foo.bar.baz 005 foo PREFIX=(vE)+= : -log 1 $ isupport:PREFIX set to: [(vE)+=] - -> /join #ch_test2 -log 1 > JOIN :#ch_test2 -insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo JOIN #ch_test2 -insert servermsglogged : +0 MSG :foo.bar.baz 353 foo @ #ch_test2 :foo @bar +baz =quux -log 1 $ channels:#ch_test2:exits cleared -log 1 $ users:4:nick set to: [?] -log 1 $ users:4:nick set to: [@bar] -log 1 $ users:5:nick set to: [?] -log 1 $ users:5:nick set to: [quux] -insert servermsglogged : +0 MSG :foo.bar.baz 366 foo #ch_test2 :End of /NAMES list. -log 1 $ channels:#ch_test2:user_ids set to: [2], [4], [5], [me] -log 5 $ residents: baz, @bar, quux, foo - -# check effect of CHANTYPES -insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo JOIN #ch_test3 -insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo JOIN &ch_test4 -insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo JOIN $ch_test5 -insert no-handler : +1 ? foo!~baz@baz.bar.foo JOIN $ch_test5 -insert servermsglogged : +0 MSG :foo.bar.baz 005 foo CHANTYPES=&$% : -log 1 $ isupport:CHANTYPES set to: [&$%] -insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo JOIN #ch_test6 -insert no-handler : +1 ? foo!~baz@baz.bar.foo JOIN #ch_test6 -insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo JOIN &ch_test7 -insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo JOIN $ch_test8 -insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo JOIN %ch_test8 +# test effect of USERLEN +insert join-empty :-1 +0 CHANNEL :#ch_test8 +log 9 $ residents: foo +insert join-and-hi : +0 NICKNAME=user0 USER_ID=6 TO_CUT=foobarbaz RESIDENT_IDS :[6] +insert un-default : +0 KEY=USERLEN VALUE :8 +insert join-and-hi : +0 NICKNAME=user1 USER_ID=7 TO_CUT=foobarb RESIDENT_IDS :[6], [7] diff --git a/src/tests/lib/001-setting-nick b/src/tests/lib/001-setting-nick index c011b2a..789db76 100644 --- a/src/tests/lib/001-setting-nick +++ b/src/tests/lib/001-setting-nick @@ -1,6 +1,6 @@ insert ./lib/servermsglogged +insert ./lib/user-set-to × 001-setting-nick -insert servermsglogged : +0 MSG :foo.bar.baz 001 foo :Welcome to the foo.bar.baz network -log 1 $ users:me:nick set to: [?] -log 1 $ users:me:nick set to: [foo] +insert servermsglogged : +0 MSG ::foo.bar.baz 001 foo :Welcome to the foo.bar.baz network +insert user-set-to :2 +1 USER_ID=me USERNICK :foo diff --git a/src/tests/lib/001-to-usermode b/src/tests/lib/001-to-usermode new file mode 100644 index 0000000..2ab63eb --- /dev/null +++ b/src/tests/lib/001-to-usermode @@ -0,0 +1,12 @@ +insert ./lib/001-setting-nick +insert ./lib/servermsglogged +insert ./lib/user-set-to + +× usermode +insert servermsglogged : +0 MSG ::foo!~baz@baz.bar.foo MODE foo ABC +insert user-set-to 2: +1 USER_ID=me USERNAME=~baz USERHOST :baz.bar.foo +log 1 $ users:me:modes set to: [ABC] + +× 001-to-usermode +insert 001-setting-nick +insert usermode diff --git a/src/tests/lib/attempting-to-connected b/src/tests/lib/attempting-to-connected index 608ed65..68705a4 100644 --- a/src/tests/lib/attempting-to-connected +++ b/src/tests/lib/attempting-to-connected @@ -3,5 +3,5 @@ insert ./lib/conn × attempting-to-connected insert attempting -insert connected : +1 WIN_IDS 2 +insert connected diff --git a/src/tests/lib/bazbarfoo b/src/tests/lib/bazbarfoo deleted file mode 100644 index c12c744..0000000 --- a/src/tests/lib/bazbarfoo +++ /dev/null @@ -1,8 +0,0 @@ -insert ./lib/conn -# for: attempting, connect - -× connect-bazbarfoo -insert connect : +3 foo.bar.baz baz.bar.foo - -× attempting-bazbarfoo -insert attempting : +3 foo.bar.baz baz.bar.foo diff --git a/src/tests/lib/cap-msg b/src/tests/lib/cap-msg new file mode 100644 index 0000000..36c1f27 --- /dev/null +++ b/src/tests/lib/cap-msg @@ -0,0 +1,4 @@ +insert ./lib/servermsglogged + +× cap-msg +insert servermsglogged : +0 MSG ::*.?.net CAP CAPMSG diff --git a/src/tests/lib/caps b/src/tests/lib/caps deleted file mode 100644 index 48cc4bf..0000000 --- a/src/tests/lib/caps +++ /dev/null @@ -1,10 +0,0 @@ -insert ./lib/servermsglogged - -× cap-msg -insert servermsglogged : +0 MSG :*.?.net CAP ??? - -× caps-neg-empty -insert cap-msg : +0 ??? * LS : -log 1 > CAP :LIST -insert cap-msg : +0 ??? * LIST : -log 1 > CAP :END diff --git a/src/tests/lib/caps-data-set b/src/tests/lib/caps-data-set new file mode 100644 index 0000000..bc03241 --- /dev/null +++ b/src/tests/lib/caps-data-set @@ -0,0 +1,3 @@ +× caps-data-set +log 1 $ caps:CAPNAME:data set to: [] +log 1 $ caps:CAPNAME:data set to: [CAPVAL] diff --git a/src/tests/lib/caps-neg-empty b/src/tests/lib/caps-neg-empty new file mode 100644 index 0000000..c7818c3 --- /dev/null +++ b/src/tests/lib/caps-neg-empty @@ -0,0 +1,7 @@ +insert ./lib/cap-msg + +× caps-neg-empty +insert cap-msg : +0 CAPMSG :* LS : +log 1 > CAP :LIST +insert cap-msg : +0 CAPMSG :* LIST : +log 1 > CAP :END diff --git a/src/tests/lib/channels b/src/tests/lib/channels deleted file mode 100644 index bc3732d..0000000 --- a/src/tests/lib/channels +++ /dev/null @@ -1,37 +0,0 @@ -insert ./lib/servermsglogged - -× cmd-nick -> /nick ? -log 1 > NICK :? - -× JOIN0 -log 1 > JOIN :CHANNEL -insert servermsglogged : +0 MSG :foo!~foobarbaz@baz.bar.foo JOIN CHANNEL - -× join-w-topic -> /join CHANNAME -insert JOIN0 : +0 CHANNEL CHANNAME -insert servermsglogged : +0 MSG :foo.bar.baz 332 foo CHANNAME :foo bar baz -log 1 $ channels:CHANNAME:exits cleared -insert servermsglogged : +0 MSG :foo.bar.baz 333 foo CHANNAME bar!~bar@OLD.bar.bar 1234567890 -log 1 $ channels:CHANNAME:topic set to: [Topic(what='foo bar baz', who=NickUserHost(nick='bar', user='~bar', host='OLD.bar.bar'))] -log 4 $ bar!~bar@OLD.bar.bar set topic: foo bar baz - -× part0 -> /part -log 1 > PART :CHANNEL -insert servermsglogged : +0 MSG :foo!~foobarbaz@baz.bar.foo PART :CHANNEL -log 1 $ channels:CHANNEL:exits:me set to: [P] -log 1 $ channels:CHANNEL:user_ids cleared - -× part1 -log 1 $ channels:CHANNEL:exits:me cleared -log 1 $ channels:CHANNEL cleared - -× topics-test -log 1 $ channels:CHANNAME:topic set to: [Topic(what='foo bar baz', who=NickUserHost(nick='bar', user='~bar', host='bar.bar'))] -log 4 $ bar!~bar@bar.bar set topic: foo bar baz -insert servermsglogged : +0 MSG :bar!~bar@bar.bar TOPIC CHANNAME :foo bar baz -insert servermsglogged : +0 MSG :bar!~bar@bar.bar TOPIC CHANNAME :foo foo baz -log 1 $ channels:CHANNAME:topic set to: [Topic(what='foo foo baz', who=NickUserHost(nick='bar', user='~bar', host='bar.bar'))] -log 4 $ bar!~bar@bar.bar set topic: foo foo baz diff --git a/src/tests/lib/cmd-disconnect b/src/tests/lib/cmd-disconnect index 489c51b..ec63933 100644 --- a/src/tests/lib/cmd-disconnect +++ b/src/tests/lib/cmd-disconnect @@ -5,9 +5,13 @@ insert ./lib/error-to-disconnect × cmd-disconnect-0 > /disconnect log 1 > QUIT :ircplom says bye -insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo QUIT :Client Quit +insert servermsglogged : +0 MSG ::foo!~baz@baz.bar.foo QUIT :Client Quit log 1 $ users:me:exit_msg set to: [QClient Quit] log , $ foo!~baz@baz.bar.foo quits: Client Quit × cmd-disconnect-1 -insert error-to-disconnect : +0 ? Closing link: [Quit: ircplom says bye] +insert error-to-disconnect : +0 ? ::Closing link: [Quit: ircplom says bye] + +× cmd-disconnect +insert cmd-disconnect-0 +insert cmd-disconnect-1 diff --git a/src/tests/lib/cmd-nick b/src/tests/lib/cmd-nick new file mode 100644 index 0000000..8c32aa2 --- /dev/null +++ b/src/tests/lib/cmd-nick @@ -0,0 +1,12 @@ +insert ./lib/servermsglogged + +× rename +insert servermsglogged : +0 MSG ::NUH NICK :NEWNICK +log 1 $ users:USER_ID:nick set to: [NEWNICK] +log 3,4 $ NUH renames NEWNICK + +× cmd-nick +> /nick NEWNICK +log 1 > NICK :NEWNICK +insert rename : +0 +log 1 $ nick_wanted set to: [NEWNICK] diff --git a/src/tests/lib/connect-to-connected b/src/tests/lib/connect-to-connected index 20ca772..cf45c6d 100644 --- a/src/tests/lib/connect-to-connected +++ b/src/tests/lib/connect-to-connected @@ -5,5 +5,4 @@ insert ./lib/conn × connect-to-connected insert connect : +1 -insert attempting-to-connected : +1 - +insert attempting-to-connected : +1 WIN_IDS :2 diff --git a/src/tests/lib/disconnect-to-stop-auto-reconnect b/src/tests/lib/disconnect-to-stop-auto-reconnect new file mode 100644 index 0000000..41fbdfb --- /dev/null +++ b/src/tests/lib/disconnect-to-stop-auto-reconnect @@ -0,0 +1,3 @@ +× disconnect-to-stop-auto-reconnect +> /disconnect +log 1 $ already disconnected, stopped connecting attempts diff --git a/src/tests/lib/error-to-disconnect b/src/tests/lib/error-to-disconnect index d288fc9..00c853f 100644 --- a/src/tests/lib/error-to-disconnect +++ b/src/tests/lib/error-to-disconnect @@ -3,5 +3,5 @@ insert ./lib/disconnect insert ./lib/servermsglogged × error-to-disconnect -insert servermsglogged : +0 MSG ERROR :? -insert disconnect0 : +1 EXIT_MSG ? +insert servermsglogged : +0 MSG :ERROR :? +insert disconnect0 : +1 EXIT_MSG :? diff --git a/src/tests/lib/error-to-disconnected b/src/tests/lib/error-to-disconnected index b7b760a..7126435 100644 --- a/src/tests/lib/error-to-disconnected +++ b/src/tests/lib/error-to-disconnected @@ -3,5 +3,5 @@ insert ./lib/disconnect insert ./lib/error-to-disconnect × error-to-disconnected -insert error-to-disconnect :-1 +0 ? §§§ -insert disconnect1 1:-1 +1 WIN_IDS 2 +insert error-to-disconnect :-1 +0 ? :§§§ +insert disconnect1 1:-1 +1 WIN_IDS :2 diff --git a/src/tests/lib/join-empty b/src/tests/lib/join-empty index b9428c0..c584db6 100644 --- a/src/tests/lib/join-empty +++ b/src/tests/lib/join-empty @@ -1,8 +1,17 @@ insert ./lib/servermsglogged -× join-empty -insert servermsglogged : +0 MSG :foo.bar.baz 353 foo @ CHANNEL :foo +× join-channel-0 +> /join CHANNEL +log 1 > JOIN :CHANNEL +insert servermsglogged : +0 MSG ::foo!~baz@baz.bar.foo JOIN :CHANNEL +insert servermsglogged : +0 MSG ::foo.bar.baz 353 foo = CHANNEL :RESIDENT_NAMES log 1 $ channels:CHANNEL:exits cleared -insert servermsglogged : +0 MSG :foo.bar.baz 366 foo CHANNEL :End of /NAMES list. -log 1 $ channels:CHANNEL:user_ids set to: [me] + +× join-channel-1 +insert servermsglogged : +0 MSG ::foo.bar.baz 366 foo CHANNEL :End of /NAMES list. +log 1 $ channels:CHANNEL:user_ids set to: RESIDENT_IDS + +× join-empty +insert join-channel-0 : +0 RESIDENT_NAMES :foo +insert join-channel-1 : +0 RESIDENT_IDS :[me] log 3 $ residents: foo diff --git a/src/tests/lib/no-handler b/src/tests/lib/no-handler new file mode 100644 index 0000000..2a2a896 --- /dev/null +++ b/src/tests/lib/no-handler @@ -0,0 +1,6 @@ +insert ./lib/servermsglogged + +× no-handler +insert servermsglogged : +0 MSG :? +log 1 $ No handler implemented for: ? +log ALERT_WIN_IDS $ No handler implemented for: ? diff --git a/src/tests/lib/no-timely-pong b/src/tests/lib/no-timely-pong index 8b6f837..72bab47 100644 --- a/src/tests/lib/no-timely-pong +++ b/src/tests/lib/no-timely-pong @@ -5,6 +5,6 @@ insert ./lib/retry-in × no-timely-pong servermsg 0 timeout servermsg 0 no timely PONG from server -insert disconnect0 :-1 +1 EXIT_MSG broken: no timely PONG from server -insert disconnect1 1:-1 +1 WIN_IDS 2 -insert retry-in : +1 ? 1 +insert disconnect0 :-1 +1 EXIT_MSG :broken: no timely PONG from server +insert disconnect1 1:-1 +1 WIN_IDS :2 +insert retry-in : +1 ? :1 diff --git a/src/tests/lib/part b/src/tests/lib/part new file mode 100644 index 0000000..2a1bccd --- /dev/null +++ b/src/tests/lib/part @@ -0,0 +1,11 @@ +insert ./lib/servermsglogged + +× part +> /part +log 1 > PART :CHANNEL +insert servermsglogged : +0 MSG ::foo!~baz@baz.bar.foo PART :CHANNEL +log 1 $ channels:CHANNEL:exits:me set to: [P] +log 1 $ channels:CHANNEL:user_ids USERIDS_CLEAR +log CHAN_WIN_ID $ foo!~baz@baz.bar.foo parts +log 1 $ channels:CHANNEL:exits:me cleared +log 1 $ channels:CHANNEL cleared diff --git a/src/tests/lib/pingpong b/src/tests/lib/pingpong index d2f2bec..5737b06 100644 --- a/src/tests/lib/pingpong +++ b/src/tests/lib/pingpong @@ -1,5 +1,5 @@ insert ./lib/servermsglogged × ping-pong -insert servermsglogged : +0 MSG PING :? +insert servermsglogged : +0 MSG :PING :? log 1 > PONG :? diff --git a/src/tests/lib/privmsg b/src/tests/lib/privmsg new file mode 100644 index 0000000..d13786a --- /dev/null +++ b/src/tests/lib/privmsg @@ -0,0 +1,4 @@ +× privmsg +> /privmsg TARGET TXT +log 1 > PRIVMSG TARGET :TXT +log 3 > [foo] TXT diff --git a/src/tests/lib/req-sasl b/src/tests/lib/req-sasl new file mode 100644 index 0000000..4b50951 --- /dev/null +++ b/src/tests/lib/req-sasl @@ -0,0 +1,8 @@ +insert ./lib/cap-msg + +× req-sasl +log 1 > CAP REQ :sasl +log 1 > CAP :LIST +insert cap-msg : +0 CAPMSG :* REPLY :sasl +insert cap-msg : +0 CAPMSG :* LIST :CAPLIST + diff --git a/src/tests/lib/servernotice b/src/tests/lib/servernotice index 7d6b93f..65fffb3 100644 --- a/src/tests/lib/servernotice +++ b/src/tests/lib/servernotice @@ -1,6 +1,6 @@ insert ./lib/servermsglogged × servernotice -insert servermsglogged : +0 MSG :*.?.net NOTICE * :XXX +insert servermsglogged : +0 MSG ::*.?.net NOTICE * :XXX log 2 < (server) XXX diff --git a/src/tests/lib/trigger-ping b/src/tests/lib/trigger-ping new file mode 100644 index 0000000..9000abd --- /dev/null +++ b/src/tests/lib/trigger-ping @@ -0,0 +1,3 @@ +× trigger-ping +servermsg SERVER_ID timeout +log LOG_ID > PING :what's up? diff --git a/src/tests/lib/user-set-to b/src/tests/lib/user-set-to new file mode 100644 index 0000000..b41abb5 --- /dev/null +++ b/src/tests/lib/user-set-to @@ -0,0 +1,6 @@ +× user-set-to +log 1 $ users:USER_ID:nick set to: [?] +log 1 $ users:USER_ID:nick set to: [USERNICK] +log 1 $ users:USER_ID:user set to: [USERNAME] +log 1 $ users:USER_ID:host set to: [USERHOST] + diff --git a/src/tests/lib/usermode b/src/tests/lib/usermode deleted file mode 100644 index 255d82e..0000000 --- a/src/tests/lib/usermode +++ /dev/null @@ -1,7 +0,0 @@ -insert ./lib/servermsglogged - -× usermode -insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo MODE foo ABC -log 1 $ users:me:user set to: [~baz] -log 1 $ users:me:host set to: [baz.bar.foo] -log 1 $ users:me:modes set to: [ABC] diff --git a/src/tests/pingpong.test b/src/tests/pingpong.test index 7d82cb6..699edd3 100644 --- a/src/tests/pingpong.test +++ b/src/tests/pingpong.test @@ -1,22 +1,18 @@ -insert ./lib/conn -# for: attempting, connected +insert ./lib/attempting-to-connected insert ./lib/connect-to-connected insert ./lib/no-timely-pong insert ./lib/pingpong insert ./lib/servermsglogged insert ./lib/servernotice - -× trigger-ping -servermsg 0 timeout -log 1 > PING :what's up? +insert ./lib/trigger-ping × full-timeout # ping on timeout, go on as normal if PONG received -insert trigger-ping -insert servermsglogged : +0 MSG :*.?.net PONG *.?.net :what's up? -insert servernotice : +0 MSG XXX Looking up your ident... +insert trigger-ping : +0 SERVER_ID=0 LOG_ID :1 +insert servermsglogged : +0 MSG ::*.?.net PONG *.?.net :what's up? +insert servernotice : +0 MSG :XXX Looking up your ident... # another timeout instead of pong? disconnect -insert trigger-ping +insert trigger-ping : +0 SERVER_ID=0 LOG_ID :1 insert no-timely-pong × ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× @@ -31,6 +27,5 @@ insert full-timeout # on re-connect, ensure timer cleared, i.e. only 2nd time-out will disconnect > /window 1 > /reconnect -insert attempting -insert connected : +1 WIN_IDS 2 +insert attempting-to-connected : +1 WIN_IDS :2 insert full-timeout diff --git a/src/tests/test.test b/src/tests/test.test index 15159c3..7561929 100644 --- a/src/tests/test.test +++ b/src/tests/test.test @@ -1,64 +1,66 @@ -insert ./lib/bazbarfoo -# for: attempting-bazbarfoo, connect-bazbarfoo -insert ./lib/channels -# for: cmd-nick, JOIN0, join-w-topic, part0, part1, topics-test +insert ./lib/attempting-to-connected +insert ./lib/cap-msg +insert ./lib/caps-data-set insert ./lib/cmd-disconnect +insert ./lib/cmd-nick insert ./lib/conn # for: attempting, connect, connected insert ./lib/disconnect # for: disconnect0, disconnect1 +insert ./lib/disconnect-to-stop-auto-reconnect insert ./lib/enter-list-start insert ./lib/isupport-clear +insert ./lib/join-empty +# for: join-channel-0, join-channel-1 +insert ./lib/no-handler +insert ./lib/part insert ./lib/pingpong +insert ./lib/privmsg +insert ./lib/req-sasl insert ./lib/retry-in insert ./lib/servermsglogged insert ./lib/servernotice +insert ./lib/user-set-to + +× nick-increment +insert servermsglogged : +0 MSG ::*.?.net 433 * NAME_A :Nickname already in use +log 1 $ nickname already in use, trying increment +log 1 > NICK :NAME_B × conn_init_1 # expect some NOTICE and PING to process/reply during initiation -insert servernotice : +0 XXX *** Looking up your ident... -insert servernotice : +0 XXX *** Looking up your hostname... -insert servernotice : +0 XXX *** Found your hostname (baz.bar.foo) +insert servernotice : +0 XXX :*** Looking up your ident... +insert servernotice : +0 XXX :*** Looking up your hostname... +insert servernotice : +0 XXX :*** Found your hostname (baz.bar.foo) insert ping-pong : +0 # handle 433 -insert servermsglogged : +0 MSG :*.?.net 433 * foo :Nickname already in use -log 1 $ nickname already in use, trying increment -log 1 > NICK :foo0 -insert servermsglogged : +0 MSG :*.?.net 433 * foo0 :Nickname already in use -log 1 $ nickname already in use, trying increment -log 1 > NICK :foo1 +insert nick-increment : +0 NAME_A=foo NAME_B :foo0 +insert nick-increment : +0 NAME_A=foo0 NAME_B :foo1 # collect server capabilities -insert servermsglogged : +0 MSG :*.?.net CAP * LS : foo bar sasl=PLAIN,EXTERNAL baz cap-notify +insert cap-msg : +0 CAPMSG :* LS : foo bar sasl=PLAIN,EXTERNAL baz cap-notify log 1 $ caps:bar:data set to: [] log 1 $ caps:baz:data set to: [] log 1 $ caps:cap-notify:data set to: [] 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 > CAP REQ :sasl -log 1 > CAP :LIST -insert servermsglogged : +0 MSG :*.?.net CAP * ACK :sasl -insert servermsglogged : +0 MSG :*.?.net CAP * LIST :cap-notify sasl +insert caps-data-set : +1 CAPNAME=sasl CAPVAL :PLAIN,EXTERNAL +insert req-sasl : +0 REPLY=ACK CAPLIST :cap-notify sasl log 1 $ caps:cap-notify:enabled set to: [True] 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 -insert servermsglogged : +0 MSG AUTHENTICATE + +insert servermsglogged : +0 MSG :AUTHENTICATE + log 1 > AUTHENTICATE :Zm9vAGZvbwBiYXI= -insert servermsglogged : +0 MSG :foo.bar.baz 900 foo1 foo1!foobarbazq@baz.bar.foo foo :You are now logged in as foo -log 1 $ users:me:nick set to: [?] -log 1 $ users:me:nick set to: [foo1] -log 1 $ users:me:user set to: [foobarbazq] -log 1 $ users:me:host set to: [baz.bar.foo] +insert servermsglogged : +0 MSG ::foo.bar.baz 900 foo1 foo1!baz@baz.bar.foo foo :You are now logged in as foo +insert user-set-to : +1 USER_ID=me USERNICK=foo1 USERNAME=baz USERHOST :baz.bar.foo log 1 $ sasl_account set to: [foo] -insert servermsglogged : +0 MSG :foo.bar.baz 903 foo1 :SASL authentication successful +insert servermsglogged : +0 MSG ::foo.bar.baz 903 foo1 :SASL authentication successful log 1 $ sasl_auth_state set to: [SASL authentication successful] # finish CAP negotation, thus login procedure @@ -69,174 +71,122 @@ log 1 > CAP :END × conn_init_2 # of all pre-MOTD greeting messages, only process isupports -insert servermsglogged : +0 MSG :foo.bar.baz 001 foo1 :Welcome to the foo.bar.baz network -insert servermsglogged : +0 MSG :foo.bar.baz 002 foo1 :Your host is foo.bar.baz -insert servermsglogged : +0 MSG :foo.bar.baz 003 foo1 :This server was created Jan 1 2020 -insert servermsglogged : +0 MSG :foo.bar.baz 004 foo1 foo.bar.baz ircserver-1.0 abc def ghi -insert servermsglogged : +0 MSG :foo.bar.baz 005 foo1 ABC=DEF GHI :are supported by this server +insert servermsglogged : +0 MSG ::foo.bar.baz 001 foo1 :Welcome to the foo.bar.baz network +insert servermsglogged : +0 MSG ::foo.bar.baz 002 foo1 :Your host is foo.bar.baz +insert servermsglogged : +0 MSG ::foo.bar.baz 003 foo1 :This server was created Jan 1 2020 +insert servermsglogged : +0 MSG ::foo.bar.baz 004 foo1 foo.bar.baz ircserver-1.0 abc def ghi +insert servermsglogged : +0 MSG ::foo.bar.baz 005 foo1 ABC=DEF GHI :are supported by this server log 1 $ isupport:ABC set to: [DEF] log 1 $ isupport:GHI set to: [] -insert servermsglogged : +0 MSG :foo.bar.baz 251 foo1 :There are 10 users and 1000 invisible on 5 servers -insert servermsglogged : +0 MSG :foo.bar.baz 252 foo1 7 :IRC Operators online -insert servermsglogged : +0 MSG :foo.bar.baz 253 foo1 4 :unknown connection(s) -insert servermsglogged : +0 MSG :foo.bar.baz 254 foo1 800 :channels formed -insert servermsglogged : +0 MSG :foo.bar.baz 255 foo1 :I have 100 clients and 1 serveres -insert servermsglogged : +0 MSG :foo.bar.baz 265 foo1 100 150 :Current local users 100, max 150 -insert servermsglogged : +0 MSG :foo.bar.baz 266 foo1 1010 1050 :Current global users 1010, max 1050 -insert servermsglogged : +0 MSG :foo.bar.baz 250 foo1 :Highest connection count: 151 (150 clients) (1080 connections received) +insert servermsglogged : +0 MSG ::foo.bar.baz 251 foo1 :There are 10 users and 1000 invisible on 5 servers +insert servermsglogged : +0 MSG ::foo.bar.baz 252 foo1 7 :IRC Operators online +insert servermsglogged : +0 MSG ::foo.bar.baz 253 foo1 4 :unknown connection(s) +insert servermsglogged : +0 MSG ::foo.bar.baz 254 foo1 800 :channels formed +insert servermsglogged : +0 MSG ::foo.bar.baz 255 foo1 :I have 100 clients and 1 serveres +insert servermsglogged : +0 MSG ::foo.bar.baz 265 foo1 100 150 :Current local users 100, max 150 +insert servermsglogged : +0 MSG ::foo.bar.baz 266 foo1 1010 1050 :Current global users 1010, max 1050 +insert servermsglogged : +0 MSG ::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) -insert servermsglogged : +0 MSG :foo.bar.baz 375 foo1 :- foo.bar.baz Message of the Day - -insert servermsglogged : +0 MSG :foo.bar.baz 372 foo1 :- Howdy! - -insert servermsglogged : +0 MSG :foo.bar.baz 372 foo1 :- Welcome! - -insert servermsglogged : +0 MSG :foo.bar.baz 372 foo1 :- (to this server) - -insert servermsglogged : +0 MSG :foo.bar.baz 376 foo1 :End of /MOTD command +insert servermsglogged : +0 MSG ::foo.bar.baz 375 foo1 :- foo.bar.baz Message of the Day - +insert servermsglogged : +0 MSG ::foo.bar.baz 372 foo1 :- Howdy! - +insert servermsglogged : +0 MSG ::foo.bar.baz 372 foo1 :- Welcome! - +insert servermsglogged : +0 MSG ::foo.bar.baz 372 foo1 :- (to this server) - +insert servermsglogged : +0 MSG ::foo.bar.baz 376 foo1 :End of /MOTD command log 1 $ motd set to: [- Howdy! -], [- Welcome! -], [- (to this server) -] log 2 $ - Howdy! - log 2 $ - Welcome! - log 2 $ - (to this server) - # collect user mode -insert servermsglogged : +0 MSG :foo1 MODE foo1 :+Ziw +insert servermsglogged : +0 MSG ::foo1 MODE foo1 :+Ziw log 1 $ users:me:modes set to: [+Ziw] # handle bot query NOTICE -insert servermsglogged : +0 MSG :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. +insert servermsglogged : +0 MSG ::SaslServ!SaslServ@services.bar.baz NOTICE foo1 :Last login from ~baz@foo.bar.baz on Jan 1 22:00:00 2021 +0000. +log 3 < (SaslServ) Last login from ~baz@foo.bar.baz on Jan 1 22:00:00 2021 +0000. × during_conn # test recoverable 432 -insert cmd-nick : +1 ? @foo -insert servermsglogged : +0 MSG :*.?.net 432 foo1 @foo :Erroneous nickname +insert cmd-nick :2 +1 NEWNICK :@foo +insert servermsglogged : +0 MSG ::*.?.net 432 foo1 @foo :Erroneous nickname log 1 $ nickname refused for bad format, keeping current one # rename to easen code-reuse -insert cmd-nick : +1 ? foo -insert servermsglogged : +0 MSG :foo1!~foobarbaz@baz.bar.foo NICK :foo -log 1 $ users:me:user set to: [~foobarbaz] -log 1 $ users:me:nick set to: [foo] -log rename_win_ids $ foo1!~foobarbaz@baz.bar.foo renames foo - -# join channel, collect topic, residents; update me:user from JOIN message; ensure topic.who not affecting users DB -insert join-w-topic : +0 CHANNAME #test -insert servermsglogged : +0 MSG :foo.bar.baz 353 foo @ #test :foo @bar -log 1 $ users:1:nick set to: [?] -log 1 $ users:1:nick set to: [bar] -insert servermsglogged : +0 MSG :foo.bar.baz 366 foo #test :End of /NAMES list. -log 1 $ channels:#test:user_ids set to: [1], [me] -log 4 $ residents: bar, foo - -# deliver PRIVMSG to channel window, update sender's user+host from metadata -insert servermsglogged : +0 MSG :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 +insert cmd-nick :4 +0 NUH=foo1!~baz@baz.bar.foo NEWNICK :foo +log 1 $ users:me:user set to: [~baz] +insert cmd-nick 4:-2 +1 USER_ID=me NEWNICK :foo +log rename_win_ids $ foo1!~baz@baz.bar.foo renames foo -# check _changing_ TOPIC message is communicated to channel window, as long as either content or who change -insert servermsglogged : +0 MSG :bar!~bar@bar.bar TOPIC #test :foo bar baz -insert topics-test : +0 CHANNAME #test +# join channel with other user +insert join-channel-0 : +0 CHANNEL=#test RESIDENT_NAMES :foo @baz +insert user-set-to :2 +1 USER_ID=1 USERNICK :baz +insert join-channel-1 : +0 CHANNEL=#test RESIDENT_IDS :[1], [me] +log 4 $ residents: baz, foo # process non-self channel JOIN -insert servermsglogged : +0 MSG :baz!~baz@baz.baz JOIN :#test -log 1 $ users:2:nick set to: [?] -log 1 $ users:2:nick set to: [baz] -log 1 $ users:2:user set to: [~baz] -log 1 $ users:2:host set to: [baz.baz] +insert servermsglogged : +0 MSG ::bar!~bar@bar.bar JOIN :#test +insert user-set-to : +1 USER_ID=2 USERNICK=bar USERNAME=~bar USERHOST :bar.bar log 1 $ channels:#test:user_ids set to: [1], [2], [me] -log 4 $ baz!~baz@baz.baz joins +log 4 $ bar!~bar@bar.bar joins # join second channel with partial residents identity to compare distribution of resident-specific messages -insert join-w-topic :-1 +0 CHANNAME #testtest -log 5 $ bar!~bar@OLD.bar.bar set topic: foo bar baz -insert servermsglogged : +0 MSG :foo.bar.baz 353 foo @ #testtest :foo baz -insert servermsglogged : +0 MSG :foo.bar.baz 366 foo #testtest :End of /NAMES list. -log 1 $ channels:#testtest:user_ids set to: [2], [me] -log 5 $ residents: baz, foo +insert join-channel-0 : +0 CHANNEL=#testtest RESIDENT_NAMES :foo bar +insert join-channel-1 : +0 CHANNEL=#testtest RESIDENT_IDS :[2], [me] +log 5 $ residents: bar, foo # handle query window with known user -insert servermsglogged : +0 MSG :baz!~baz@baz.baz PRIVMSG foo :hi there -log 6 < [baz] hi there -> /privmsg baz hello, how is it going -log 1 > PRIVMSG baz :hello, how is it going +insert servermsglogged : +0 MSG ::bar!~bar@bar.bar PRIVMSG foo :hi there +log 6 < [bar] hi there +insert privmsg :-1 +1 TARGET=bar TXT :hello, how is it going log 6 > [foo] hello, how is it going -insert servermsglogged : +0 MSG :baz!~baz@baz.baz PRIVMSG foo :fine! -log 6 < [baz] fine! +insert servermsglogged : +0 MSG ::bar!~bar@bar.bar PRIVMSG foo :fine! +log 6 < [bar] fine! # handle failure to query absent user -> /privmsg barbar hello! -log 1 > PRIVMSG barbar :hello! +insert privmsg :-1 +1 TARGET=barbar TXT :hello! log 7 > [foo] hello! -insert servermsglogged : +0 MSG :*.?.net 401 foo barbar :No such nick/channel +insert servermsglogged : +0 MSG ::*.?.net 401 foo barbar :No such nick/channel log 7 $ barbar not online -# handle non-self renaming -insert servermsglogged : +0 MSG :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 -insert servermsglogged : +0 MSG :bazbaz!~baz@baz.baz PART :#test -log 1 $ channels:#test:exits:2 set to: [P] -log 1 $ channels:#test:user_ids set to: [1], [me] -log 4 $ bazbaz!~baz@baz.baz parts -log 1 $ channels:#test:exits:2 cleared -insert servermsglogged : +0 MSG :bazbaz!~baz@baz.baz JOIN :#test -log 1 $ channels:#test:user_ids set to: [1], [2], [me] -log 4 $ bazbaz!~baz@baz.baz joins - -# handle non-self PART in only inhabited channel, lose identity, re-join as new identity -insert servermsglogged : +0 MSG :bar!~bar@bar.bar PART :#test -log 1 $ channels:#test:exits:1 set to: [P] -log 1 $ channels:#test:user_ids set to: [2], [me] -log 4 $ bar!~bar@bar.bar parts -log 1 $ channels:#test:exits:1 cleared -log 1 $ users:1 cleared -insert servermsglogged : +0 MSG :bar!~bar@bar.bar JOIN :#test -log 1 $ users:3:nick set to: [?] -log 1 $ users:3:nick set to: [bar] -log 1 $ users:3:user set to: [~bar] -log 1 $ users:3:host set to: [bar.bar] -log 1 $ channels:#test:user_ids set to: [2], [3], [me] -log 4 $ bar!~bar@bar.bar joins +# handle non-self renaming, even into window of previously not found target +insert servermsglogged : +0 MSG ::bar!~bar@bar.bar NICK :barbar +log 1 $ users:2:nick set to: [barbar] +log 4,5,6,7 $ bar!~bar@bar.bar renames barbar # handle non-self QUIT -insert servermsglogged : +0 MSG :bazbaz!~baz@baz.baz QUIT :Client Quit +insert servermsglogged : +0 MSG ::barbar!~bar@bar.bar QUIT :Client Quit log 1 $ users:2:exit_msg set to: [QClient Quit] -log 6 $ bazbaz!~baz@baz.baz quits: Client Quit +log 6,7 $ barbar!~bar@bar.bar quits: Client Quit log 1 $ channels:#test:exits:2 set to: [QClient Quit] -log 1 $ channels:#test:user_ids set to: [3], [me] -log 4 $ bazbaz!~baz@baz.baz quits: Client Quit +log 1 $ channels:#test:user_ids set to: [1], [me] +log 4 $ barbar!~bar@bar.bar quits: Client Quit log 1 $ channels:#test:exits:2 cleared log 1 $ channels:#testtest:exits:2 set to: [QClient Quit] log 1 $ channels:#testtest:user_ids set to: [me] -log 5 $ bazbaz!~baz@baz.baz quits: Client Quit +log 5 $ barbar!~bar@bar.bar quits: Client Quit log 1 $ channels:#testtest:exits:2 cleared log 1 $ users:2 cleared # handle self-PART: clear channel, and its squatters > /window 4 -insert part0 :-1 +0 CHANNEL #test -log 1 $ channels:#test:user_ids set to: [3] -log 4 $ foo!~foobarbaz@baz.bar.foo parts -insert part1 : +1 CHANNEL #test -log 1 $ users:3 cleared +insert part : +0 CHAN_WIN_ID=4 CHANNEL=#test USERIDS_CLEAR :set to: [1] +log 1 $ users:1 cleared # handle lack of implementation -insert servermsglogged : +0 MSG 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 +insert no-handler : +0 ALERT_WIN_IDS=2,3,4,5,6,7 ? :foo bar baz # handle /disconnect, clear all -insert cmd-disconnect-0 :-1 +0 ~baz ~foobarbaz -log 3,6,7 $ foo!~foobarbaz@baz.bar.foo quits: Client Quit +insert cmd-disconnect-0 :-1 +log 3,6,7 $ foo!~baz@baz.bar.foo quits: Client Quit log 1 $ channels:#testtest:exits:me set to: [QClient Quit] log 1 $ channels:#testtest:user_ids cleared -log 5 $ foo!~foobarbaz@baz.bar.foo quits: Client Quit +log 5 $ foo!~baz@baz.bar.foo quits: Client Quit log 1 $ channels:#testtest:exits:me cleared insert cmd-disconnect-1 : +0 -insert disconnect1 :-1 +1 WIN_IDS 2,3,4,5,6,7 +insert disconnect1 :-1 +1 WIN_IDS :2,3,4,5,6,7 log 1 $ motd cleared log 1 $ sasl_account set to: [] log 1 $ sasl_auth_state set to: [] @@ -261,7 +211,7 @@ log 1 $ password set to: [bar] insert attempting :-1 log 2 $ - password: bar -insert connected : +1 WIN_IDS 2 +insert connected : +1 WIN_IDS :2 insert conn_init_1 insert conn_init_2 @@ -299,20 +249,19 @@ log 1 # /window.prompt.scroll DIRECTION log 1 # /window.raw VERB [PARAMS_STR] log 1 # /window.reconnect -insert during_conn : +0 rename_win_ids 3 +insert during_conn : +0 rename_win_ids :3 # test setting up second client, but 432 irrecoverably > /connect baz.bar.foo:6697 ?foo bar:baz -insert connect-bazbarfoo 1: +8 [foo] [?foo] -insert attempting-bazbarfoo :2 +8 +insert connect 1: +8 foo.bar.baz=baz.bar.foo [foo] :[?foo] +insert attempting :2 +8 foo.bar.baz :baz.bar.foo log 9 $ - nickname: ?foo -insert attempting-bazbarfoo 3: +9 -insert connected :-1 +8 WIN_IDS 2 +insert attempting-to-connected 3:-1 +8 WIN_IDS=2 foo.bar.baz :baz.bar.foo log 8 > NICK :?foo servermsg 1 :*.?.net 432 * ?foo :Erroneous nickname log 8 < :*.?.net 432 * ?foo :Erroneous nickname insert isupport-clear : +8 -insert disconnect1 1:-1 +8 WIN_IDS 2 +insert disconnect1 1:-1 +8 WIN_IDS :2 log 8 $ nickname refused for bad format, giving up # zero unread-lines counts in status line so it won't explode simulated screen @@ -327,16 +276,14 @@ log 8 $ nickname refused for bad format, giving up > /window 1 # test failing third connection -insert connect : +10 foo.bar.baz baz.baz.baz -insert attempting : +10 foo.bar.baz baz.baz.baz -insert connected : +10 WIN_IDS 2 +insert connect : +10 foo.bar.baz :baz.baz.baz +insert attempting-to-connected : +10 WIN_IDS=2 foo.bar.baz :baz.baz.baz servermsg 2 FAKE_IRC_CONN_ABORT_EXCEPTION -insert disconnect0 :-1 +10 EXIT_MSG broken: FAKE_IRC_CONN_ABORT_EXCEPTION -insert disconnect1 1:-1 +10 WIN_IDS 2 +insert disconnect0 :-1 +10 EXIT_MSG :broken: FAKE_IRC_CONN_ABORT_EXCEPTION +insert disconnect1 1:-1 +10 WIN_IDS :2 log 10 $ will retry connecting in 1 seconds > /window 10 -> /disconnect -log 10 $ already disconnected, stopped connecting attempts +insert disconnect-to-stop-auto-reconnect : +10 # zero unread-lines counts in status line so it won't explode simulated screen > /window 2 @@ -355,9 +302,9 @@ log 10 $ already disconnected, stopped connecting attempts > /reconnect insert attempting :-1 log 2 $ - password: bar -insert connected : +1 WIN_IDS 2,3,4,5,6,7 +insert connected : +1 WIN_IDS :2,3,4,5,6,7 insert conn_init_1 insert conn_init_2 :2 log 1 > JOIN :#testtest insert conn_init_2 2: -insert during_conn : +0 rename_win_ids 3,6,7 +insert during_conn : +0 rename_win_ids :3,6,7 diff --git a/src/tests/tui_draw.test b/src/tests/tui_draw.test index c16da48..1a34b3f 100644 --- a/src/tests/tui_draw.test +++ b/src/tests/tui_draw.test @@ -46,16 +46,16 @@ line 22 on_black,bright_white x123456789x1234567================================ insert lines-prompt-empty × lines-status-prompt-start -insert lines-status-prompt : +22 x123456789x1234567 :start)=========== +insert lines-status-prompt : +22 x123456789x1234567 ::start)=========== × lines-status-prompt-foobarbaz -insert lines-status-prompt : +22 x123456789x1234567 foo.bar.baz:debug) +insert lines-status-prompt : +22 x123456789x1234567 :foo.bar.baz:debug) × line-invalid-prompt-command line 0 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: MSG§§ × line-invalid-prompt-command-unknown -insert line-invalid-prompt-command : +0 MSG /CMD unknown +insert line-invalid-prompt-command : +0 MSG :/CMD unknown × line-ping line 0 on_black,bright_white < §§:§§:§§ PING :? @@ -64,8 +64,8 @@ line 0 on_black,bright_white < §§:§§:§§ PING :? line 0 on_black,bright_green > §§:§§:§§ PONG :? × lines-ping-pong -insert line-ping : +0 ? ?? -insert line-pong : +1 ? ?? +insert line-ping : +0 ? :?? +insert line-pong : +1 ? :?? × line-tui-log line 0 on_black,bright_cyan # §§:§§:§§ ?§§ @@ -90,202 +90,202 @@ line 0 on_black,bright_white 20§§-§§-§§ §§ × history_0 insert line-cal : +0 -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§§ -insert line-tui-log : +6 ? /list§§ -insert line-tui-log : +7 ? /prompt_enter§§ -insert line-tui-log : +8 ? /quit§§ -insert line-tui-log : +9 ? /window TOWARDS§§ -insert line-tui-log : +10 ? /window.history.scroll DIRECTION§§ -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 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 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§§ -insert line-tui-log : +30 ? 1) foo.bar.baz:debug§§ -insert line-tui-log : +31 ? 2) foo.bar.baz:server§§ +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§§ +insert line-tui-log : +6 ? : /list§§ +insert line-tui-log : +7 ? : /prompt_enter§§ +insert line-tui-log : +8 ? : /quit§§ +insert line-tui-log : +9 ? : /window TOWARDS§§ +insert line-tui-log : +10 ? : /window.history.scroll DIRECTION§§ +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 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 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§§ +insert line-tui-log : +30 ? : 1) foo.bar.baz:debug§§ +insert line-tui-log : +31 ? : 2) foo.bar.baz:server§§ × history_1 insert line-cal : +0 -insert line-server-log : +1 ? isupport cleared -insert line-server-log : +2 ? isupport:CHANTYPES set to: [#&] -insert line-server-log : +3 ? isupport:PREFIX set to: [(ov)@+] -insert line-server-log : +4 ? isupport:USERLEN set to: [10] -insert line-server-log : +5 ? caps cleared -insert line-server-log : +6 ? users cleared -insert line-server-log : +7 ? channels cleared -insert line-server-log : +8 ? hostname set to: [foo.bar.baz] -insert line-server-log : +9 ? port set to: [6697] -insert line-server-log : +10 ? nick_wanted set to: [foo] -insert line-server-log : +11 ? user_wanted set to: [baz] -insert line-server-log : +12 ? realname set to: [bar] -insert line-server-log : +13 ? connection_state set to: [connecting] -insert line-server-log : +14 ? connection_state set to: [connected] -insert line-client-msg : +15 ? CAP LS :302 -insert line-client-msg : +16 ? USER baz 0 * :bar -insert line-client-msg : +17 ? NICK :foo -insert lines-ping-pong : +18 ?? ? -insert line-ping : +20 ? 9 123456789 123456789 123456789 123456789 123456789 123456789§§ -insert line-bright-white : +21 ? 123456789 123456789 -insert line-pong : +22 ? 9 123456789 123456789 123456789 123456789 123456789 123456789§§ -insert line-bright-green : +23 ? 123456789 123456789 -insert lines-ping-pong : +24 ?? foo -insert lines-ping-pong : +26 ?? bar -insert lines-ping-pong : +28 ?? baz -insert lines-ping-pong : +30 ?? 0 -insert lines-ping-pong : +32 ?? 1 -insert lines-ping-pong : +34 ?? 2 -insert lines-ping-pong : +36 ?? 3 -insert lines-ping-pong : +38 ?? 4 -insert lines-ping-pong : +40 ?? 5 -insert lines-ping-pong : +42 ?? 6 -insert lines-ping-pong : +44 ?? 7 -insert lines-ping-pong : +46 ?? 8 -insert lines-ping-pong : +48 ?? 9 -insert lines-ping-pong : +50 ?? 10 -insert lines-ping-pong : +52 ?? 11 -insert lines-ping-pong : +54 ?? 12 -insert lines-ping-pong : +56 ?? 13 -insert lines-ping-pong : +58 ?? 14 -insert lines-ping-pong : +60 ?? 15 -insert lines-ping-pong : +62 ?? 16 -insert lines-ping-pong : +64 ?? 17 -insert lines-ping-pong : +66 ?? 18 -insert lines-ping-pong : +68 ?? 19 -insert lines-ping-pong : +70 ?? 20 -insert lines-ping-pong : +72 ?? 21 -insert lines-ping-pong : +74 ?? 22 -insert lines-ping-pong : +76 ?? 23 +insert line-server-log : +1 ? :isupport cleared +insert line-server-log : +2 ? :isupport:CHANTYPES set to: [#&] +insert line-server-log : +3 ? :isupport:PREFIX set to: [(ov)@+] +insert line-server-log : +4 ? :isupport:USERLEN set to: [10] +insert line-server-log : +5 ? :caps cleared +insert line-server-log : +6 ? :users cleared +insert line-server-log : +7 ? :channels cleared +insert line-server-log : +8 ? :hostname set to: [foo.bar.baz] +insert line-server-log : +9 ? :port set to: [6697] +insert line-server-log : +10 ? :nick_wanted set to: [foo] +insert line-server-log : +11 ? :user_wanted set to: [baz] +insert line-server-log : +12 ? :realname set to: [bar] +insert line-server-log : +13 ? :connection_state set to: [connecting] +insert line-server-log : +14 ? :connection_state set to: [connected] +insert line-client-msg : +15 ? :CAP LS :302 +insert line-client-msg : +16 ? :USER baz 0 * :bar +insert line-client-msg : +17 ? :NICK :foo +insert lines-ping-pong : +18 ?? :? +insert line-ping : +20 ? :9 123456789 123456789 123456789 123456789 123456789 123456789§§ +insert line-bright-white : +21 ? : 123456789 123456789 +insert line-pong : +22 ? :9 123456789 123456789 123456789 123456789 123456789 123456789§§ +insert line-bright-green : +23 ? : 123456789 123456789 +insert lines-ping-pong : +24 ?? :foo +insert lines-ping-pong : +26 ?? :bar +insert lines-ping-pong : +28 ?? :baz +insert lines-ping-pong : +30 ?? :0 +insert lines-ping-pong : +32 ?? :1 +insert lines-ping-pong : +34 ?? :2 +insert lines-ping-pong : +36 ?? :3 +insert lines-ping-pong : +38 ?? :4 +insert lines-ping-pong : +40 ?? :5 +insert lines-ping-pong : +42 ?? :6 +insert lines-ping-pong : +44 ?? :7 +insert lines-ping-pong : +46 ?? :8 +insert lines-ping-pong : +48 ?? :9 +insert lines-ping-pong : +50 ?? :10 +insert lines-ping-pong : +52 ?? :11 +insert lines-ping-pong : +54 ?? :12 +insert lines-ping-pong : +56 ?? :13 +insert lines-ping-pong : +58 ?? :14 +insert lines-ping-pong : +60 ?? :15 +insert lines-ping-pong : +62 ?? :16 +insert lines-ping-pong : +64 ?? :17 +insert lines-ping-pong : +66 ?? :18 +insert lines-ping-pong : +68 ?? :19 +insert lines-ping-pong : +70 ?? :20 +insert lines-ping-pong : +72 ?? :21 +insert lines-ping-pong : +74 ?? :22 +insert lines-ping-pong : +76 ?? :23 × ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× insert lines-empty -insert lines-status-prompt-start : +22 X123456789X123456789X =================([0] +insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] # nothing happening on empty command input > insert lines-empty -insert lines-status-prompt-start : +22 X123456789X123456789X =================([0] +insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] # check scrolling on empty history does nothing > /window.history.scroll up insert lines-empty -insert lines-status-prompt-start : +22 X123456789X123456789X =================([0] +insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] > /window.history.scroll down insert lines-empty -insert lines-status-prompt-start : +22 X123456789X123456789X =================([0] +insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] # non-empty command input starts log at bottom, with date above it -insert enter-unprefixed : +0 ? foo +insert enter-unprefixed : +0 ? :foo insert lines-empty :20 insert history_0 :2 +20 -insert lines-status-prompt-start : +22 X123456789X123456789X =================([0] +insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] # check scrolling on history merely 2 lines long won't do anything either > /window.history.scroll up insert lines-empty :20 insert history_0 :2 +20 -insert lines-status-prompt-start : +22 X123456789X123456789X =================([0] +insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] > /window.history.scroll down insert lines-empty :20 insert history_0 :2 +20 -insert lines-status-prompt-start : +22 X123456789X123456789X =================([0] +insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] # further inputs grow log upwards > /foo log 0 # invalid prompt command: /foo unknown insert lines-empty :19 insert history_0 :3 +19 -insert lines-status-prompt-start : +22 X123456789X123456789X =================([0] +insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] # check scrolling up does something on history 3 lines long > /window.history.scroll up insert lines-empty :20 insert history_0 :1 +20 -insert line-scrolldown : +21 XXXXXX [2] vv -insert lines-status-prompt-start : +22 X123456789X123456789X =================([0] +insert line-scrolldown : +21 XXXXXX :[2] vv +insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] # check scrolling down on 3-lines history > /window.history.scroll down insert lines-empty :19 insert history_0 :3 +19 -insert lines-status-prompt-start : +22 X123456789X123456789X =================([0] +insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] # check history growing below up-scroll > /window.history.scroll up insert lines-empty :20 insert history_0 :1 +20 -insert line-scrolldown : +21 XXXXXX [2] vv -insert lines-status-prompt-start : +22 X123456789X123456789X =================([0] +insert line-scrolldown : +21 XXXXXX :[2] vv +insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] insert enter-help-win0 insert lines-empty :20 insert history_0 :1 +20 -insert line-scrolldown : +21 XXXXXX [14] v -insert lines-status-prompt-start : +22 X123456789X123456789X ============([(0:12)] +insert line-scrolldown : +21 XXXXXX :[14] v +insert lines-status-prompt-start : +22 X123456789X123456789X :============([(0:12)] # check scroll-down on newer history longer than half a screen width does not fully land at bottom > /window.history.scroll down insert lines-empty :9 insert history_0 :12 +9 -insert line-scrolldown : +21 XXXXXX [3] vv -insert lines-status-prompt-start : +22 X123456789X123456789X =============([(0:3)] +insert line-scrolldown : +21 XXXXXX :[3] vv +insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:3)] # check previous scroll-down not hitting bottom be fully reversible > /window.history.scroll up insert lines-empty :20 insert history_0 :1 +20 -insert line-scrolldown : +21 XXXXXX [14] v -insert lines-status-prompt-start : +22 X123456789X123456789X =============([(0:3)] +insert line-scrolldown : +21 XXXXXX :[14] v +insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:3)] > /window.history.scroll down insert lines-empty :9 insert history_0 :12 +9 -insert line-scrolldown : +21 XXXXXX [3] vv -insert lines-status-prompt-start : +22 X123456789X123456789X =============([(0:3)] +insert line-scrolldown : +21 XXXXXX :[3] vv +insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:3)] # scroll to bottom, check history still growing up even beyond upper fold > /window.history.scroll down insert lines-empty :7 insert history_0 :15 +7 -insert lines-status-prompt-start : +22 X123456789X123456789X =================([0] -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 lines-status-prompt-start : +22 X123456789X123456789X :=================([0] +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] +insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] # check scroll-down even with long history does nothing > /window.history.scroll down insert history_0 1:23 +0 -insert lines-status-prompt-start : +22 X123456789X123456789X =================([0] +insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] # 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 insert lines-empty :9 insert history_0 :12 +9 -insert line-scrolldown : +21 XXXXXX [11] v -insert lines-status-prompt-start : +22 X123456789X123456789X =================([0] +insert line-scrolldown : +21 XXXXXX :[11] v +insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] # check wrapping > /window.history.scroll down @@ -294,116 +294,116 @@ log 0 # invalid prompt command: /foo_0123456789_0123456789_0123456789 unknown > /foo_0123456789_0123456789_0123456789_ log 0 # invalid prompt command: /foo_0123456789_0123456789_0123456789_ unknown insert history_0 4:26 +0 -insert lines-status-prompt-start : +22 X123456789X123456789X =================([0] +insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] # check scroll-up over wrapped moves up less history lines than screen lines > /window.history.scroll up insert lines-empty :6 insert history_0 :15 +6 -insert line-scrolldown : +21 XXXXXX [10] v -insert lines-status-prompt-start : +22 X123456789X123456789X =================([0] +insert line-scrolldown : +21 XXXXXX :[10] v +insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] # check scroll-down fully reversible even if over wrapped > /window.history.scroll down insert history_0 4:26 +0 -insert lines-status-prompt-start : +22 X123456789X123456789X =================([0] +insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] > /window.history.scroll up insert lines-empty :6 insert history_0 :15 +6 -insert line-scrolldown : +21 XXXXXX [10] v -insert lines-status-prompt-start : +22 X123456789X123456789X =================([0] +insert line-scrolldown : +21 XXXXXX :[10] v +insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] # check wrapped input only increases below-scroll count by one > /bar_0123456789_0123456789_0123456789_ log 0 # invalid prompt command: /bar_0123456789_0123456789_0123456789_ unknown insert lines-empty :6 insert history_0 :15 +6 -insert line-scrolldown : +21 XXXXXX [11] v -insert lines-status-prompt-start : +22 X123456789X123456789X =============([(0:1)] +insert line-scrolldown : +21 XXXXXX :[11] v +insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:1)] # check scroll-down over wrapped will snap down to bottom of wrapped > /window.history.scroll down insert history_0 5:26 +0 -insert line-scrolldown : +21 XXXXXX [1] vv -insert lines-status-prompt-start : +22 X123456789X123456789X =============([(0:1)] +insert line-scrolldown : +21 XXXXXX :[1] vv +insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:1)] # # check scrolls-up over longer history until top > /window.history.scroll up insert lines-empty :6 insert history_0 :15 +6 -insert line-scrolldown : +21 XXXXXX [11] v -insert lines-status-prompt-start : +22 X123456789X123456789X =============([(0:1)] +insert line-scrolldown : +21 XXXXXX :[11] v +insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:1)] > /window.history.scroll up insert lines-empty :17 insert history_0 :3 +17 -insert line-scrolldown : +21 XXXXXX [22] v -insert lines-status-prompt-start : +22 X123456789X123456789X =============([(0:1)] +insert line-scrolldown : +21 XXXXXX :[22] v +insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:1)] > /window.history.scroll up insert lines-empty :20 insert history_0 :1 +20 -insert line-scrolldown : +21 XXXXXX [25] v -insert lines-status-prompt-start : +22 X123456789X123456789X =============([(0:1)] +insert line-scrolldown : +21 XXXXXX :[25] v +insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:1)] # check that triggering creation of new window with new lines adds it to status, with unread-lines count insert connect-to-connected insert lines-empty :20 insert history_0 :1 +20 -insert line-scrolldown : +21 XXXXXX [25] v -insert lines-status-prompt-start : +22 X123456789X123456789X ([(0:1)] (1:18) (2:7) +insert line-scrolldown : +21 XXXXXX :[25] v +insert lines-status-prompt-start : +22 X123456789X123456789X :([(0:1)] (1:18) (2:7) # check switch to other window, updates to status line (movement of brackets, clearing of own unread-lines count) > /window 1 insert lines-empty :4 insert history_1 :18 +4 -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====((0:1) [1] (2:7) +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====((0:1) [1] (2:7) # check switch-back to window 0, retaining clearing of window 1's unread-lines count > /window 0 insert lines-empty :20 insert history_0 :1 +20 -insert line-scrolldown : +21 XXXXXX [25] v -insert lines-status-prompt-start : +22 X123456789X123456789X =====([(0:1)] 1 (2:7) +insert line-scrolldown : +21 XXXXXX :[25] v +insert lines-status-prompt-start : +22 X123456789X123456789X :=====([(0:1)] 1 (2:7) # check that on full scroll-down, we now have a bookmark above the newest lines not previously scrolled into > /window.history.scroll down insert lines-empty :9 insert history_0 :12 +9 -insert line-scrolldown : +21 XXXXXX [14] v -insert lines-status-prompt-start : +22 X123456789X123456789X =====([(0:1)] 1 (2:7) +insert line-scrolldown : +21 XXXXXX :[14] v +insert lines-status-prompt-start : +22 X123456789X123456789X :=====([(0:1)] 1 (2:7) > /window.history.scroll down insert history_0 2:23 +0 -insert line-scrolldown : +21 XXXXXX [3] vv -insert lines-status-prompt-start : +22 X123456789X123456789X =====([(0:1)] 1 (2:7) +insert line-scrolldown : +21 XXXXXX :[3] vv +insert lines-status-prompt-start : +22 X123456789X123456789X :=====([(0:1)] 1 (2:7) > /window.history.scroll down insert history_0 7:26 +0 insert line-bookmark : +19 insert history_0 26:28 +20 -insert lines-status-prompt-start : +22 X123456789X123456789X =========([0] 1 (2:7) +insert lines-status-prompt-start : +22 X123456789X123456789X :=========([0] 1 (2:7) # 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 insert lines-empty :3 insert history_0 :18 +3 -insert line-scrolldown : +21 XXXXXX [8] vv -insert lines-status-prompt-start : +22 X123456789X123456789X =========([0] 1 (2:7) +insert line-scrolldown : +21 XXXXXX :[8] vv +insert lines-status-prompt-start : +22 X123456789X123456789X :=========([0] 1 (2:7) > /window.history.scroll down insert history_0 7:26 +0 insert line-bookmark : +19 insert history_0 26:28 +20 -insert lines-status-prompt-start : +22 X123456789X123456789X =========([0] 1 (2:7) +insert lines-status-prompt-start : +22 X123456789X123456789X :=========([0] 1 (2:7) # check that second switch to new window, previously left on bottom of history, establishes bookmark at bottom of log > /window 1 insert lines-empty :3 insert history_1 :18 +3 insert line-bookmark : +21 -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7) +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7) # 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 insert history_0 7:28 +0 insert line-bookmark : +21 -insert lines-status-prompt-start : +22 X123456789X123456789X =========([0] 1 (2:7) +insert lines-status-prompt-start : +22 X123456789X123456789X :=========([0] 1 (2:7) # check new lines push bookmark up insert enter-list-start @@ -412,223 +412,223 @@ log 0 # 2) foo.bar.baz:server insert history_0 11:28 +0 insert line-bookmark : +17 insert history_0 28:32 +18 -insert lines-status-prompt-start : +22 X123456789X123456789X =========([0] 1 (2:7) +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 ping-pong : +0 ? ? -insert ping-pong : +0 ? 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 -insert lines-status-prompt-start : +22 X123456789X123456789X =====([0] (1:4) (2:7) +insert lines-status-prompt-start : +22 X123456789X123456789X :=====([0] (1:4) (2:7) # 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 insert history_1 3:18 +0 insert line-bookmark : +15 insert history_1 18:24 +16 -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7) +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 > /window.history.scroll up -insert ping-pong : +0 ? foo +insert ping-pong : +0 ? :foo insert lines-empty :7 insert history_1 0:14 +7 -insert line-scrolldown : +21 XXXXXX [10] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:2)] (2:7) +insert line-scrolldown : +21 XXXXXX :[10] v +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:2)] (2:7) > /window.history.scroll down insert history_1 4:18 +0 insert line-bookmark : +14 insert history_1 18:24 +15 -insert line-scrolldown : +21 XXXXXX [2] vv -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:2)] (2:7) +insert line-scrolldown : +21 XXXXXX :[2] vv +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:2)] (2:7) # 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 insert history_0 11:32 +0 insert line-bookmark : +21 -insert lines-status-prompt-start : +22 X123456789X123456789X =====([0] (1:2) (2:7) +insert lines-status-prompt-start : +22 X123456789X123456789X :=====([0] (1:2) (2:7) > /window 1 insert history_1 4:24 +0 insert line-bookmark : +20 -insert line-scrolldown : +21 XXXXXX [2] vv -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:2)] (2:7) +insert line-scrolldown : +21 XXXXXX :[2] vv +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:2)] (2:7) # check that growing lines below scroll in other preserves non-bottom bookmark (left in sight on previous window leave) > /window 0 -insert ping-pong : +0 ? 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) +insert lines-status-prompt-start : +22 X123456789X123456789X :=====([0] (1:4) (2:7) > /window 1 insert history_1 4:24 +0 insert line-bookmark : +20 -insert line-scrolldown : +21 XXXXXX [4] vv -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:4)] (2:7) +insert line-scrolldown : +21 XXXXXX :[4] vv +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:4)] (2:7) # check same applies when leaving affected window with bookmark out-of-sight > /window.history.scroll up insert lines-empty :7 insert history_1 :14 +7 -insert line-scrolldown : +21 XXXXXX [12] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:4)] (2:7) +insert line-scrolldown : +21 XXXXXX :[12] v +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:4)] (2:7) > /window 0 -insert ping-pong : +0 ? 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) +insert lines-status-prompt-start : +22 X123456789X123456789X :=====([0] (1:6) (2:7) > /window 1 insert lines-empty :7 insert history_1 :14 +7 -insert line-scrolldown : +21 XXXXXX [14] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:6)] (2:7) +insert line-scrolldown : +21 XXXXXX :[14] v +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:6)] (2:7) > /window.history.scroll down insert history_1 4:24 +0 insert line-bookmark : +20 -insert line-scrolldown : +21 XXXXXX [6] vv -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:6)] (2:7) +insert line-scrolldown : +21 XXXXXX :[6] vv +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:6)] (2:7) > /window.history.scroll down insert history_1 9:24 +0 insert line-bookmark : +15 insert history_1 24:30 +16 -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7) +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 ping-pong : +0 ? 0 +insert ping-pong : +0 ? :0 insert history_1 11:24 +0 insert line-bookmark : +13 insert history_1 24:32 +14 -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7) +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7) > /window.history.scroll up insert history_1 1:22 +0 -insert line-scrolldown : +21 XXXXXX [9] vv -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7) +insert line-scrolldown : +21 XXXXXX :[9] vv +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7) > /window.history.scroll up insert lines-empty :10 insert history_1 :11 +10 -insert line-scrolldown : +21 XXXXXX [19] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7) +insert line-scrolldown : +21 XXXXXX :[19] v +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7) > /window.history.scroll up insert lines-empty :20 insert history_1 :1 +20 -insert line-scrolldown : +21 XXXXXX [29] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2: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 ping-pong : +0 ? 0 +insert ping-pong : +0 ? :0 insert lines-empty :20 insert history_1 2:3 +20 -insert line-scrolldown : +21 XXXXXX [29] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:2)] (2:7) +insert line-scrolldown : +21 XXXXXX :[29] v +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:2)] (2:7) # check unread-lines count potentially growing above max log depth if in other window > /window 0 insert history_0 11:32 +0 insert line-bookmark : +21 -insert lines-status-prompt-start : +22 X123456789X123456789X =====([0] (1:2) (2:7) -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 lines-status-prompt-start : +22 X123456789X123456789X :=====([0] (1:2) (2:7) +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) +insert lines-status-prompt-start : +22 X123456789X123456789X :====([0] (1:32) (2:7) # check switching into window scrolled-top with more unread lines than max log depth shrinks former to latter, and scrolling down no bookmark is to be found > /window 1 insert lines-empty :20 insert history_1 32:33 +20 -insert line-scrolldown : +21 XXXXXX [29] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X ====(0 [(1:29)] (2:7) +insert line-scrolldown : +21 XXXXXX :[29] v +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :====(0 [(1:29)] (2:7) > /window.history.scroll down insert lines-empty :9 insert history_1 32:44 +9 -insert line-scrolldown : +21 XXXXXX [18] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X ====(0 [(1:18)] (2:7) +insert line-scrolldown : +21 XXXXXX :[18] v +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :====(0 [(1:18)] (2:7) > /window.history.scroll down insert history_1 34:55 +0 -insert line-scrolldown : +21 XXXXXX [7] vv -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:7)] (2:7) +insert line-scrolldown : +21 XXXXXX :[7] vv +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:7)] (2:7) > /window.history.scroll down insert history_1 40:60 +0 -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7) +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7) # check bookmark remains absent with log growing while scrolled to bottom, … -insert ping-pong : +0 ? 16 +insert ping-pong : +0 ? :16 insert history_1 42:62 +0 -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7) +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7) # … as well as if further growth happens below scroll > /window.history.scroll up insert lines-empty :2 insert history_1 34:53 +2 -insert line-scrolldown : +21 XXXXXX [11] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7) -insert ping-pong : +0 ? 17 +insert line-scrolldown : +21 XXXXXX :[11] v +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7) +insert ping-pong : +0 ? :17 insert lines-empty :4 insert history_1 36:53 +4 -insert line-scrolldown : +21 XXXXXX [13] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:2)] (2:7) +insert line-scrolldown : +21 XXXXXX :[13] v +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:2)] (2:7) > /window.history.scroll down insert history_1 43:64 +0 -insert line-scrolldown : +21 XXXXXX [2] vv -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:2)] (2:7) +insert line-scrolldown : +21 XXXXXX :[2] vv +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:2)] (2:7) > /window.history.scroll down insert history_1 44:66 +0 -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7) +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7) # check unread-lines status not growing beyond max log if within active window, and … > /window.history.scroll up insert lines-empty :2 insert history_1 36:53 +2 -insert line-scrolldown : +21 XXXXXX [11] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7) -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 line-scrolldown : +21 XXXXXX :[11] v +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7) +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 66:67 +20 -insert line-scrolldown : +21 XXXXXX [29] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X ====(0 [(1:29)] (2:7) +insert line-scrolldown : +21 XXXXXX :[29] v +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :====(0 [(1:29)] (2:7) # … setting bookmark visible after switching back-and-forth > /window 0 insert history_0 11:32 +0 insert line-bookmark : +21 -insert lines-status-prompt-start : +22 X123456789X123456789X ====([0] (1:29) (2:7) +insert lines-status-prompt-start : +22 X123456789X123456789X :====([0] (1:29) (2:7) > /window 1 insert lines-empty :19 insert history_1 66:67 +19 insert line-bookmark : +20 -insert line-scrolldown : +21 XXXXXX [29] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X ====(0 [(1:29)] (2:7) +insert line-scrolldown : +21 XXXXXX :[29] v +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :====(0 [(1:29)] (2:7) > /window.history.scroll down insert lines-empty :8 insert history_1 66:67 +8 insert line-bookmark : +9 insert history_1 67:78 +10 -insert line-scrolldown : +21 XXXXXX [18] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X ====(0 [(1:18)] (2:7) +insert line-scrolldown : +21 XXXXXX :[18] v +insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :====(0 [(1:18)] (2:7) diff --git a/src/tests/tui_line_formattings.test b/src/tests/tui_line_formattings.test index ac492c5..43240d1 100644 --- a/src/tests/tui_line_formattings.test +++ b/src/tests/tui_line_formattings.test @@ -4,7 +4,7 @@ insert ./lib/servermsglogged insert ./lib/servernotice × servermsglogged-and-line-unwrapped -insert servermsglogged : +0 MSG XXX +insert servermsglogged : +0 MSG :XXX line 21 on_black,bright_white < §§:§§:§§ XXX§§ × ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× @@ -14,46 +14,46 @@ insert 001-setting-nick > /window 1 # check full line not wrapped -insert servermsglogged-and-line-unwrapped : +0 XXX :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 12345678 0 +insert servermsglogged-and-line-unwrapped : +0 XXX ::foo.bar.baz 001 foo :6789 123456789 123456789 123456789 12345678 0 # check wrap if last space-separated item one char too long -insert servermsglogged : +0 MSG :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678 01 +insert servermsglogged : +0 MSG ::foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678 01 line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678§§ line 21 on_black,bright_white 01§§ # check wrap if item starts right after width-final space -insert servermsglogged : +0 MSG :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 123456789 1 +insert servermsglogged : +0 MSG ::foo.bar.baz 002 foo :456789 123456789 123456789 123456789 123456789 1 line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 123456789§§ line 21 on_black,bright_white 1§§ # check wrap if item starts right after space after item extending to end of width -insert servermsglogged : +0 MSG :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890 2 +insert servermsglogged : +0 MSG ::foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890 2 line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890§§ line 21 on_black,bright_white 2§§ # check wrap if item starts right after double-space after item extending to end of width -insert servermsglogged : +0 MSG :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890 3 +insert servermsglogged : +0 MSG ::foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890 3 line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890§§ line 21 on_black,bright_white 3§§ # check wrap on item too large to fit into screen width minus indent -insert servermsglogged : +0 MSG :foo.bar.baz 002 foo :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_2345678 +insert servermsglogged : +0 MSG ::foo.bar.baz 002 foo :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_2345678 line 19 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo§§ line 20 on_black,bright_white :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_234567§§ line 21 on_black,bright_white 8 # check wrapping calculation on double-width character (tbh not much of a test since the tester itself counts specifically this char as two, so it's pretty much the same as above testing with a sequence of two ASCII chars; mostly just ensures that the wrapping code relies on Terminal.length_to_term) -insert servermsglogged-and-line-unwrapped : +0 XXX :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567 💓 -insert servermsglogged : +0 MSG :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678 💓 +insert servermsglogged-and-line-unwrapped : +0 XXX ::foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567 💓 +insert servermsglogged : +0 MSG ::foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678 💓 line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678§§ line 21 on_black,bright_white 💓§§ -insert servermsglogged : +0 MSG :foo.bar.baz 002 foo :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_23456💓 +insert servermsglogged : +0 MSG ::foo.bar.baz 002 foo :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_23456💓 line 19 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo§§ line 20 on_black,bright_white :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_23456§§ line 21 on_black,bright_white 💓§§ # check interpretation and escape of formatting characters -insert servernotice : +0 XXX *** check that {esc|ape}s, formatting not counting into wrap +insert servernotice : +0 XXX :*** check that {esc|ape}s, formatting not counting into wrap line 20 on_black,bright_white < §§:§§:§§ :*.?.net NOTICE * :*** check that {esc|ape}s, formatting not counting§§ line 21 on_black,bright_white into wrap§§ > /window 2 diff --git a/src/tests/tui_prompt_basics.test b/src/tests/tui_prompt_basics.test index 0d43a7d..ee34d01 100644 --- a/src/tests/tui_prompt_basics.test +++ b/src/tests/tui_prompt_basics.test @@ -8,8 +8,8 @@ insert ./lib/enter_misc > # expected complaints on wrong command inputs -insert enter-unprefixed : +0 ? foo -insert enter-unknown : +0 ? foo +insert enter-unprefixed : +0 ? :foo +insert enter-unknown : +0 ? :foo > /help foo log 0 # invalid prompt command: /help given argument(s) while none expected > /window -- 2.30.2