From 78870be3f1da6b36c58bdda34d2d3f0a5e3bb4a0 Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Mon, 8 Dec 2025 01:51:36 +0100 Subject: [PATCH] Overhaul testing "insert" instruction grammar, for greater flexibility. --- src/ircplom/testing.py | 112 +-- src/tests/_timeout_retries.test | 26 +- src/tests/caps.test | 26 +- src/tests/channels.test | 183 ++-- src/tests/config.test | 3 +- src/tests/connect_disconnect_legalities.test | 10 +- src/tests/error_disconnects.test | 21 +- src/tests/isupports.test | 86 +- src/tests/lib/001-setting-nick | 4 +- src/tests/lib/attempting | 1 - src/tests/lib/attempting-to-connected | 1 - src/tests/lib/cap-msg | 2 +- src/tests/lib/caps-neg-empty | 4 +- src/tests/lib/cmd-disconnect | 4 +- src/tests/lib/cmd-nick | 14 +- src/tests/lib/connect | 2 +- src/tests/lib/connect-to-connected | 2 +- src/tests/lib/connect-w-password | 4 +- src/tests/lib/connected | 2 +- src/tests/lib/disconnect | 6 +- src/tests/lib/error-to-disconnect | 4 +- src/tests/lib/error-to-disconnected | 4 +- src/tests/lib/join-empty | 30 +- src/tests/lib/no-handler | 6 +- src/tests/lib/no-timely-pong | 6 +- src/tests/lib/part | 32 +- src/tests/lib/pingpong | 2 +- src/tests/lib/privmsg | 6 +- src/tests/lib/req-sasl | 13 +- src/tests/lib/retry-in | 2 +- src/tests/lib/servermsglogged | 7 +- src/tests/lib/servernotice | 5 +- src/tests/lib/trigger-ping | 4 +- src/tests/lib/user-set-to | 6 +- src/tests/lib/usermode | 4 +- src/tests/pingpong.test | 10 +- src/tests/test.test | 154 ++-- src/tests/tui_draw.test | 836 +++++++++---------- src/tests/tui_line_formattings.test | 24 +- src/tests/tui_prompt_basics.test | 5 +- src/tests/tui_status_line_scrolling.test | 56 +- src/tests/userset.test | 66 +- 42 files changed, 895 insertions(+), 900 deletions(-) diff --git a/src/ircplom/testing.py b/src/ircplom/testing.py index 28bc949..e954b36 100644 --- a/src/ircplom/testing.py +++ b/src/ircplom/testing.py @@ -32,15 +32,17 @@ _SEP_1 = ',' _SEP_2 = ':' _TOK_FILE = './' _TOK_IDX_REPEAT = 'r' +_KW_BUMP = 'bump=' +_KW_RANGE = 'range=' _SIGNATURE_FOR_CMD = { _MARK_FRAGMENT: (1, None), - _MARK_INSERT: (4, 2), - _MARK_LOG: (2, 0), + _MARK_INSERT: (2, _KW_BUMP), + _MARK_LOG: (2, None), _MARK_PROMPT: (1, None), _MARK_SCREENLINE: (4, 0), - _MARK_SERVERMSG: (2, 0), - _MARK_WAIT: (1, 0), + _MARK_SERVERMSG: (2, None), + _MARK_WAIT: (1, None), } @@ -220,42 +222,58 @@ class _Playbook: for val in range_str.split(_SEP_2)) candidates[:] = candidates[idx_in:idx_out] - def replace_pattern(to_replace: str, replacement: str) -> None: - candidates[:] = [[c[0], c[1].replace(to_replace, replacement)] - for c in candidates] - def bump_int_fields(n_bump: int) -> None: - to_bump = [] - start_offset: Optional[int] = None + t_bumpable = str | int | dict[str, int] + to_bump: list[tuple[str, tuple[t_bumpable, ...]]] = [] + start_offset = None for candidate in candidates: - cmd_name, remains = candidate[1].split(_SEP_0, maxsplit=1) + cmd_name, args = self._cmdname_and_args_from(candidate[1]) cmd_args_idx = _SIGNATURE_FOR_CMD[cmd_name][1] - cmd_args: list[str | tuple[int, ...]] - cmd_args = list(self._args_for_cmd(cmd_name, remains)) - if cmd_args_idx is not None\ - and len(cmd_args) > cmd_args_idx: - cmd_arg = cmd_args[cmd_args_idx] - assert isinstance(cmd_arg, str) - vals = tuple(int(n) for n in cmd_arg.split(_SEP_1) - if n) - if len(vals) > 0: - start_offset = min(vals if start_offset is None - else (vals + (start_offset,))) - cmd_args[cmd_args_idx] = vals - to_bump += [(cmd_name, cmd_args)] - bumped_offset = n_bump - (start_offset or 0) + bump_args: list[t_bumpable] = list(args) + val = None + if isinstance(cmd_args_idx, str): + for idx, arg in [t for t in enumerate(args) + if isinstance(t[1], str) + and t[1].startswith(cmd_args_idx)]: + assert isinstance(arg, str) + val = int(arg[:len(cmd_args_idx)]) + bump_args[idx] = {cmd_args_idx: val} + elif isinstance(cmd_args_idx, int)\ + and len(args) > cmd_args_idx: + val = int(args[cmd_args_idx]) + bump_args[cmd_args_idx] = val + if val is not None: + start_offset = (val if start_offset is None + else min(val, start_offset)) + to_bump += [(cmd_name, tuple(bump_args))] + offset_bump = n_bump - (start_offset or 0) for idx, candidate in enumerate(candidates): - cmd_name, cmd_args = to_bump[idx] + cmd_name, bumped_args = to_bump[idx] to_join = [cmd_name] - for cmd_arg in cmd_args: - if isinstance(cmd_arg, str): - to_join += [cmd_arg] + for bumpable in bumped_args: + if isinstance(bumpable, str): + to_join += [bumpable] + elif isinstance(bumpable, dict): + to_join += [k + str(v + offset_bump) + for k, v in bumpable.items()] else: - to_join += [_SEP_1.join(str(n + bumped_offset) - for n in cmd_arg) - or _SEP_1] + to_join += [str(bumpable + offset_bump)] candidate[1] = _SEP_0.join(to_join) + def replace_patterns(repl_code: str) -> None: + pseudo_space = ' ' + if repl_code[1] == ' ': + pseudo_space = repl_code[0] + repl_code = repl_code[2:] + for tok in repl_code.split(): + assert '=' in tok[1:], tok + left_a = tok[0] # just in case we want to replace a "=" … + left_b, right = tok[1:].split('=', maxsplit=1) + left = (left_a + left_b).replace(pseudo_space, ' ') + right = right.replace(pseudo_space, ' ') + candidates[:] = [[c[0], c[1].replace(left, right)] + for c in candidates] + try: if len(insert_args) == 1\ and insert_args[0].startswith(_TOK_FILE): @@ -269,22 +287,18 @@ class _Playbook: [_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 and insert_args[2] != '+': - bump_int_fields(int(insert_args[2])) + if len(insert_args) == 2: + kwargs_str, repl_code = ( + insert_args[1][:-1].split('[', maxsplit=1) + if insert_args[1].endswith(']') + else (insert_args[1], '')) + for kwarg in kwargs_str.split(): + if kwarg.startswith(_KW_RANGE): + crop_to_range(kwarg[len(_KW_RANGE):]) + elif kwarg.startswith(_KW_BUMP): + bump_int_fields(int(kwarg[len(_KW_BUMP):])) + if repl_code: + replace_patterns(repl_code) except (AssertionError, ValueError): assert False, (idx_str, insert_args) return [(c[0], c[1]) for c in candidates] @@ -511,7 +525,7 @@ class TestingClientTui(ClientTui): **kwargs ) -> None: def test_after(cmd_name: str, args: tuple[str, ...], ret) -> None: - assert cmd_name == _MARK_LOG, f'WANTED {_MARK_LOG} [{ret}]' + assert cmd_name == _MARK_LOG, (cmd_name, ret, args) win_ids, logged = ret fmt, time_str, msg_sans_time = logged.split(' ', maxsplit=2) msg_sans_time = fmt + ' ' + msg_sans_time diff --git a/src/tests/_timeout_retries.test b/src/tests/_timeout_retries.test index 7801288..35184f1 100644 --- a/src/tests/_timeout_retries.test +++ b/src/tests/_timeout_retries.test @@ -13,29 +13,29 @@ insert ./lib/trigger-ping × fake-testing-timeout log 1 $ connection_state set to: [failed to connect: FAKE TESTING TIMEOUT] -insert retry-in : + ? :§§ +insert retry-in × attempting-to-connected-plus-timeout -insert attempting-to-connected : + 6697=10000 WIN_IDS :2 -insert trigger-ping : + LOG_ID=1 SERVER_ID :0 +insert attempting-to-connected [6697=10000] +insert trigger-ping insert no-timely-pong × timeout-w-exponential-wait -insert attempting : + 6697 :OLD_PORT -log 1 $ port set to: [NEW_PORT] -insert fake-testing-timeout : + §§ :SECONDS +insert attempting [6697=(OLD_PORT)] +log 1 $ port set to: [(NEW_PORT)] +insert fake-testing-timeout × ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× # 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 : + 6697 :10003 +insert connect [6697=10003] # check increase of retry waits -insert timeout-w-exponential-wait : + OLD_PORT=10003 NEW_PORT=10002 SECONDS :1 -insert timeout-w-exponential-wait : + OLD_PORT=10002 NEW_PORT=10001 SECONDS :2 -insert timeout-w-exponential-wait : + OLD_PORT=10001 NEW_PORT=10000 SECONDS :4 +insert timeout-w-exponential-wait [(OLD_PORT)=10003 (NEW_PORT)=10002 (SECONDS)=1] +insert timeout-w-exponential-wait [(OLD_PORT)=10002 (NEW_PORT)=10001 (SECONDS)=2] +insert timeout-w-exponential-wait [(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 @@ -51,11 +51,11 @@ wait 2 > /reconnect insert attempting-to-connected-plus-timeout > /reconnect -insert attempting-to-connected : + 6697=10000 WIN_IDS :2 +insert attempting-to-connected [6697=10000] wait 2 # same way ensure retry chain wasn't solely blocked by being connected insert 001-to-usermode -insert cmd-disconnect :-1 -insert disconnect1 1: + WIN_IDS :2 +insert cmd-disconnect range=:-1 +insert disconnect1 range=1: wait 2 diff --git a/src/tests/caps.test b/src/tests/caps.test index 509fb65..b61da75 100644 --- a/src/tests/caps.test +++ b/src/tests/caps.test @@ -8,7 +8,7 @@ insert ./lib/cmd-disconnect insert ./lib/disconnect # for: disconnect1 insert ./lib/req-sasl -# for: get-sasl-plain, req-sasl +# for: caps-init-reply-then-set-nick-then-list, get-sasl-plain, req-sasl insert ./lib/servermsglogged insert ./lib/usermode insert ./lib/user-set-to @@ -18,9 +18,9 @@ insert usermode insert cmd-disconnect × disconnect-to-reconnect-1 -insert disconnect1 1: + WIN_IDS :2 +insert disconnect1 range=1: > /reconnect -insert attempting-to-connected : + WIN_IDS :2 +insert attempting-to-connected × disconnect-to-reconnect insert disconnect-to-reconnect-0 @@ -35,13 +35,13 @@ insert caps-neg-empty > /window 2 insert 001-setting-nick -insert disconnect-to-reconnect-0 :-1 +insert disconnect-to-reconnect-0 range=:-1 insert disconnect-to-reconnect-1 # check full, alphabetical processing of multi-line responses -insert cap-msg : + CAPMSG :* LS * :foo bar baz -insert cap-msg : + CAPMSG :* LS * :oof rab zab -insert cap-msg : + CAPMSG :* LS :ofo rba zba +insert cap-msg [% (CAP_MSG)=*%LS%*%:foo%bar%baz] +insert cap-msg [% (CAP_MSG)=*%LS%*%:oof%rab%zab] +insert cap-msg [% (CAP_MSG)=*%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: [] @@ -52,9 +52,7 @@ 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 : + CAPMSG :foo LIST * :foo rab oof -insert user-set-to :1 + USER_ID=me USERNICK :foo -insert cap-msg : + CAPMSG :foo LIST :zab rba +insert caps-init-reply-then-set-nick-then-list [% (INIT_REPLY)=LIST%*%:foo%rab%oof (CAP_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] @@ -65,11 +63,11 @@ log 1 > CAP :END insert disconnect-to-reconnect # check REQ for "sasl" (even if no PLAIN), denied -insert servermsglogged : + MSG ::*.?.net CAP * LS :foo bar sasl +insert servermsglogged [% (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: [] -insert req-sasl : + REPLY=NAK CAPLIST : +insert req-sasl [(REPLY)=NAK (CAP_LIST)=] log 1 > CAP :END insert disconnect-to-reconnect @@ -79,9 +77,9 @@ insert get-sasl-plain log 1 > CAP :END # check NEW, DEL working after CAP :END -insert cap-msg : + CAPMSG :foo NEW :foo bar=baz +insert cap-msg [% (CAP_MSG)=foo%NEW%:foo%bar=baz] log 1 $ caps:bar:data set to: [baz] log 1 $ caps:foo:data set to: [] -insert cap-msg : + CAPMSG :foo DEL :sasl foo +insert cap-msg [% (CAP_MSG)=foo%DEL%:sasl%foo] log 1 $ caps:foo deleted log 1 $ caps:sasl deleted diff --git a/src/tests/channels.test b/src/tests/channels.test index 0ff910b..ad79f87 100644 --- a/src/tests/channels.test +++ b/src/tests/channels.test @@ -10,10 +10,10 @@ insert ./lib/connect-to-connected insert ./lib/disconnect # for: disconnect0, disconnect1 insert ./lib/join-empty -# for: join-channel-0, join-channel-1, join-empty +# for: join-channel-0-cmd-to-list-residents, join-channel-0-0-cmd-to-ack, join-channel-0-1-list-residents join-channel-1-end-of-names, join-empty insert ./lib/no-handler insert ./lib/part -# for: exit-channel, part, parts-core, quit +# for: part, part-core, parts-no-msg-me, quit insert ./lib/privmsg insert ./lib/retry-in insert ./lib/servermsglogged @@ -21,36 +21,36 @@ insert ./lib/user-set-to insert ./lib/usermode × part-empty -insert part-no-msg-me : + USERIDS_CLEAR :emptied +insert part-no-msg-me [(USERIDS_CLEAR)=emptied] × privmsg-win -insert privmsg : + TARGET_WIN_ID=NUMBER TARGET :#ch_winNUMBER +insert privmsg [(TARGET_WIN_ID)=(WIN_ID) (TARGET)=#ch_win(WIN_ID)] × topic-set-to -log 1 $ channels:CHANNEL:topic set to: [Topic(what='NEWTOPIC', who=NickUserHost(nick='baz', user='~bazbaz', host='baz.baz'))] -log 4 $ baz!~bazbaz@baz.baz set topic: NEWTOPIC +log 1 $ channels:#ch_win(WIN_ID):topic set to: [Topic(what='(TOPIC)', who=NickUserHost(nick='baz', user='~bazbaz', host='baz.baz'))] +log 4 $ baz!~bazbaz@baz.baz set topic: (TOPIC) × reconnect > /reconnect -insert attempting-to-connected : + WIN_IDS :2,3,4 +insert attempting-to-connected [% log%2%$%CONNECTED=log%2,3,4%$%CONNECTED] insert caps-neg-empty insert 001-setting-nick log 1 > JOIN :#ch_win3 insert usermode -insert servermsglogged : + MSG ::foo!~foofoo@foo.foo JOIN #ch_win3 -insert join-empty 2: + NUMBER :3 +insert servermsglogged [% (MSG)=:foo!~foofoo@foo.foo%JOIN%#ch_win3] +insert join-empty range=2: [(WIN_ID)=3] × join-already-in -> /join TARGET -log LOG_WIN_ID $ already in that channel +> /join (TARGET) +log (WIN_ID) $ already in that channel × part-no-msg-other -insert part-no-msg 2:-1 + NUMBER=3 USERIDS_CLEAR :set to: REMAINING_IDS +insert part-no-msg range=2:-1 [% (WIN_ID)=3 (USERIDS_CLEAR)=set%to:%(REMAINING_IDS)] × set-prefix -insert servermsglogged : + MSG ::foo.bar.baz MODE #ch_win3 MODESET NICK -log 1 $ channels:#ch_win3:prefixes:PREFIX NEW_IDS -log 3 $ NICK VERB PREFIX +insert servermsglogged [% (MSG)=:foo.bar.baz%MODE%#ch_win3%(MODESET)%(NICK)] +log 1 $ channels:#ch_win3:prefixes:(PREFIX) (NEW_IDS) +log 3 $ (NICK) (VERB) (PREFIX) × ×-------------------------- @@ -64,173 +64,170 @@ insert 001-to-usermode log 2 $ not sending, since not in channel # check join with minimum context (no topic, no other users etc.) -insert join-empty : + NUMBER :3 +insert join-empty [(WIN_ID)=3] # check privmsg into channel from other window only works by direct addressing > msg_test1 log 2 # invalid prompt command: not prefixed by / -insert privmsg-win : + NUMBER=3 TXT :msg_test1 +insert privmsg-win [(WIN_ID)=3 (TXT)=msg_test1] # check from within channel window privmsg works directly and indirectly > /window 3 -insert privmsg-win : + NUMBER=3 TXT :msg_test2 +insert privmsg-win [(WIN_ID)=3 (TXT)=msg_test2] > msg_test3 -insert privmsg-win 1: + NUMBER=3 TXT :msg_test3 +insert privmsg-win range=1: [(WIN_ID)=3 (TXT)=msg_test3] # 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-empty : + NUMBER :3 +insert part-empty [(WIN_ID)=3] > /part log 3 $ not in that channel # check /join without argument joins channel previously joined in same window > /join -insert join-empty 1: + NUMBER :3 +insert join-empty range=1: [(WIN_ID)=3] # check cannot /join channel already joined, neither from its window nor from elsewhere -insert join-already-in : + LOG_WIN_ID=3 TARGET : -insert join-already-in : + LOG_WIN_ID=3 TARGET :#ch_win3 +insert join-already-in [(WIN_ID)=3 (TARGET)=] +insert join-already-in [(WIN_ID)=3 (TARGET)=#ch_win3] > /window 2 -insert join-already-in : + LOG_WIN_ID=2 TARGET :#ch_win3 +insert join-already-in [(WIN_ID)=2 (TARGET)=#ch_win3] # 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-empty : + NUMBER :3 -insert join-empty : + NUMBER :4 +insert part-empty [(WIN_ID)=3] +insert join-empty [(WIN_ID)=4] # check 353 also understood if using @ rather than = -insert join-empty : + NUMBER=3 = :@ -insert part-empty : + NUMBER :3 +insert join-empty [(WIN_ID)=3 ==@] +insert part-empty [(WIN_ID)=3] # check /join to, and part from, channel with one other user -insert join-channel-0 : + CHANNEL=#ch_win3 RESIDENT_NAMES :foo bar -insert user-set-to :1 + USER_ID=1 USERNICK :bar -insert join-channel-1 : + CHANNEL=#ch_win3 RESIDENT_IDS :[1], [me] -log 3 $ residents: bar, foo -insert part-no-msg-me : + NUMBER=3 USERIDS_CLEAR :set to: [1] +insert join-channel-0-cmd-to-list-residents [% (WIN_ID)=3 (RESIDENT_NAMES)=foo%bar] +insert user-set-to range=:1 [(USER_ID)=1 (USER_NICK)=bar] +insert join-channel-1-end-of-names [% (WIN_ID)=3 (RESIDENT_IDS)=[1],%[me] (RESIDENT_NICKS)=bar,%foo] +insert part-no-msg-me [% (WIN_ID)=3 (USERIDS_CLEAR)=set%to:%[1]] log 1 $ users:1 deleted # check /join into channel with many other users, with multi-line 353, and membership prefixes -insert join-channel-0 : + CHANNEL=#ch_win3 RESIDENT_NAMES :foo @baz +oof -insert user-set-to :1 + USER_ID=2 USERNICK :baz +insert join-channel-0-cmd-to-list-residents [% (WIN_ID)=3 (RESIDENT_NAMES)=foo%@baz%+oof] +insert user-set-to range=:1 [(USER_ID)=2 (USER_NICK)=baz] log 1 $ channels:#ch_win3:prefixes:@ set to: [2] -insert user-set-to :1 + USER_ID=3 USERNICK :oof +insert user-set-to range=:1 [(USER_ID)=3 (USER_NICK)=oof] log 1 $ channels:#ch_win3:prefixes:+ set to: [3] -insert servermsglogged : + MSG ::foo.bar.baz 353 foo = #ch_win3 :+rab zab -insert user-set-to :1 + USER_ID=4 USERNICK :rab +insert servermsglogged [% (MSG)=:foo.bar.baz%353%foo%=%#ch_win3%:+rab%zab] +insert user-set-to range=:1 [(USER_ID)=4 (USER_NICK)=rab] log 1 $ channels:#ch_win3:prefixes:+ set to: [3], [4] -insert user-set-to :1 + USER_ID=5 USERNICK :zab -insert join-channel-1 : + CHANNEL=#ch_win3 RESIDENT_IDS :[2], [3], [4], [5], [me] -log 3 $ residents: @baz, +oof, +rab, zab, foo +insert user-set-to range=:1 [(USER_ID)=5 (USER_NICK)=zab] +insert join-channel-1-end-of-names [% (WIN_ID)=3 (RESIDENT_IDS)=[2],%[3],%[4],%[5],%[me] (RESIDENT_NICKS)=@baz,%+oof,%+rab,%zab,%foo] # check server giving and taking membership prefixes -insert set-prefix : + MODESET=-o PREFIX=@ VERB=loses NICK=baz NEW_IDS :emptied -insert set-prefix : + MODESET=-v PREFIX=+ VERB=loses NICK=rab NEW_IDS :set to: [3] -insert set-prefix : + MODESET=-v PREFIX=+ VERB=loses NICK=oof NEW_IDS :emptied -insert set-prefix : + MODESET=+v PREFIX=+ VERB=gains NICK=oof NEW_IDS :set to: [3] -insert set-prefix : + MODESET=+o PREFIX=@ VERB=gains NICK=zab NEW_IDS :set to: [5] -insert set-prefix : + MODESET=+o PREFIX=@ VERB=gains NICK=baz NEW_IDS :set to: [2], [5] -insert set-prefix : + MODESET=+o PREFIX=@ VERB=gains NICK=foo NEW_IDS :set to: [2], [5], [me] +insert set-prefix [(MODESET)=-o (PREFIX)=@ (VERB)=loses (NICK)=baz (NEW_IDS)=emptied] +insert set-prefix [% (MODESET)=-v (PREFIX)=+ (VERB)=loses (NICK)=rab (NEW_IDS)=set%to:%[3]] +insert set-prefix [(MODESET)=-v (PREFIX)=+ (VERB)=loses (NICK)=oof (NEW_IDS)=emptied] +insert set-prefix [% (MODESET)=+v (PREFIX)=+ (VERB)=gains (NICK)=oof (NEW_IDS)=set%to:%[3]] +insert set-prefix [% (MODESET)=+o (PREFIX)=@ (VERB)=gains (NICK)=zab (NEW_IDS)=set%to:%[5]] +insert set-prefix [% (MODESET)=+o (PREFIX)=@ (VERB)=gains (NICK)=baz (NEW_IDS)=set%to:%[2],%[5]] +insert set-prefix [% (MODESET)=+o (PREFIX)=@ (VERB)=gains (NICK)=foo (NEW_IDS)=set%to:%[2],%[5],%[me]] # check server setting unknown modes towards users -insert servermsglogged : + MSG ::foo.bar.baz MODE #ch_win3 +a zab -insert no-handler -2: + ALERT_WIN_IDS=2,3,4 ? :for nickname setting channel mode: +a -insert servermsglogged : + MSG ::foo.bar.baz MODE #ch_win3 -b rab -insert no-handler -2: + ALERT_WIN_IDS=2,3,4 ? :for nickname setting channel mode: -b +insert servermsglogged [% (MSG)=:foo.bar.baz_MODE%#ch_win3%+a%zab] +insert no-handler range=-2: [% (ALERT_WIN_IDS)=2,3,4 (MSG)=:foo.bar.baz_MODE%#ch_win3%+a%zab] +insert servermsglogged [% (MSG)=:foo.bar.baz%MODE%#ch_win3%-b%rab] +insert no-handler range=-2: [% (ALERT_WIN_IDS)=2,3,4 (MSG)=for%nickname%setting%channel%mode:%-b] # check /join into channel with topic set > /window 4 -insert part-empty : + NUMBER :4 -insert join-channel-0-0 : + CHANNEL :#ch_win4 -insert servermsglogged : + MSG ::foo.bar.baz 332 foo #ch_win4 :foo bar baz -insert servermsglogged : + MSG ::foo.bar.baz 333 foo #ch_win4 baz!~bazbaz@OLD.baz.baz 1234567890 -insert topic-set-to : + baz.baz=OLD.baz.baz CHANNEL=#ch_win4 NEWTOPIC :foo bar baz -insert join-channel-0-1 : + CHANNEL=#ch_win4 RESIDENT_NAMES :foo baz -insert join-channel-1 : + CHANNEL=#ch_win4 RESIDENT_IDS :[2], [me] -log 4 $ residents: baz, foo +insert part-empty [(WIN_ID)=4] +insert join-channel-0-0-cmd-to-ack [(WIN_ID)=4] +insert servermsglogged [% (MSG)=:foo.bar.baz%332%foo%#ch_win4%:foo%bar%baz] +insert servermsglogged [% (MSG)=:foo.bar.baz%333%foo%#ch_win4%baz!~bazbaz@OLD.baz.baz%1234567890] +insert topic-set-to [% baz.baz=OLD.baz.baz (WIN_ID)=4 (TOPIC)=foo%bar%baz] +insert join-channel-0-1-list-residents [% (WIN_ID)=4 (RESIDENT_NAMES)=foo%baz] +insert join-channel-1-end-of-names [% (WIN_ID)=4 (RESIDENT_IDS)=[2],%[me] (RESIDENT_NICKS)=baz,%foo] # check _observed_ topic change _does_ affect users database, and … -insert servermsglogged : + MSG ::baz!~bazbaz@baz.baz TOPIC #ch_win4 :foo bar baz -insert user-set-to 1: + USER_ID=2 USERNAME=~bazbaz USERHOST :baz.baz +insert servermsglogged [% (MSG)=:baz!~bazbaz@baz.baz%TOPIC%#ch_win4%:foo%bar%baz] +insert user-set-to range=1: [(USER_ID)=2 (USER_USER)=~bazbaz (USER_HOST)=baz.baz] # … is echoed into channel window _if_ either content or setter change -insert topic-set-to : + CHANNEL=#ch_win4 NEWTOPIC :foo bar baz -insert servermsglogged : + MSG ::baz!~bazbaz@baz.baz TOPIC #ch_win4 :foo bar baz -insert servermsglogged : + MSG ::baz!~bazbaz@baz.baz TOPIC #ch_win4 :foo foo baz -insert topic-set-to : + CHANNEL=#ch_win4 NEWTOPIC :foo foo baz +insert topic-set-to [% (WIN_ID)=4 (TOPIC)=foo%bar%baz] +insert servermsglogged [% (MSG)=:baz!~bazbaz@baz.baz%TOPIC%#ch_win4%:foo%bar%baz] +insert servermsglogged [% (MSG)=:baz!~bazbaz@baz.baz%TOPIC%#ch_win4%:foo%foo%baz] +insert topic-set-to [% (WIN_ID)=4 (TOPIC)=foo%foo%baz] # check effects of other users' messages (PRIVMSG and NOTICE) -insert servermsglogged : + MSG ::baz!~bazbaz@baz.baz PRIVMSG #ch_win3 :msg_test3 msg_test4 +insert servermsglogged [% (MSG)=:baz!~bazbaz@baz.baz%PRIVMSG%#ch_win3%:msg_test3%msg_test4] log 3 < [@baz] msg_test3 msg_test4 -insert servermsglogged : + MSG ::oof!~oofoof@oof.oof NOTICE #ch_win3 :msg_test5 msg_test6 -insert user-set-to 1: + USER_ID=3 USERNAME=~oofoof USERHOST :oof.oof +insert servermsglogged [% (MSG)=:oof!~oofoof@oof.oof%NOTICE%#ch_win3%:msg_test5%msg_test6] +insert user-set-to range=1: [(USER_ID)=3 (USER_USER)=~oofoof (USER_HOST)=oof.oof] log 3 < (+oof) msg_test5 msg_test6 # check effect own PRIVMSG into channel, now that we got @ -insert privmsg-win : + NUMBER=3 foo=@foo TXT :msg_test7 +insert privmsg-win [(WIN_ID)=3 foo=@foo (TXT)=msg_test7] # check effect of server NOTICE to channel -insert servermsglogged : + MSG ::*.?.net NOTICE #ch_win3 :msg_test8 msg_test9 +insert servermsglogged [% (MSG)=:*.?.net%NOTICE%#ch_win3%:msg_test8%msg_test9] log 3 < (*.?.net) msg_test8 msg_test9 # check part of user visible, and of user NOT visible in other channel -insert part-no-msg-other : + USER_ID=2 NICK=baz REMAINING_IDS :[3], [4], [5], [me] +insert part-no-msg-other [% (USER_ID)=2 (NICK)=baz (REMAINING_IDS)=[3],%[4],%[5],%[me]] log 1 $ channels:#ch_win3:prefixes:@ set to: [5], [me] -insert part-no-msg-other : + USER_ID=3 NICK=oof REMAINING_IDS :[4], [5], [me] +insert part-no-msg-other [% (USER_ID)=3 (NICK)=oof (REMAINING_IDS)=[4],%[5],%[me]] log 1 $ channels:#ch_win3:prefixes:+ emptied log 1 $ users:3 deleted # check other-user part with exit message -insert part 2:4 + NICK=zab ARGS :#ch_win3 :goodbye -insert user-set-to 1: + USER_ID=5 USERNAME=~zabzab USERHOST :zab.zab -insert parts-core : + USER_ID=5 NICK=zab NUMBER=3 USERIDS_CLEAR=set§to:§[4],§[me] exitMSG=goodbye exitPREFIX=:§ § : +insert part range=2:4 [% (NICK)=zab (ARGS)=#ch_win3%:goodbye] +insert user-set-to range=1: [(USER_ID)=5 (USER_USER)=~zabzab (USER_HOST)=zab.zab] +insert part-core [% (USER_ID)=5 (NICK)=zab (WIN_ID)=3 (USERIDS_CLEAR)=set%to:%[4],%[me] (EXIT_MSG)=goodbye] log 1 $ channels:#ch_win3:prefixes:@ set to: [me] log 1 $ users:5 deleted # check re-join of user kept visible in other channel -insert servermsglogged : + MSG ::baz!~bazbaz@baz.baz JOIN :#ch_win3 +insert servermsglogged [% (MSG)=:baz!~bazbaz@baz.baz%JOIN%:#ch_win3] log 1 $ channels:#ch_win3:user_ids set to: [2], [4], [me] log 3 $ baz!~bazbaz@baz.baz joins # check re-join of user NOT kept visible in other channel -insert servermsglogged : + MSG ::oof!~oofoof@oof.oof JOIN :#ch_win3 -insert user-set-to : + USER_ID=6 USERNICK=oof USERNAME=~oofoof USERHOST :oof.oof +insert servermsglogged [% (MSG)=:oof!~oofoof@oof.oof%JOIN%:#ch_win3] +insert user-set-to [(USER_ID)=6 (USER_NICK)=oof (USER_USER)=~oofoof (USER_HOST)=oof.oof] log 1 $ channels:#ch_win3:user_ids set to: [2], [4], [6], [me] log 3 $ oof!~oofoof@oof.oof joins # check renaming of user communicated into all windows of channels they're in – be it others, or oneself -insert rename : + USER_ID=2 NUH=baz!~bazbaz@baz.baz NEWNICK :bazbaz -insert rename : + USER_ID=2 NUH=bazbaz!~bazbaz@baz.baz NEWNICK :baz -insert cmd-nick : + NUH=foo!~foofoo@foo.foo USER_ID=me NEWNICK :myself +insert rename [(USER_ID)=2 (NUH)=baz!~bazbaz@baz.baz (NICK)=bazbaz] +insert rename [(USER_ID)=2 (NUH)=bazbaz!~bazbaz@baz.baz (NICK)=baz] +insert cmd-nick [(NUH)=foo!~foofoo@foo.foo (USER_ID)=me (NICK)=myself] # reverting to foo to easen fragment re-use later on -insert cmd-nick : + NUH=myself!~foofoo@foo.foo USER_ID=me NEWNICK :foo +insert cmd-nick [(NUH)=myself!~foofoo@foo.foo (USER_ID)=me (NICK)=foo] # check QUIT affecting user in all their channels, removing them from DB -insert servermsglogged : + MSG ::baz!~bazbaz@baz.baz QUIT :Client Quit +insert servermsglogged [% (MSG)=:baz!~bazbaz@baz.baz%QUIT%:Client%Quit] log 1 $ users:2:exit_msg set to: [QClient Quit] log , $ baz!~bazbaz@baz.baz quits: Client Quit -insert quit : + USER_ID=2 NICK=baz NUMBER=3 REMAINING_IDS :[4], [6], [me] -insert quit : + USER_ID=2 NICK=baz NUMBER=4 REMAINING_IDS :[me] +insert quits [% (USER_ID)=2 (NICK)=baz (WIN_ID)=3 (USERIDS_CLEAR)=set%to:%[4],%[6],%[me]] +insert quits [% (USER_ID)=2 (NICK)=baz (WIN_ID)=4 (USERIDS_CLEAR)=set%to:%[me]] log 1 $ users:2 deleted # check effects of own QUIT while present in one channel -insert part-empty : + NUMBER :4 +insert part-empty [(WIN_ID)=4] insert cmd-disconnect-0 -insert quit : + USER_ID=me NICK=foo NUMBER=3 REMAINING_IDS :[4], [6] +insert quits [% (USER_ID)=me (NICK)=foo (WIN_ID)=3 (USERIDS_CLEAR)=set%to:%[4],%[6]] log 1 $ channels:#ch_win3:prefixes:@ emptied -insert cmd-disconnect-1 :-1 -insert disconnect1 : + WIN_IDS :2,3,4 +insert cmd-disconnect-1 range=:-1 +insert disconnect1 [% log%2%=log%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 + EXIT_MSG :broken: FAKE_IRC_CONN_ABORT_EXCEPTION -insert disconnect1 : + WIN_IDS :2,3,4 -insert retry-in : + ? :1 +insert disconnect0 range=:-1 [% (EXIT_MSG)=broken:%FAKE_IRC_CONN_ABORT_EXCEPTION] +insert disconnect1 [% log%2%=log%2,3,4%] +insert retry-in [(SECONDS)=1] insert reconnect diff --git a/src/tests/config.test b/src/tests/config.test index 0f4119c..53d5d09 100644 --- a/src/tests/config.test +++ b/src/tests/config.test @@ -2,7 +2,6 @@ insert ./lib/connect-w-password # for: connect-to-connected-w-password × ×--------------------------------------------------- - log 0 # Found config at tests/config.toml, reading … log 0 # Connecting: {'hostname': 'foo.bar.baz', 'nickname': 'foo', 'password': 'supersecret', 'username': 'foofoo', 'realname': 'foo foo', 'port': 1234, 'channels': ['#test', '##testtest']} -insert connect-to-connected-w-password 1: + 6697=1234 SECRET=supersecret WIN_IDS :2 +insert connect-to-connected-w-password range=1: [6697=1234 SECRET=supersecret] diff --git a/src/tests/connect_disconnect_legalities.test b/src/tests/connect_disconnect_legalities.test index c11de61..50d981b 100644 --- a/src/tests/connect_disconnect_legalities.test +++ b/src/tests/connect_disconnect_legalities.test @@ -21,8 +21,8 @@ insert 001-to-usermode log 1 $ not re-connecting since already connected # handle /disconnect on being connected -insert cmd-disconnect :-1 -insert disconnect1 1: + WIN_IDS :2 +insert cmd-disconnect range=:-1 +insert disconnect1 range=1: # fail to disconnect when already disconnected > /disconnect @@ -30,9 +30,9 @@ log 1 $ already disconnected and not attempting connect # succeed to re-connect after disconnect > /reconnect -insert attempting-to-connected : + WIN_IDS :2 +insert attempting-to-connected # allow /disconnect outside connection for auto-connect stops -insert error-to-disconnected : + §§§ :Closing link: (Connection timed out) -insert retry-in : + ? :1 +insert error-to-disconnected [% (EXIT_MSG)=Closing%link:%(Connection%timed%out)] +insert retry-in [(SECONDS)=1] insert disconnect-to-stop-auto-reconnect diff --git a/src/tests/error_disconnects.test b/src/tests/error_disconnects.test index 747640e..298cf1f 100644 --- a/src/tests/error_disconnects.test +++ b/src/tests/error_disconnects.test @@ -8,8 +8,12 @@ insert ./lib/retry-in × reconnect-error-logged > /reconnect -insert attempting-to-connected : + WIN_IDS :2 -insert error-to-disconnected : + §§§ :XXX +insert attempting-to-connected +insert error-to-disconnected [% (EXIT_MSG)=Closing%link:%((CAUSE))] + +× reconnect-error-logged-retry +insert reconnect-error-logged +insert retry-in [(SECONDS)=1] × ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× @@ -17,14 +21,11 @@ insert error-to-disconnected : + §§§ :XXX insert connect-to-connected # test default ERROR handling -insert error-to-disconnected : + §§§ :abc def ghi +insert error-to-disconnected [% (EXIT_MSG)=abc%def%ghi] # test ERROR regex (non-)matches > /window 1 -insert reconnect-error-logged : + XXX :Closing link: (this should not match) -insert reconnect-error-logged : + XXX :Closing link: (Connection timed out) -insert retry-in : + ? :1 -insert reconnect-error-logged : + XXX :closing Link: (connection timed out) -insert retry-in : + ? :1 -insert reconnect-error-logged : + XXX :Closing link: (Ping timeout: 240 seconds) -insert retry-in : + ? :1 +insert reconnect-error-logged [% (CAUSE)=this%should%not%match] +insert reconnect-error-logged-retry [% (CAUSE)=Connection%timed%out] +insert reconnect-error-logged-retry [% Closing%link=closing%Link (CAUSE)=connection%timed%out] +insert reconnect-error-logged-retry [% (CAUSE)=Ping%timeout:%240%seconds] diff --git a/src/tests/isupports.test b/src/tests/isupports.test index 468d086..c962cc2 100644 --- a/src/tests/isupports.test +++ b/src/tests/isupports.test @@ -7,28 +7,28 @@ 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 +# for: join-channel-0-cmd-to-list-residents, join-channel-1, join-empty insert ./lib/no-handler insert ./lib/servermsglogged insert ./lib/user-set-to × un-default -insert servermsglogged : + MSG ::foo.bar.baz 005 foo KEY=VALUE : -log 1 $ isupport:KEY set to: [VALUE] +insert servermsglogged [% (MSG)=:foo.bar.baz%005%foo%(KEY)=(VALUE)%:] +log 1 $ isupport:(KEY) set to: [(VALUE)] × un-defaults -insert un-default : + KEY=CHANTYPES VALUE :123=456 -insert un-default : + KEY=PREFIX VALUE :(ovE)@+= -insert un-default : + KEY=USERLEN VALUE :8 +insert un-default [(KEY)=CHANTYPES (VALUE)=123=456] +insert un-default [(KEY)=PREFIX (VALUE)=(ovE)@+=] +insert un-default [(KEY)=USERLEN (VALUE)=8] × join-and-hi -insert servermsglogged : + MSG ::NICKNAME!TO_CUTq@NICKNAME.NICKNAME JOIN :#ch_win9 -insert user-set-to : + USERHOST=NICKNAME.NICKNAME USERNAME=TO_CUTq USERNICK :NICKNAME -log 1 $ channels:#ch_win9:user_ids set to: RESIDENT_IDS, [me] -log 9 $ NICKNAME!TO_CUTq@NICKNAME.NICKNAME joins -insert servermsglogged : + MSG ::NICKNAME!~TO_CUT@NICKNAME.NICKNAME PRIVMSG #ch_win9 :hi -log 1 $ users:USER_ID:user set to: [~TO_CUT] -log 9 < [NICKNAME] hi +insert servermsglogged [% (MSG)=:(NICK)!(TO_CUT)q@(NICK).(NICK)%JOIN%:#ch_win9] +insert user-set-to [(USER_HOST)=(NICK).(NICK) (USER_USER)=(TO_CUT)q (USER_NICK)=(NICK)] +log 1 $ channels:#ch_win9:user_ids set to: (RESIDENT_IDS), [me] +log 9 $ (NICK)!(TO_CUT)q@(NICK).(NICK) joins +insert servermsglogged [% (MSG)=:(NICK)!~(TO_CUT)@(NICK).(NICK)%PRIVMSG%#ch_win9%:hi] +log 1 $ users:(USER_ID):user set to: [~(TO_CUT)] +log 9 < [(NICK)] hi × ×----------------------- @@ -41,66 +41,64 @@ insert caps-neg-empty insert 001-to-usermode # check setting of ISUPPORTs both with and without parameters, and last arg ignored -insert servermsglogged : + MSG ::foo.bar.baz 005 foo ABC=DEF GHI :are supported by this server +insert servermsglogged [% (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 : + MSG ::foo.bar.baz 005 foo MNO=PQR STU=VWX,YZ : +insert servermsglogged [% (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 : + MSG ::foo.bar.baz 005 foo -GHI DEF=MNO -STU :ignore me +insert servermsglogged [% (MSG)=:foo.bar.baz%005%foo%-GHI%DEF=MNO%-STU%:ignore%me] log 1 $ isupport:GHI deleted log 1 $ isupport:DEF set to: [MNO] log 1 $ isupport:STU deleted # check setting and un-setting of defaulty ISUPPORTs insert un-defaults -insert servermsglogged : + MSG ::foo.bar.baz 005 foo -CHANTYPES -PREFIX -USERLEN : -insert isupport-clear 1: +insert servermsglogged [% (MSG)=:foo.bar.baz%005%foo%-CHANTYPES%-PREFIX%-USERLEN%:] +insert isupport-clear range=1: # check disconnect on defaulty ISUPPORTs re-instates the respective defaults insert un-defaults > /window 1 -insert cmd-disconnect :-1 -insert disconnect1 1: + WIN_IDS :2 +insert cmd-disconnect range=:-1 +insert disconnect1 range=1: > /reconnect -insert attempting-to-connected : + WIN_IDS :2 +insert attempting-to-connected insert caps-neg-empty insert 001-to-usermode # check effect of CHANTYPES -insert join-empty : + NUMBER :3 -insert join-empty : + NUMBER=4 #ch_win :&ch_win -insert no-handler : + ALERT_WIN_IDS=2,3,4 ? :foo!~baz@baz.bar.foo JOIN $ch_winA -insert un-default : + KEY=CHANTYPES VALUE :#$% -insert join-empty : + NUMBER :5 -insert no-handler : + ALERT_WIN_IDS=2,3,4,5 ? :foo!~baz@baz.bar.foo JOIN &ch_winB -insert join-empty : + NUMBER=6 #ch_win :$ch_win +insert join-empty [(WIN_ID)=3] +insert join-empty [(WIN_ID)=4 #ch_win=&ch_win] +insert no-handler [% (ALERT_WIN_IDS)=2,3,4 (MSG)=foo!~baz@baz.bar.foo%JOIN%$ch_winA] +insert un-default [(KEY)=CHANTYPES (VALUE)=#$%] +insert join-empty [(WIN_ID)=5] +insert no-handler [% (ALERT_WIN_IDS)=2,3,4,5 (MSG)=foo!~baz@baz.bar.foo%JOIN%&ch_winB] +insert join-empty [(WIN_ID)=6 #ch_win=$ch_win] # test effect of PREFIX -insert join-channel-0 : + CHANNEL=#ch_win7 RESIDENT_NAMES :foo @bar +baz =quux -insert user-set-to :1 + USER_ID=1 USERNICK :bar +insert join-channel-0-cmd-to-list-residents [% (WIN_ID)=7 (RESIDENT_NAMES)=foo%@bar%+baz%=quux] +insert user-set-to range=:1 [(USER_ID)=1 (USER_NICK)=bar] log 1 $ channels:#ch_win7:prefixes:@ set to: [1] -insert user-set-to :1 + USER_ID=2 USERNICK :baz +insert user-set-to range=:1 [(USER_ID)=2 (USER_NICK)=baz] log 1 $ channels:#ch_win7:prefixes:+ set to: [2] -insert user-set-to :1 + USER_ID=3 USERNICK :=quux -insert join-channel-1 : + CHANNEL=#ch_win7 RESIDENT_IDS :[1], [2], [3], [me] -log 7 $ residents: @bar, +baz, =quux, foo -insert un-default : + KEY=PREFIX VALUE :(vE)+= -insert join-channel-0 : +0 CHANNEL=#ch_win8 RESIDENT_NAMES :foo @bar +baz =quux -insert user-set-to :1 + USER_ID=4 USERNICK :@bar +insert user-set-to range=:1 [(USER_ID)=3 (USER_NICK)==quux] +insert join-channel-1-end-of-names [% (WIN_ID)=7 (RESIDENT_IDS)=[1],%[2],%[3],%[me] (RESIDENT_NICKS)=@bar,%+baz,%=quux,%foo] +insert un-default [(KEY)=PREFIX (VALUE)=(vE)+=] +insert join-channel-0-cmd-to-list-residents [% (WIN_ID)=8 (RESIDENT_NAMES)=foo%@bar%+baz%=quux] +insert user-set-to range=:1 [(USER_ID)=4 (USER_NICK)=@bar] log 1 $ channels:#ch_win8:prefixes:+ set to: [2] -insert user-set-to :1 + USER_ID=5 USERNICK :quux +insert user-set-to range=:1 [(USER_ID)=5 (USER_NICK)=quux] log 1 $ channels:#ch_win8:prefixes:= set to: [5] -insert join-channel-1 : + CHANNEL=#ch_win8 RESIDENT_IDS :[2], [4], [5], [me] -log 8 $ residents: +baz, @bar, =quux, foo +insert join-channel-1-end-of-names [% (WIN_ID)=8 (RESIDENT_IDS)=[2],%[4],%[5],%[me] (RESIDENT_NICKS)=+baz,%@bar,%=quux,%foo] # test effect of USERLEN -insert join-empty : + NUMBER :9 -insert join-and-hi : + NICKNAME=user0 USER_ID=6 TO_CUT=foobarbaz RESIDENT_IDS :[6] -insert un-default : + KEY=USERLEN VALUE :8 -insert join-and-hi : + NICKNAME=user1 USER_ID=7 TO_CUT=foobarb RESIDENT_IDS :[6], [7] +insert join-empty [(WIN_ID)=9] +insert join-and-hi [(NICK)=user0 (USER_ID)=6 (TO_CUT)=foobarbaz (RESIDENT_IDS)=[6]] +insert un-default [(KEY)=USERLEN (VALUE)=8] +insert join-and-hi [% (NICK)=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 15c2879..3026824 100644 --- a/src/tests/lib/001-setting-nick +++ b/src/tests/lib/001-setting-nick @@ -2,5 +2,5 @@ insert ./lib/servermsglogged insert ./lib/user-set-to × 001-setting-nick -insert servermsglogged : + MSG ::foo.bar.baz 001 foo :Welcome to the foo.bar.baz network -insert user-set-to :1 + USER_ID=me USERNICK :foo +insert servermsglogged [_ (MSG)=:foo.bar.baz_001_foo_:Welcome_to_the_foo.bar.baz_network] +insert user-set-to range=:1 [(USER_ID)=me (USER_NICK)=foo] diff --git a/src/tests/lib/attempting b/src/tests/lib/attempting index 1b8f719..ee3e47c 100644 --- a/src/tests/lib/attempting +++ b/src/tests/lib/attempting @@ -5,4 +5,3 @@ log 2 $ - nickname: foo log 2 $ - realname: foo foo log 2 $ - username: foofoo log 2 $ - no password - diff --git a/src/tests/lib/attempting-to-connected b/src/tests/lib/attempting-to-connected index cf9d345..a22d1c1 100644 --- a/src/tests/lib/attempting-to-connected +++ b/src/tests/lib/attempting-to-connected @@ -4,4 +4,3 @@ insert ./lib/connected × attempting-to-connected insert attempting insert connected - diff --git a/src/tests/lib/cap-msg b/src/tests/lib/cap-msg index 36c1f27..27f6391 100644 --- a/src/tests/lib/cap-msg +++ b/src/tests/lib/cap-msg @@ -1,4 +1,4 @@ insert ./lib/servermsglogged × cap-msg -insert servermsglogged : +0 MSG ::*.?.net CAP CAPMSG +insert servermsglogged [% (MSG)=:*.?.net%CAP%(CAP_MSG)] diff --git a/src/tests/lib/caps-neg-empty b/src/tests/lib/caps-neg-empty index c7818c3..45a9214 100644 --- a/src/tests/lib/caps-neg-empty +++ b/src/tests/lib/caps-neg-empty @@ -1,7 +1,7 @@ insert ./lib/cap-msg × caps-neg-empty -insert cap-msg : +0 CAPMSG :* LS : +insert cap-msg [% (CAP_MSG)=*%LS%:] log 1 > CAP :LIST -insert cap-msg : +0 CAPMSG :* LIST : +insert cap-msg [% (CAP_MSG)=*%LIST%:] log 1 > CAP :END diff --git a/src/tests/lib/cmd-disconnect b/src/tests/lib/cmd-disconnect index 28e39b8..e9a467d 100644 --- a/src/tests/lib/cmd-disconnect +++ b/src/tests/lib/cmd-disconnect @@ -5,12 +5,12 @@ insert ./lib/error-to-disconnect × cmd-disconnect-0 > /disconnect log 1 > QUIT :ircplom says bye -insert servermsglogged : +0 MSG ::foo!~foofoo@foo.foo QUIT :Client Quit +insert servermsglogged [% (MSG)=:foo!~foofoo@foo.foo%QUIT%:Client%Quit] log 1 $ users:me:exit_msg set to: [QClient Quit] log , $ foo!~foofoo@foo.foo quits: Client Quit × cmd-disconnect-1 -insert error-to-disconnect : +0 ? ::Closing link: foo.foo (Client Quit) +insert error-to-disconnect [% (EXIT_MSG)=:Closing%link:%foo.foo%(Client%Quit)] × cmd-disconnect insert cmd-disconnect-0 diff --git a/src/tests/lib/cmd-nick b/src/tests/lib/cmd-nick index 8c32aa2..b58f792 100644 --- a/src/tests/lib/cmd-nick +++ b/src/tests/lib/cmd-nick @@ -1,12 +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 +insert servermsglogged [% (MSG)=:(NUH)%NICK%:(NICK)] +log 1 $ users:(USER_ID):nick set to: [(NICK)] +log 3,4 $ (NUH) renames (NICK) × cmd-nick -> /nick NEWNICK -log 1 > NICK :NEWNICK -insert rename : +0 -log 1 $ nick_wanted set to: [NEWNICK] +> /nick (NICK) +log 1 > NICK :(NICK) +insert rename +log 1 $ nick_wanted set to: [(NICK)] diff --git a/src/tests/lib/connect b/src/tests/lib/connect index 527d62a..fe1275e 100644 --- a/src/tests/lib/connect +++ b/src/tests/lib/connect @@ -2,7 +2,7 @@ insert ./lib/isupport-clear × connect > /connect foo.bar.baz:6697 foo foo foo:foofoo -insert isupport-clear 1: +1 +insert isupport-clear range=1: log , $ NOT CONNECTED log 1 $ hostname set to: [foo.bar.baz] log 1 $ port set to: [6697] diff --git a/src/tests/lib/connect-to-connected b/src/tests/lib/connect-to-connected index 8d9892a..2739ff0 100644 --- a/src/tests/lib/connect-to-connected +++ b/src/tests/lib/connect-to-connected @@ -3,4 +3,4 @@ insert ./lib/connect × connect-to-connected insert connect -insert attempting-to-connected : + WIN_IDS :2 +insert attempting-to-connected diff --git a/src/tests/lib/connect-w-password b/src/tests/lib/connect-w-password index e194342..4c57186 100644 --- a/src/tests/lib/connect-w-password +++ b/src/tests/lib/connect-w-password @@ -4,11 +4,11 @@ insert ./lib/connected × connect-w-password > /connect foo.bar.baz:6697 foo:SECRET foo foo:foofoo -insert connect 1: +insert connect range=1: log 1 $ password set to: [SECRET] × attempting-to-connected-w-password -insert attempting :-1 +insert attempting range=:-1 log 2 $ - password: SECRET insert connected diff --git a/src/tests/lib/connected b/src/tests/lib/connected index 45ae99c..5db8b5e 100644 --- a/src/tests/lib/connected +++ b/src/tests/lib/connected @@ -1,6 +1,6 @@ × connected log 1 $ connection_state set to: [connected] -log WIN_IDS $ CONNECTED +log 2 $ CONNECTED log 1 > CAP LS :302 log 1 > USER foofoo 0 * :foo foo log 1 > NICK :foo diff --git a/src/tests/lib/disconnect b/src/tests/lib/disconnect index a7f629e..618b853 100644 --- a/src/tests/lib/disconnect +++ b/src/tests/lib/disconnect @@ -1,12 +1,12 @@ insert ./lib/isupport-clear × disconnect0 -log 1 $ connection_state set to: [EXIT_MSG] -insert isupport-clear : +1 +log 1 $ connection_state set to: [(EXIT_MSG)] +insert isupport-clear log 1 $ caps cleared × disconnect1 log 1 $ channels cleared log 1 $ connection_state set to: [] -log WIN_IDS $ NOT CONNECTED +log 2 $ NOT CONNECTED log 1 $ users cleared diff --git a/src/tests/lib/error-to-disconnect b/src/tests/lib/error-to-disconnect index d2dc965..0de41e1 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 : + MSG :ERROR :? -insert disconnect0 : + EXIT_MSG :? +insert servermsglogged [% (MSG)=ERROR%:(EXIT_MSG)] +insert disconnect0 diff --git a/src/tests/lib/error-to-disconnected b/src/tests/lib/error-to-disconnected index 0dec882..36d6058 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 + ? :§§§ -insert disconnect1 1:-1 + WIN_IDS :2 +insert error-to-disconnect range=:-1 +insert disconnect1 range=1:-1 diff --git a/src/tests/lib/join-empty b/src/tests/lib/join-empty index 69a94cc..3d7f823 100644 --- a/src/tests/lib/join-empty +++ b/src/tests/lib/join-empty @@ -1,22 +1,22 @@ insert ./lib/servermsglogged -× join-channel-0-0 -> /join CHANNEL -log 1 > JOIN :CHANNEL -insert servermsglogged : + MSG ::foo!~foofoo@foo.foo JOIN :CHANNEL +× join-channel-0-0-cmd-to-ack +> /join #ch_win(WIN_ID) +log 1 > JOIN :#ch_win(WIN_ID) +insert servermsglogged [% (MSG)=:foo!~foofoo@foo.foo%JOIN%:#ch_win(WIN_ID)] -× join-channel-0-1 -insert servermsglogged : + MSG ::foo.bar.baz 353 foo = CHANNEL :RESIDENT_NAMES +× join-channel-0-1-list-residents +insert servermsglogged [% (MSG)=:foo.bar.baz%353%foo%=%#ch_win(WIN_ID)%:(RESIDENT_NAMES)] -× join-channel-0 -insert join-channel-0-0 -insert join-channel-0-1 +× join-channel-0-cmd-to-list-residents +insert join-channel-0-0-cmd-to-ack +insert join-channel-0-1-list-residents -× join-channel-1 -insert servermsglogged : + MSG ::foo.bar.baz 366 foo CHANNEL :End of /NAMES list. -log 1 $ channels:CHANNEL:user_ids set to: RESIDENT_IDS +× join-channel-1-end-of-names +insert servermsglogged [% (MSG)=:foo.bar.baz%366%foo%#ch_win(WIN_ID)%:End%of%/NAMES%list.] +log 1 $ channels:#ch_win(WIN_ID):user_ids set to: (RESIDENT_IDS) +log (WIN_ID) $ residents: (RESIDENT_NICKS) × join-empty -insert join-channel-0 : + CHANNEL=#ch_winNUMBER RESIDENT_NAMES :foo -insert join-channel-1 : + CHANNEL=#ch_winNUMBER RESIDENT_IDS :[me] -log NUMBER $ residents: foo +insert join-channel-0-cmd-to-list-residents [(RESIDENT_NAMES)=foo] +insert join-channel-1-end-of-names [(RESIDENT_IDS)=[me] (RESIDENT_NICKS)=foo] diff --git a/src/tests/lib/no-handler b/src/tests/lib/no-handler index 2a2a896..8d53e5b 100644 --- a/src/tests/lib/no-handler +++ b/src/tests/lib/no-handler @@ -1,6 +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: ? +insert servermsglogged +log 1 $ No handler implemented for: (MSG) +log (ALERT_WIN_IDS) $ No handler implemented for: (MSG) diff --git a/src/tests/lib/no-timely-pong b/src/tests/lib/no-timely-pong index 3fd4aa6..6061616 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 + EXIT_MSG :broken: no timely PONG from server -insert disconnect1 1:-1 + WIN_IDS :2 -insert retry-in : + ? :1 +insert disconnect0 range=:-1 [% (EXIT_MSG)=broken:%no%timely%PONG%from%server] +insert disconnect1 range=1:-1 +insert retry-in [(SECONDS)=1] diff --git a/src/tests/lib/part b/src/tests/lib/part index f0f07d4..ddfc59c 100644 --- a/src/tests/lib/part +++ b/src/tests/lib/part @@ -1,29 +1,23 @@ insert ./lib/servermsglogged -× exit-channel -log 1 $ channels:#ch_winNUMBER:exits:USER_ID set to: [exitTYPEexitMSG] -log 1 $ channels:#ch_winNUMBER:user_ids USERIDS_CLEAR -log NUMBER $ NICK!~NICKNICK@NICK.NICK exitDESCexitPREFIXexitMSG -log 1 $ channels:#ch_winNUMBER:exits:USER_ID deleted +× part-core +log 1 $ channels:#ch_win(WIN_ID):exits:(USER_ID) set to: [P(EXIT_MSG)] +log 1 $ channels:#ch_win(WIN_ID):user_ids (USERIDS_CLEAR) +log (WIN_ID) $ (NICK)!~(NICK)(NICK)@(NICK).(NICK) parts: (EXIT_MSG) +log 1 $ channels:#ch_win(WIN_ID):exits:(USER_ID) deleted -× parts-core -insert exit-channel : + exitTYPE=P exitDESC :parts +× quits +insert part-core [% parts=quits P(EXIT_MSG)=Q(EXIT_MSG) (EXIT_MSG)=Client%Quit] × part > /part -log 1 > PART :#ch_winNUMBER -insert servermsglogged : + MSG ::NICK!~NICKNICK@NICK.NICK PART ARGS -insert parts-core : + exitPREFIX= exitMSG : -log 1 $ channels:#ch_winNUMBER deleted +log 1 > PART :#ch_win(WIN_ID) +insert servermsglogged [% (MSG)=:(NICK)!~(NICK)(NICK)@(NICK).(NICK)%PART%(ARGS)] +insert part-core [% (EXIT_MSG)= parts:%=parts] +log 1 $ channels:#ch_win(WIN_ID) deleted × part-no-msg -insert part : + ARGS ::#ch_winNUMBER +insert part [(ARGS)=:#ch_win(WIN_ID)] × part-no-msg-me -insert part-no-msg : + USER_ID=me NICK :foo - -× quits -insert exit-channel : + exitTYPE=Q exitDESC=quits exitPREFIX=:§ exitMSG=Client§Quit § : - -× quit -insert quits : + USERIDS_CLEAR=set§to:§REMAINING_IDS § : +insert part-no-msg [(USER_ID)=me (NICK)=foo] diff --git a/src/tests/lib/pingpong b/src/tests/lib/pingpong index 5737b06..d6351fa 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 [% (MSG)=PING%:?] log 1 > PONG :? diff --git a/src/tests/lib/privmsg b/src/tests/lib/privmsg index ed7f123..eb9bdc3 100644 --- a/src/tests/lib/privmsg +++ b/src/tests/lib/privmsg @@ -1,4 +1,4 @@ × privmsg -> /privmsg TARGET TXT -log 1 > PRIVMSG TARGET :TXT -log TARGET_WIN_ID > [foo] TXT +> /privmsg (TARGET) (TXT) +log 1 > PRIVMSG (TARGET) :(TXT) +log (TARGET_WIN_ID) > [foo] (TXT) diff --git a/src/tests/lib/req-sasl b/src/tests/lib/req-sasl index 4006cdb..12f591b 100644 --- a/src/tests/lib/req-sasl +++ b/src/tests/lib/req-sasl @@ -1,15 +1,18 @@ insert ./lib/cap-msg insert ./lib/user-set-to +× caps-init-reply-then-set-nick-then-list +insert cap-msg [% (CAP_MSG)=foo%(INIT_REPLY)] +insert user-set-to range=:1 [(USER_ID)=me (USER_NICK)=foo] +insert cap-msg [% (CAP_MSG)=foo%LIST%:(CAP_LIST)] + × req-sasl log 1 > CAP REQ :sasl log 1 > CAP :LIST -insert cap-msg : +0 CAPMSG :foo REPLY :sasl -insert user-set-to :1 + USER_ID=me USERNICK :foo -insert cap-msg : +0 CAPMSG :foo LIST :CAPLIST +insert caps-init-reply-then-set-nick-then-list [% (INIT_REPLY)=(REPLY)%:sasl] × get-sasl-plain -insert cap-msg : + CAPMSG :* LS :sasl=PLAIN +insert cap-msg [% (CAP_MSG)=*%LS%:sasl=PLAIN] log 1 $ caps:sasl:data set to: [PLAIN] -insert req-sasl : + REPLY=ACK CAPLIST :sasl +insert req-sasl [(REPLY)=ACK (CAP_LIST)=sasl] log 1 $ caps:sasl:enabled set to: [True] diff --git a/src/tests/lib/retry-in b/src/tests/lib/retry-in index 316bffc..6211496 100644 --- a/src/tests/lib/retry-in +++ b/src/tests/lib/retry-in @@ -1,2 +1,2 @@ × retry-in -log 1 $ will retry connecting in ? seconds +log 1 $ will retry connecting in (SECONDS) seconds diff --git a/src/tests/lib/servermsglogged b/src/tests/lib/servermsglogged index 1899b7a..c2f199e 100644 --- a/src/tests/lib/servermsglogged +++ b/src/tests/lib/servermsglogged @@ -1,6 +1,3 @@ -× servermsglogged-core -servermsg SERVER_ID MSG -log WIN_ID < MSG - × servermsglogged -insert servermsglogged-core : + SERVER_ID=0 WIN_ID :1 +servermsg 0 (MSG) +log 1 < (MSG) diff --git a/src/tests/lib/servernotice b/src/tests/lib/servernotice index 65fffb3..06787d2 100644 --- a/src/tests/lib/servernotice +++ b/src/tests/lib/servernotice @@ -1,6 +1,5 @@ insert ./lib/servermsglogged × servernotice -insert servermsglogged : +0 MSG ::*.?.net NOTICE * :XXX -log 2 < (server) XXX - +insert servermsglogged [% (MSG)=:*.?.net%NOTICE%*%:(NOTICE)] +log 2 < (server) (NOTICE) diff --git a/src/tests/lib/trigger-ping b/src/tests/lib/trigger-ping index 9000abd..381ce19 100644 --- a/src/tests/lib/trigger-ping +++ b/src/tests/lib/trigger-ping @@ -1,3 +1,3 @@ × trigger-ping -servermsg SERVER_ID timeout -log LOG_ID > PING :what's up? +servermsg 0 timeout +log 1 > PING :what's up? diff --git a/src/tests/lib/user-set-to b/src/tests/lib/user-set-to index 4847422..44f9e3e 100644 --- a/src/tests/lib/user-set-to +++ b/src/tests/lib/user-set-to @@ -1,5 +1,5 @@ × user-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] +log 1 $ users:(USER_ID):nick set to: [(USER_NICK)] +log 1 $ users:(USER_ID):user set to: [(USER_USER)] +log 1 $ users:(USER_ID):host set to: [(USER_HOST)] diff --git a/src/tests/lib/usermode b/src/tests/lib/usermode index 958248e..5da4601 100644 --- a/src/tests/lib/usermode +++ b/src/tests/lib/usermode @@ -2,6 +2,6 @@ insert ./lib/servermsglogged insert ./lib/user-set-to × usermode -insert servermsglogged : + MSG ::foo!~foofoo@foo.foo MODE foo +ABC -insert user-set-to 1: + USER_ID=me USERNAME=~foofoo USERHOST :foo.foo +insert servermsglogged [% (MSG)=:foo!~foofoo@foo.foo%MODE%foo%+ABC] +insert user-set-to range=1: [(USER_ID)=me (USER_USER)=~foofoo (USER_HOST)=foo.foo] log 1 $ users:me:modes set to: [ABC] diff --git a/src/tests/pingpong.test b/src/tests/pingpong.test index 171c4bc..3ca43eb 100644 --- a/src/tests/pingpong.test +++ b/src/tests/pingpong.test @@ -8,11 +8,11 @@ insert ./lib/trigger-ping × full-timeout # ping on timeout, go on as normal if PONG received -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... +insert trigger-ping +insert servermsglogged [% (MSG)=:*.?.net%PONG%*.?.net%:what's%up?] +insert servernotice [% (NOTICE)=Looking%up%your%ident...] # another timeout instead of pong? disconnect -insert trigger-ping : +0 SERVER_ID=0 LOG_ID :1 +insert trigger-ping insert no-timely-pong × ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× @@ -27,5 +27,5 @@ insert full-timeout # on re-connect, ensure timer cleared, i.e. only 2nd time-out will disconnect > /window 1 > /reconnect -insert attempting-to-connected : + WIN_IDS :2 +insert attempting-to-connected insert full-timeout diff --git a/src/tests/test.test b/src/tests/test.test index 3dca973..b747218 100644 --- a/src/tests/test.test +++ b/src/tests/test.test @@ -10,10 +10,9 @@ 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 +# for: join-channel-0-cmd-to-list-residents, join-channel-1-end-of-names insert ./lib/part -# for: part-no-msg-me, quit, quits +# for: part-no-msg-me, quits insert ./lib/pingpong insert ./lib/privmsg insert ./lib/req-sasl @@ -24,32 +23,32 @@ insert ./lib/servernotice insert ./lib/user-set-to × nick-increment -insert servermsglogged : + MSG ::*.?.net 433 * NAME_A :Nickname already in use +insert servermsglogged [% (MSG)=:*.?.net%433%*%(NICK_OLD)%:Nickname%already%in%use] log 1 $ nickname already in use, trying increment -log 1 > NICK :NAME_B +log 1 > NICK :(NICK_NEW) × conn_init_1 # expect some NOTICE and PING to process/reply during initiation -insert servernotice : + XXX :*** Looking up your ident... -insert servernotice : + XXX :*** Looking up your hostname... -insert servernotice : + XXX :*** Found your hostname (foo.foo) +insert servernotice [% (NOTICE)=***%Looking%up%your%ident...] +insert servernotice [% (NOTICE)=***%Looking%up%your%hostname...] +insert servernotice [% (NOTICE)=***%Found%your%hostname%(foo.foo)] insert ping-pong # handle 433 -insert nick-increment : + NAME_A=foo NAME_B :foo0 -insert nick-increment : + NAME_A=foo0 NAME_B :foo1 +insert nick-increment [(NICK_OLD)=foo (NICK_NEW)=foo0] +insert nick-increment [(NICK_OLD)=foo0 (NICK_NEW)=foo1] # collect server capabilities -insert cap-msg : + CAPMSG :* LS : foo bar sasl=IGNORE baz cap-notify +insert cap-msg [% (CAP_MSG)=*%LS%:%foo%bar%sasl=IGNORE%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: [IGNORE] -insert req-sasl : + foo=foo1 REPLY=ACK CAPLIST :cap-notify sasl +insert req-sasl [% foo=foo1 (REPLY)=ACK (CAP_LIST)=cap-notify%sasl] log 1 $ caps:cap-notify:enabled set to: [True] log 1 $ caps:sasl:enabled set to: [True] @@ -61,38 +60,39 @@ log 1 > CAP :END × conn_init_2 # of all pre-MOTD greeting messages, only process isupports -insert servermsglogged : + MSG ::foo.bar.baz 001 foo1 :Welcome to the foo.bar.baz network -insert servermsglogged : + MSG ::foo.bar.baz 002 foo1 :Your host is foo.bar.baz -insert servermsglogged : + MSG ::foo.bar.baz 003 foo1 :This server was created Jan 1 2020 -insert servermsglogged : + MSG ::foo.bar.baz 004 foo1 foo.bar.baz ircserver-1.0 abc def ghi -insert servermsglogged : + MSG ::foo.bar.baz 005 foo1 ABC=DEF GHI :are supported by this server +insert servermsglogged [% (MSG)=:foo.bar.baz%001%foo1%:Welcome%to%the%foo.bar.baz%network] +insert servermsglogged [% (MSG)=:foo.bar.baz%002%foo1%:Your%host%is%foo.bar.baz] +insert servermsglogged [% (MSG)=:foo.bar.baz%003%foo1%:This%server%was%created%Jan%1%2020] + +insert servermsglogged [% (MSG)=:foo.bar.baz%004%foo1%foo.bar.baz%ircserver-1.0%abc%def%ghi] +insert servermsglogged [% (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 : + MSG ::foo.bar.baz 251 foo1 :There are 10 users and 1000 invisible on 5 servers -insert servermsglogged : + MSG ::foo.bar.baz 252 foo1 7 :IRC Operators online -insert servermsglogged : + MSG ::foo.bar.baz 253 foo1 4 :unknown connection(s) -insert servermsglogged : + MSG ::foo.bar.baz 254 foo1 800 :channels formed -insert servermsglogged : + MSG ::foo.bar.baz 255 foo1 :I have 100 clients and 1 serveres -insert servermsglogged : + MSG ::foo.bar.baz 265 foo1 100 150 :Current local users 100, max 150 -insert servermsglogged : + MSG ::foo.bar.baz 266 foo1 1010 1050 :Current global users 1010, max 1050 -insert servermsglogged : + MSG ::foo.bar.baz 250 foo1 :Highest connection count: 151 (150 clients) (1080 connections received) +insert servermsglogged [% (MSG)=:foo.bar.baz%251%foo1%:There%are%10%users%and%1000%invisible%on%5%servers] +insert servermsglogged [% (MSG)=:foo.bar.baz%252%foo1%7%:IRC%Operators%online] +insert servermsglogged [% (MSG)=:foo.bar.baz%253%foo1%4%:unknown%connection(s)] +insert servermsglogged [% (MSG)=:foo.bar.baz%254%foo1%800%:channels%formed] +insert servermsglogged [% (MSG)=:foo.bar.baz%255%foo1%:I%have%100%clients%and%1%serveres] +insert servermsglogged [% (MSG)=:foo.bar.baz%265%foo1%100%150%:Current%local%users%100,%max%150] +insert servermsglogged [% (MSG)=:foo.bar.baz%266%foo1%1010%1050%:Current%global%users%1010,%max%1050] +insert servermsglogged [% (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 : + MSG ::foo.bar.baz 375 foo1 :- foo.bar.baz Message of the Day - -insert servermsglogged : + MSG ::foo.bar.baz 372 foo1 :- Howdy! - -insert servermsglogged : + MSG ::foo.bar.baz 372 foo1 :- Welcome! - -insert servermsglogged : + MSG ::foo.bar.baz 372 foo1 :- (to this server) - -insert servermsglogged : + MSG ::foo.bar.baz 376 foo1 :End of /MOTD command +insert servermsglogged [% (MSG)=:foo.bar.baz%375%foo1%:-%foo.bar.baz%Message%of%the%Day%-] +insert servermsglogged [% (MSG)=:foo.bar.baz%372%foo1%:-%Howdy!%-] +insert servermsglogged [% (MSG)=:foo.bar.baz%372%foo1%:-%Welcome!%-] +insert servermsglogged [% (MSG)=:foo.bar.baz%372%foo1%:-%(to%this%server)%-] +insert servermsglogged [% (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 : + MSG ::foo1 MODE foo1 :+Ziw +insert servermsglogged [% (MSG)=:foo1%MODE%foo1%:+Ziw] log 1 $ users:me:modes set to: [Ziw] # handle bot query NOTICE -insert servermsglogged : + MSG ::SaslServ!SaslServ@services.bar.baz NOTICE foo1 :Last login from ~foo@foo.foo on Jan 1 22:00:00 2021 +0000. +insert servermsglogged [% (MSG)=:SaslServ!SaslServ@services.bar.baz%NOTICE%foo1%:Last%login%from%~foo@foo.foo%on%Jan%1%22:00:00%2021%+0000.] log 3 < (SaslServ) Last login from ~foo@foo.foo on Jan 1 22:00:00 2021 +0000. @@ -100,74 +100,69 @@ log 3 < (SaslServ) Last login from ~foo@foo.foo on Jan 1 22:00:00 2021 +0000. × during_conn # test recoverable 432 -insert cmd-nick :2 + NEWNICK :@foo -insert servermsglogged : + MSG ::*.?.net 432 foo1 @foo :Erroneous nickname +insert cmd-nick range=:2 [(NICK)=@foo] +insert servermsglogged [% (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 :4 + NUH=foo1!~foofoo@foo.foo NEWNICK :foo +insert cmd-nick range=:4 [(NUH)=foo1!~foofoo@foo.foo (NICK)=foo] log 1 $ users:me:user set to: [~foofoo] log 1 $ users:me:host set to: [foo.foo] -insert cmd-nick 4:-2 + USER_ID=me NEWNICK :foo -log rename_win_ids $ foo1!~foofoo@foo.foo renames foo +insert cmd-nick range=4:-2 [(USER_ID)=me (NICK)=foo] +log 3 $ foo1!~foofoo@foo.foo renames foo # join channel with other user -insert join-channel-0 : + CHANNEL=#ch_win4 RESIDENT_NAMES :foo @baz -insert user-set-to :1 + USER_ID=1 USERNICK :baz +insert join-channel-0-cmd-to-list-residents [% (WIN_ID)=4 (RESIDENT_NAMES)=foo%@baz] +insert user-set-to range=:1 [(USER_ID)=1 (USER_NICK)=baz] log 1 $ channels:#ch_win4:prefixes:@ set to: [1] -insert join-channel-1 : + CHANNEL=#ch_win4 RESIDENT_IDS :[1], [me] -log 4 $ residents: @baz, foo +insert join-channel-1-end-of-names [% (WIN_ID)=4 (RESIDENT_IDS)=[1],%[me] (RESIDENT_NICKS)=@baz,%foo] # process non-self channel JOIN -insert servermsglogged : + MSG ::bar!~barbar@bar.bar JOIN :#ch_win4 -insert user-set-to : + USER_ID=2 USERNICK=bar USERNAME=~barbar USERHOST :bar.bar +insert servermsglogged [% (MSG)=:bar!~barbar@bar.bar%JOIN%:#ch_win4] +insert user-set-to [(USER_ID)=2 (USER_NICK)=bar (USER_USER)=~barbar (USER_HOST)=bar.bar] log 1 $ channels:#ch_win4:user_ids set to: [1], [2], [me] log 4 $ bar!~barbar@bar.bar joins # join second channel with partial residents identity to compare distribution of resident-specific messages -insert join-channel-0 : + CHANNEL=#ch_win5 RESIDENT_NAMES :foo bar -insert join-channel-1 : + CHANNEL=#ch_win5 RESIDENT_IDS :[2], [me] -log 5 $ residents: bar, foo +insert join-channel-0-cmd-to-list-residents [% (WIN_ID)=5 (RESIDENT_NAMES)=foo%bar] +insert join-channel-1-end-of-names [% (WIN_ID)=5 (RESIDENT_IDS)=[2],%[me] (RESIDENT_NICKS)=bar,%foo] # handle query window with known user -insert servermsglogged : + MSG ::bar!~barbar@bar.bar PRIVMSG foo :hi there +insert servermsglogged [% (MSG)=:bar!~barbar@bar.bar%PRIVMSG%foo%:hi%there] log 6 < [bar] hi there -insert privmsg : + TARGET_WIN_ID=6 TARGET=bar TXT :hello, how is it going -insert servermsglogged : + MSG ::bar!~barbar@bar.bar PRIVMSG foo :fine! +insert privmsg [% (TARGET_WIN_ID)=6 (TARGET)=bar (TXT)=hello,%how%is%it%going] +insert servermsglogged [% (MSG)=:bar!~barbar@bar.bar%PRIVMSG%foo%:fine!] log 6 < [bar] fine! # handle failure to query absent user -insert privmsg : + TARGET_WIN_ID=7 TARGET=barbar TXT :hello! -insert servermsglogged : + MSG ::*.?.net 401 foo barbar :No such nick/channel +insert privmsg [(TARGET_WIN_ID)=7 (TARGET)=barbar (TXT)=hello!] +insert servermsglogged [% (MSG)=:*.?.net%401%foo%barbar%:No%such%nick/channel] log 7 $ barbar not online # handle non-self renaming, even into window of previously not found target -insert servermsglogged : + MSG ::bar!~barbar@bar.bar NICK :barbar +insert servermsglogged [% (MSG)=:bar!~barbar@bar.bar%NICK%:barbar] log 1 $ users:2:nick set to: [barbar] log 4,5,6,7 $ bar!~barbar@bar.bar renames barbar # handle non-self QUIT -insert servermsglogged : + MSG ::barbar!~barbar@bar.bar QUIT :Client Quit +insert servermsglogged [% (MSG)=:barbar!~barbar@bar.bar%QUIT%:Client%Quit] log 1 $ users:2:exit_msg set to: [QClient Quit] log 6,7 $ barbar!~barbar@bar.bar quits: Client Quit -insert quit : + USER_ID=2 NICK=bar NUMBER=4 bar!=barbar! REMAINING_IDS :[1], [me] -insert quit : + USER_ID=2 NICK=bar NUMBER=5 bar!=barbar! REMAINING_IDS :[me] +insert quits [% (USER_ID)=2 (NICK)=bar (WIN_ID)=4 bar!=barbar! (USERIDS_CLEAR)=set%to:%[1],%[me]] +insert quits [% (USER_ID)=2 (NICK)=bar (WIN_ID)=5 bar!=barbar! (USERIDS_CLEAR)=set%to:%[me]] log 1 $ users:2 deleted # handle self-PART: clear channel, and its squatters > /window 4 -insert part-no-msg-me : + NUMBER=4 USERIDS_CLEAR :set to: [1] +insert part-no-msg-me [% (WIN_ID)=4 (USERIDS_CLEAR)=set%to:%[1]] log 1 $ users:1 deleted -# handle lack of implementation -insert no-handler : + ALERT_WIN_IDS=2,3,4,5,6,7 ? :foo bar baz - # handle /disconnect, clear all -insert cmd-disconnect-0 :-1 +insert cmd-disconnect-0 range=:-1 log 3,6,7 $ foo!~foofoo@foo.foo quits: Client Quit -insert quits : + USER_ID=me NICK=foo NUMBER=5 USERIDS_CLEAR :emptied +insert quits [(USER_ID)=me (NICK)=foo (WIN_ID)=5 (USERIDS_CLEAR)=emptied] insert cmd-disconnect-1 -insert disconnect1 :-1 + WIN_IDS :2,3,4,5,6,7 +insert disconnect1 range=:-1 [% log%2%=log%2,3,4,5,6,7%] log 1 $ motd emptied log 1 $ users cleared @@ -184,7 +179,7 @@ log 1 $ not sending, since not in channel × ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× # on /connect init databases, log in new windows, connect with values set by /connect, init CAP negotiation -insert connect-to-connected-w-password : + WIN_IDS :2 +insert connect-to-connected-w-password insert conn_init_1 insert conn_init_2 @@ -223,36 +218,37 @@ log 1 # /window.prompt.scroll DIRECTION log 1 # /window.raw VERB [PARAMS_STR] log 1 # /window.reconnect -insert during_conn : + rename_win_ids :3 +insert during_conn # test setting up second client, but 432 irrecoverably > /connect baz.bar.foo:6697 ?foo foo foo:foofoo -insert connect 1: +8 foo.bar.baz=baz.bar.foo [foo] :[?foo] -insert attempting :2 +8 foo.bar.baz :baz.bar.foo +insert connect range=1: [% foo.bar.baz=baz.bar.foo [foo]=[?foo] log%1%=log%8%] +insert attempting range=:2 [% log%1%=log%8% log%2%=log%9% foo.bar.baz=baz.bar.foo] log 9 $ - nickname: ?foo -insert attempting-to-connected 3:-1 +8 WIN_IDS=2 foo.bar.baz :baz.bar.foo +insert attempting range=3: [% log%2%=log%9%] +insert connected range=:-1 [% log%1%=log%8% log%2%=log%9%] log 8 > NICK :?foo -insert servermsglogged-core : + SERVER_ID=1 WIN_ID=8 MSG ::*.?.net 432 * ?foo :Erroneous nickname -insert isupport-clear : +8 -insert disconnect1 1:-1 +8 WIN_IDS :2 +insert servermsglogged [% servermsg%0=servermsg%1 log%1%=log%8% (MSG)=:*.?.net%432%*%?foo%:Erroneous%nickname] +insert isupport-clear [% log%1%=log%8%] +insert disconnect1 range=1:-1 [% log%1%=log%8% log%2%=log%9%] log 8 $ nickname refused for bad format, giving up # test failing third connection -insert connect : +10 foo.bar.baz :baz.baz.baz -insert attempting-to-connected : +10 WIN_IDS=2 foo.bar.baz :baz.baz.baz +insert connect [% foo.bar.baz=baz.baz.baz log%1%=log%10%] +insert attempting-to-connected [% log%1%=log%10% log%2%=log%11% 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 range=:-1 [% log%1%=log%10% (EXIT_MSG)=broken:%FAKE_IRC_CONN_ABORT_EXCEPTION] +insert disconnect1 range=1:-1 [% log%1%=log%10% log%2%=log%11%] log 10 $ will retry connecting in 1 seconds > /window 10 -insert disconnect-to-stop-auto-reconnect : +10 +insert disconnect-to-stop-auto-reconnect [% log%1%=log%10%] # check that (save TUI tests assuming start on window 0, and no 4 yet) on reconnect, all the same effects can be expected > /window 1 > /reconnect -insert attempting-to-connected-w-password : + WIN_IDS :2,3,4,5,6,7 +insert attempting-to-connected-w-password [% log%2%$%CONNECTED=log%2,3,4,5,6,7%$%CONNECTED] insert conn_init_1 -insert conn_init_2 :2 +insert conn_init_2 range=:2 log 1 > JOIN :#ch_win5 -insert conn_init_2 2: -insert during_conn : + rename_win_ids :3,6,7 +insert conn_init_2 range=2: +insert during_conn [% log%3%=log%3,6,7%] diff --git a/src/tests/tui_draw.test b/src/tests/tui_draw.test index af4f635..6947ed6 100644 --- a/src/tests/tui_draw.test +++ b/src/tests/tui_draw.test @@ -8,28 +8,28 @@ insert ./lib/pingpong line 0 0 on_black,bright_white §§ × lines-empty -insert lines-empty-1 : +0 -insert lines-empty-1 : +1 -insert lines-empty-1 : +2 -insert lines-empty-1 : +3 -insert lines-empty-1 : +4 -insert lines-empty-1 : +5 -insert lines-empty-1 : +6 -insert lines-empty-1 : +7 -insert lines-empty-1 : +8 -insert lines-empty-1 : +9 -insert lines-empty-1 : +10 -insert lines-empty-1 : +11 -insert lines-empty-1 : +12 -insert lines-empty-1 : +13 -insert lines-empty-1 : +14 -insert lines-empty-1 : +15 -insert lines-empty-1 : +16 -insert lines-empty-1 : +17 -insert lines-empty-1 : +18 -insert lines-empty-1 : +19 -insert lines-empty-1 : +20 -insert lines-empty-1 : +21 +insert lines-empty-1 bump=0 +insert lines-empty-1 bump=1 +insert lines-empty-1 bump=2 +insert lines-empty-1 bump=3 +insert lines-empty-1 bump=4 +insert lines-empty-1 bump=5 +insert lines-empty-1 bump=6 +insert lines-empty-1 bump=7 +insert lines-empty-1 bump=8 +insert lines-empty-1 bump=9 +insert lines-empty-1 bump=10 +insert lines-empty-1 bump=11 +insert lines-empty-1 bump=12 +insert lines-empty-1 bump=13 +insert lines-empty-1 bump=14 +insert lines-empty-1 bump=15 +insert lines-empty-1 bump=16 +insert lines-empty-1 bump=17 +insert lines-empty-1 bump=18 +insert lines-empty-1 bump=19 +insert lines-empty-1 bump=20 +insert lines-empty-1 bump=21 × lines-prompt-empty line 23 0 on_black,bright_white > § §§ @@ -39,24 +39,24 @@ line 23 0 on_black,bright_white,reverse §§ § line 0 0 on_black,bright_white --------------------------------------------------------------------------------§§ × line-scrolldown -line 21 0 on_black,bright_white,reverse vvv XXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 0 0 on_black,bright_white,reverse vvv XXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ × lines-status-prompt line 22 0 on_black,bright_white x123456789x1234567=========================================X123456789X123456789X§§ -line 22 FOCUS_X on_black,bright_white,bold [FOCUS_STR] +line 22 (FOCUS_X) on_black,bright_white,bold [(FOCUS_STR)] insert lines-prompt-empty × lines-status-prompt-start -insert lines-status-prompt : +22 x123456789x1234567 ::start)=========== +insert lines-status-prompt [x123456789x1234567=:start)===========] × lines-status-prompt-foobarbaz -insert lines-status-prompt : +22 x123456789x1234567 :foo.bar.baz:debug) +insert lines-status-prompt [x123456789x1234567=foo.bar.baz:debug)] × line-invalid-prompt-command -line 0 0 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: MSG§§ +line 0 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 bump=0 [% (MSG)=/(CMD)%unknown] × line-ping line 0 0 on_black,bright_white < §§:§§:§§ PING :? @@ -65,8 +65,8 @@ line 0 0 on_black,bright_white < §§:§§:§§ PING :? line 0 0 on_black,bright_green > §§:§§:§§ PONG :? × lines-ping-pong -insert line-ping : +0 ? :?? -insert line-pong : +1 ? :?? +insert line-ping bump=0 +insert line-pong bump=1 × line-tui-log line 0 0 on_black,bright_cyan # §§:§§:§§ ?§§ @@ -90,202 +90,202 @@ line 0 0 on_black,bright_green > §§:§§:§§ ?§§ line 0 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-cal bump=0 +insert line-invalid-prompt-command bump=1 [% (MSG)=not%prefixed%by%/] +insert line-invalid-prompt-command-unknown bump=2 [(CMD)=foo] +insert line-tui-log bump=3 [% ?=commands%available%in%this%window:] +insert line-tui-log bump=4 [% ?=%%/connect%HOST_PORT%[NICKNAME_PW]%[REALNAME_USERNAME]§§] +insert line-tui-log bump=5 [% ?=%%/help§§] +insert line-tui-log bump=6 [% ?=%%/list§§] +insert line-tui-log bump=7 [% ?=%%/prompt_enter§§] +insert line-tui-log bump=8 [% ?=%%/quit§§] +insert line-tui-log bump=9 [% ?=%%/window%TOWARDS§§] +insert line-tui-log bump=10 [% ?=%%/window.history.scroll%DIRECTION§§] +insert line-tui-log bump=11 [% ?=%%/window.paste] +insert line-tui-log bump=12 [% ?=%%/window.prompt.backspace§§] +insert line-tui-log bump=13 [% ?=%%/window.prompt.move_cursor%DIRECTION§§] +insert line-tui-log bump=14 [% ?=%%/window.prompt.scroll%DIRECTION§§] +insert line-invalid-prompt-command-unknown bump=15 [(CMD)=0] +insert line-invalid-prompt-command-unknown bump=16 [(CMD)=1] +insert line-invalid-prompt-command-unknown bump=17 [(CMD)=2] +insert line-invalid-prompt-command-unknown bump=18 [(CMD)=3] +insert line-invalid-prompt-command-unknown bump=19 [(CMD)=4] +insert line-invalid-prompt-command-unknown bump=20 [(CMD)=5] +insert line-invalid-prompt-command-unknown bump=21 [(CMD)=6] +insert line-invalid-prompt-command-unknown bump=22 [(CMD)=7] +insert line-invalid-prompt-command-unknown bump=23 [(CMD)=foo_0123456789_0123456789_0123456789] +insert line-invalid-prompt-command bump=24 [(MSG)=/foo_0123456789_0123456789_0123456789_§§] +insert line-bright-red-bold bump=25 [% ?=%%%unknown] +insert line-invalid-prompt-command bump=26 [(MSG)=/bar_0123456789_0123456789_0123456789_§§] +insert line-bright-red-bold bump=27 [% ?=%%%unknown] +insert line-tui-log bump=28 [% ?=windows%available%via%/window:§§] +insert line-tui-log bump=29 [% ?=%%0)%:start§§] +insert line-tui-log bump=30 [% ?=%%1)%foo.bar.baz:debug§§] +insert line-tui-log bump=31 [% ?=%%2)%foo.bar.baz:server§§] × history_1 -insert line-cal : +0 -insert line-server-log : +1 ? :isupport:CHANTYPES set to: [#&] -insert line-server-log : +2 ? :isupport:PREFIX set to: [(ov)@+] -insert line-server-log : +3 ? :isupport:USERLEN set to: [10] -insert line-server-log : +4 ? :hostname set to: [foo.bar.baz] -insert line-server-log : +5 ? :port set to: [6697] -insert line-server-log : +6 ? :nick_wanted set to: [foo] -insert line-server-log : +7 ? :user_wanted set to: [foofoo] -insert line-server-log : +8 ? :realname set to: [foo foo] -insert line-server-log : +9 ? :connection_state set to: [connecting] -insert line-server-log : +10 ? :connection_state set to: [connected] -insert line-client-msg : +11 ? :CAP LS :302 -insert line-client-msg : +12 ? :USER foofoo 0 * :foo foo -insert line-client-msg : +13 ? :NICK :foo -insert lines-ping-pong : +14 ?? :0 -insert lines-ping-pong : +16 ?? :1 -insert lines-ping-pong : +18 ?? :2 -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 ?? :3 -insert lines-ping-pong : +26 ?? :4 -insert lines-ping-pong : +28 ?? :5 -insert lines-ping-pong : +30 ?? :6 -insert lines-ping-pong : +32 ?? :7 -insert lines-ping-pong : +34 ?? :8 -insert lines-ping-pong : +36 ?? :9 -insert lines-ping-pong : +38 ?? :10 -insert lines-ping-pong : +40 ?? :11 -insert lines-ping-pong : +42 ?? :12 -insert lines-ping-pong : +44 ?? :13 -insert lines-ping-pong : +46 ?? :14 -insert lines-ping-pong : +48 ?? :15 -insert lines-ping-pong : +50 ?? :16 -insert lines-ping-pong : +52 ?? :17 -insert lines-ping-pong : +54 ?? :18 -insert lines-ping-pong : +56 ?? :19 -insert lines-ping-pong : +58 ?? :20 -insert lines-ping-pong : +60 ?? :21 -insert lines-ping-pong : +62 ?? :22 -insert lines-ping-pong : +64 ?? :23 -insert lines-ping-pong : +66 ?? :24 -insert lines-ping-pong : +68 ?? :25 -insert lines-ping-pong : +70 ?? :26 -insert lines-ping-pong : +72 ?? :27 -insert lines-ping-pong : +74 ?? :28 -insert lines-ping-pong : +76 ?? :29 -insert lines-ping-pong : +78 ?? :30 +insert line-cal bump=0 +insert line-server-log bump=1 [% ?=isupport:CHANTYPES%set%to:%[#&]] +insert line-server-log bump=2 [% ?=isupport:PREFIX%set%to:%[(ov)@+]] +insert line-server-log bump=3 [% ?=isupport:USERLEN%set%to:%[10]] +insert line-server-log bump=4 [% ?=hostname%set%to:%[foo.bar.baz]] +insert line-server-log bump=5 [% ?=port%set%to:%[6697]] +insert line-server-log bump=6 [% ?=nick_wanted%set%to:%[foo]] +insert line-server-log bump=7 [% ?=user_wanted%set%to:%[foofoo]] +insert line-server-log bump=8 [% ?=realname%set%to:%[foo%foo]] +insert line-server-log bump=9 [% ?=connection_state%set%to:%[connecting]] +insert line-server-log bump=10 [% ?=connection_state%set%to:%[connected]] +insert line-client-msg bump=11 [% ?=CAP%LS%:302] +insert line-client-msg bump=12 [% ?=USER%foofoo%0%*%:foo%foo] +insert line-client-msg bump=13 [% ?=NICK%:foo] +insert lines-ping-pong bump=14 [?=0] +insert lines-ping-pong bump=16 [?=1] +insert lines-ping-pong bump=18 [?=2] +insert line-ping bump=20 [% ?=9%123456789%123456789%123456789%123456789%123456789%123456789§§] +insert line-bright-white bump=21 [% ?=%%%123456789%123456789] +insert line-pong bump=22 [% ?=9%123456789%123456789%123456789%123456789%123456789%123456789§§] +insert line-bright-green bump=23 [% ?=%%%123456789%123456789] +insert lines-ping-pong bump=24 [?=3] +insert lines-ping-pong bump=26 [?=4] +insert lines-ping-pong bump=28 [?=5] +insert lines-ping-pong bump=30 [?=6] +insert lines-ping-pong bump=32 [?=7] +insert lines-ping-pong bump=34 [?=8] +insert lines-ping-pong bump=36 [?=9] +insert lines-ping-pong bump=38 [?=10] +insert lines-ping-pong bump=40 [?=11] +insert lines-ping-pong bump=42 [?=12] +insert lines-ping-pong bump=44 [?=13] +insert lines-ping-pong bump=46 [?=14] +insert lines-ping-pong bump=48 [?=15] +insert lines-ping-pong bump=50 [?=16] +insert lines-ping-pong bump=52 [?=17] +insert lines-ping-pong bump=54 [?=18] +insert lines-ping-pong bump=56 [?=19] +insert lines-ping-pong bump=58 [?=20] +insert lines-ping-pong bump=60 [?=21] +insert lines-ping-pong bump=62 [?=22] +insert lines-ping-pong bump=64 [?=23] +insert lines-ping-pong bump=66 [?=24] +insert lines-ping-pong bump=68 [?=25] +insert lines-ping-pong bump=70 [?=26] +insert lines-ping-pong bump=72 [?=27] +insert lines-ping-pong bump=74 [?=28] +insert lines-ping-pong bump=76 [?=29] +insert lines-ping-pong bump=78 [?=30] × ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× insert lines-empty -insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ +insert lines-status-prompt-start [(FOCUS_X)=77 (FOCUS_STR)=0 X123456789X123456789X==================(§§§] # nothing happening on empty command input > insert lines-empty -insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ +insert lines-status-prompt-start [(FOCUS_X)=77 (FOCUS_STR)=0 X123456789X123456789X==================(§§§] # check scrolling on empty history does nothing > /window.history.scroll up insert lines-empty -insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ +insert lines-status-prompt-start [(FOCUS_X)=77 (FOCUS_STR)=0 X123456789X123456789X==================(§§§] > /window.history.scroll down insert lines-empty -insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ +insert lines-status-prompt-start [(FOCUS_X)=77 (FOCUS_STR)=0 X123456789X123456789X==================(§§§] # non-empty command input starts log at bottom, with date above it -insert enter-unprefixed : +0 ? :foo -insert lines-empty :20 -insert history_0 :2 +20 -insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ +insert enter-unprefixed [?=foo] +insert lines-empty range=:20 +insert history_0 range=:2 bump=20 +insert lines-status-prompt-start [(FOCUS_X)=77 (FOCUS_STR)=0 X123456789X123456789X==================(§§§] # 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 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ +insert lines-empty range=:20 +insert history_0 range=:2 bump=20 +insert lines-status-prompt-start [(FOCUS_X)=77 (FOCUS_STR)=0 X123456789X123456789X==================(§§§] > /window.history.scroll down -insert lines-empty :20 -insert history_0 :2 +20 -insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ +insert lines-empty range=:20 +insert history_0 range=:2 bump=20 +insert lines-status-prompt-start [(FOCUS_X)=77 (FOCUS_STR)=0 X123456789X123456789X==================(§§§] # 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 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ +insert lines-empty range=:19 +insert history_0 range=:3 bump=19 +insert lines-status-prompt-start [(FOCUS_X)=77 (FOCUS_STR)=0 X123456789X123456789X==================(§§§] # 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 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ +insert lines-empty range=:20 +insert history_0 range=:1 bump=20 +insert line-scrolldown bump=21 [% XXXXXX=[2]%vv] +insert lines-status-prompt-start [(FOCUS_X)=77 (FOCUS_STR)=0 X123456789X123456789X==================(§§§] # 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 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ +insert lines-empty range=:19 +insert history_0 range=:3 bump=19 +insert lines-status-prompt-start [(FOCUS_X)=77 (FOCUS_STR)=0 X123456789X123456789X==================(§§§] # 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 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ +insert lines-empty range=:20 +insert history_0 range=:1 bump=20 +insert line-scrolldown bump=21 [% XXXXXX=[2]%vv] +insert lines-status-prompt-start [(FOCUS_X)=77 (FOCUS_STR)=0 X123456789X123456789X==================(§§§] 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 FOCUS_X=72 FOCUS_STR=(0:12) X123456789X123456789X :============(§§§§§§§§ +insert lines-empty range=:20 +insert history_0 range=:1 bump=20 +insert line-scrolldown bump=21 [% XXXXXX=[14]%v] +insert lines-status-prompt-start [(FOCUS_X)=72 (FOCUS_STR)=(0:12) X123456789X123456789X=============(§§§§§§§§] # 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 FOCUS_X=73 FOCUS_STR=(0:3) X123456789X123456789X :=============(§§§§§§§ +insert lines-empty range=:9 +insert history_0 range=:12 bump=9 +insert line-scrolldown bump=21 [% XXXXXX=[3]%vv] +insert lines-status-prompt-start [(FOCUS_X)=73 (FOCUS_STR)=(0:3) X123456789X123456789X==============(§§§§§§§] # 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 FOCUS_X=73 FOCUS_STR=(0:3) X123456789X123456789X :=============(§§§§§§§ +insert lines-empty range=:20 +insert history_0 range=:1 bump=20 +insert line-scrolldown bump=21 [% XXXXXX=[14]%v] +insert lines-status-prompt-start [(FOCUS_X)=73 (FOCUS_STR)=(0:3) X123456789X123456789X==============(§§§§§§§] > /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 FOCUS_X=73 FOCUS_STR=(0:3) X123456789X123456789X :=============(§§§§§§§ +insert lines-empty range=:9 +insert history_0 range=:12 bump=9 +insert line-scrolldown bump=21 [% XXXXXX=[3]%vv] +insert lines-status-prompt-start [(FOCUS_X)=73 (FOCUS_STR)=(0:3) X123456789X123456789X==============(§§§§§§§] # 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 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ -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 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ +insert lines-empty range=:7 +insert history_0 range=:15 bump=7 +insert lines-status-prompt-start [(FOCUS_X)=77 (FOCUS_STR)=0 X123456789X123456789X==================(§§§] +insert enter-unknown [?=0] +insert enter-unknown [?=1] +insert enter-unknown [?=2] +insert enter-unknown [?=3] +insert enter-unknown [?=4] +insert enter-unknown [?=5] +insert enter-unknown [?=6] +insert enter-unknown [?=7] +insert history_0 range=1:23 bump=0 +insert lines-status-prompt-start [(FOCUS_X)=77 (FOCUS_STR)=0 X123456789X123456789X==================(§§§] # 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 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ +insert history_0 range=1:23 bump=0 +insert lines-status-prompt-start [(FOCUS_X)=77 (FOCUS_STR)=0 X123456789X123456789X==================(§§§] # 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 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ +insert lines-empty range=:9 +insert history_0 range=:12 bump=9 +insert line-scrolldown bump=21 [% XXXXXX=[11]%v] +insert lines-status-prompt-start [(FOCUS_X)=77 (FOCUS_STR)=0 X123456789X123456789X==================(§§§] # check wrapping > /window.history.scroll down @@ -293,351 +293,351 @@ insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X1234567 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 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ +insert history_0 range=4:26 bump=0 +insert lines-status-prompt-start [(FOCUS_X)=77 (FOCUS_STR)=0 X123456789X123456789X==================(§§§] # 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 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ +insert lines-empty range=:6 +insert history_0 range=:15 bump=6 +insert line-scrolldown bump=21 [% XXXXXX=[10]%v] +insert lines-status-prompt-start [(FOCUS_X)=77 (FOCUS_STR)=0 X123456789X123456789X==================(§§§] # 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 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ +insert history_0 range=4:26 bump=0 +insert lines-status-prompt-start [(FOCUS_X)=77 (FOCUS_STR)=0 X123456789X123456789X==================(§§§] > /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 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ +insert lines-empty range=:6 +insert history_0 range=:15 bump=6 +insert line-scrolldown bump=21 [% XXXXXX=[10]%v] +insert lines-status-prompt-start [(FOCUS_X)=77 (FOCUS_STR)=0 X123456789X123456789X==================(§§§] # 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 FOCUS_X=73 FOCUS_STR=(0:1) X123456789X123456789X :=============(§§§§§§§ +insert lines-empty range=:6 +insert history_0 range=:15 bump=6 +insert line-scrolldown bump=21 [% XXXXXX=[11]%v] +insert lines-status-prompt-start [(FOCUS_X)=73 (FOCUS_STR)=(0:1) X123456789X123456789X==============(§§§§§§§] # 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 FOCUS_X=73 FOCUS_STR=(0:1) X123456789X123456789X :=============(§§§§§§§ +insert history_0 range=5:26 bump=0 +insert line-scrolldown bump=21 [% XXXXXX=[1]%vv] +insert lines-status-prompt-start [(FOCUS_X)=73 (FOCUS_STR)=(0:1) X123456789X123456789X==============(§§§§§§§] # # 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 FOCUS_X=73 FOCUS_STR=(0:1) X123456789X123456789X :=============(§§§§§§§ +insert lines-empty range=:6 +insert history_0 range=:15 bump=6 +insert line-scrolldown bump=21 [% XXXXXX=[11]%v] +insert lines-status-prompt-start [(FOCUS_X)=73 (FOCUS_STR)=(0:1) X123456789X123456789X==============(§§§§§§§] > /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 FOCUS_X=73 FOCUS_STR=(0:1) X123456789X123456789X :=============(§§§§§§§ +insert lines-empty range=:17 +insert history_0 range=:3 bump=17 +insert line-scrolldown bump=21 [% XXXXXX=[22]%v] +insert lines-status-prompt-start [(FOCUS_X)=73 (FOCUS_STR)=(0:1) X123456789X123456789X==============(§§§§§§§] > /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 FOCUS_X=73 FOCUS_STR=(0:1) X123456789X123456789X :=============(§§§§§§§ +insert lines-empty range=:20 +insert history_0 range=:1 bump=20 +insert line-scrolldown bump=21 [% XXXXXX=[25]%v] +insert lines-status-prompt-start [(FOCUS_X)=73 (FOCUS_STR)=(0:1) X123456789X123456789X==============(§§§§§§§] # 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 FOCUS_X=60 FOCUS_STR=(0:1) X123456789X123456789X :(§§§§§§§ (1:14) (2:7) +insert lines-empty range=:20 +insert history_0 range=:1 bump=20 +insert line-scrolldown bump=21 [% XXXXXX=[25]%v] +insert lines-status-prompt-start [% (FOCUS_X)=60 (FOCUS_STR)=(0:1) X123456789X123456789X=(§§§§§§§%(1:14)%(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 :8 -insert history_1 :14 +8 -insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=====((0:1) §§§ (2:7) +insert lines-empty range=:8 +insert history_1 range=:14 bump=8 +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=71 (FOCUS_STR)=1 X123456789X123456789X======((0: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 FOCUS_X=65 FOCUS_STR=(0:1) X123456789X123456789X :=====(§§§§§§§ 1 (2:7) +insert lines-empty range=:20 +insert history_0 range=:1 bump=20 +insert line-scrolldown bump=21 [% XXXXXX=[25]%v] +insert lines-status-prompt-start [% (FOCUS_X)=65 (FOCUS_STR)=(0:1) X123456789X123456789X======(§§§§§§§%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 FOCUS_X=65 FOCUS_STR=(0:1) X123456789X123456789X :=====(§§§§§§§ 1 (2:7) +insert lines-empty range=:9 +insert history_0 range=:12 bump=9 +insert line-scrolldown bump=21 [% XXXXXX=[14]%v] +insert lines-status-prompt-start [% (FOCUS_X)=65 (FOCUS_STR)=(0:1) X123456789X123456789X======(§§§§§§§%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 FOCUS_X=65 FOCUS_STR=(0:1) X123456789X123456789X :=====(§§§§§§§ 1 (2:7) +insert history_0 range=2:23 bump=0 +insert line-scrolldown bump=21 [% XXXXXX=[3]%vv] +insert lines-status-prompt-start bump=22 [% (FOCUS_X)=65 (FOCUS_STR)=(0:1) X123456789X123456789X======(§§§§§§§%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 FOCUS_X=69 FOCUS_STR=0 X123456789X123456789X :=========(§§§ 1 (2:7) +insert history_0 range=7:26 bump=0 +insert line-bookmark bump=19 +insert history_0 range=26:28 bump=20 +insert lines-status-prompt-start [% (FOCUS_X)=69 (FOCUS_STR)=0 X123456789X123456789X==========(§§§%1%(2:7)] # check SIGWINCH does not re-set bookmark > raise_sigwinch -insert history_0 7:26 +0 -insert line-bookmark : +19 -insert history_0 26:28 +20 -insert lines-status-prompt-start : +22 FOCUS_X=69 FOCUS_STR=0 X123456789X123456789X :=========(§§§ 1 (2:7) +insert history_0 range=7:26 bump=0 +insert line-bookmark bump=19 +insert history_0 range=26:28 bump=20 +insert lines-status-prompt-start [% (FOCUS_X)=69 (FOCUS_STR)=0 X123456789X123456789X==========(§§§%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 FOCUS_X=69 FOCUS_STR=0 X123456789X123456789X :=========(§§§ 1 (2:7) +insert lines-empty range=:3 +insert history_0 range=:18 bump=3 +insert line-scrolldown bump=21 [% XXXXXX=[8]%vv] +insert lines-status-prompt-start [% (FOCUS_X)=69 (FOCUS_STR)=0 X123456789X123456789X==========(§§§%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 FOCUS_X=69 FOCUS_STR=0 X123456789X123456789X :=========(§§§ 1 (2:7) +insert history_0 range=7:26 bump=0 +insert line-bookmark bump=19 +insert history_0 range=26:28 bump=20 +insert lines-status-prompt-start [% (FOCUS_X)=69 (FOCUS_STR)=0 X123456789X123456789X==========(§§§%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 :7 -insert history_1 :14 +7 -insert line-bookmark : +21 -insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) +insert lines-empty range=:7 +insert history_1 range=:14 bump=7 +insert line-bookmark bump=21 +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=71 (FOCUS_STR)=1 X123456789X123456789X==========(0%§§§%(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 FOCUS_X=69 FOCUS_STR=0 X123456789X123456789X :=========(§§§ 1 (2:7) +insert history_0 range=7:28 bump=0 +insert line-bookmark bump=21 +insert lines-status-prompt-start [% (FOCUS_X)=69 (FOCUS_STR)=0 X123456789X123456789X==========(§§§%1%(2:7)] # check new lines push bookmark up insert enter-list-start log 0 # 1) foo.bar.baz:debug 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 FOCUS_X=69 FOCUS_STR=0 X123456789X123456789X :=========(§§§ 1 (2:7) +insert history_0 range=11:28 bump=0 +insert line-bookmark bump=17 +insert history_0 range=28:32 bump=18 +insert lines-status-prompt-start [% (FOCUS_X)=69 (FOCUS_STR)=0 X123456789X123456789X==========(§§§%1%(2:7)] # check new lines growing in other window, one of which long enough to wrap, to re-start count in status (with wrapped only as single) -insert ping-pong : +0 ? :0 -insert ping-pong : +0 ? :1 -insert ping-pong : +0 ? :2 -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 FOCUS_X=65 FOCUS_STR=0 X123456789X123456789X :=====(§§§ (1:8) (2:7) +insert ping-pong [?=0] +insert ping-pong [?=1] +insert ping-pong [?=2] +insert ping-pong [% ?=9%123456789%123456789%123456789%123456789%123456789%123456789%123456789%123456789] +insert history_0 range=11:28 bump=0 +insert line-bookmark bump=17 +insert history_0 range=28:32 bump=18 +insert lines-status-prompt-start [% (FOCUS_X)=65 (FOCUS_STR)=0 X123456789X123456789X======(§§§%(1:8)%(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:14 +0 -insert line-bookmark : +11 -insert history_1 14:24 +12 -insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) +insert history_1 range=3:14 bump=0 +insert line-bookmark bump=11 +insert history_1 range=14:24 bump=12 +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=71 (FOCUS_STR)=1 X123456789X123456789X==========(0%§§§%(2:7)] # check that growth below scroll does not by itself re-position bookmark in history > /window.history.scroll up -insert ping-pong : +0 ? :3 -insert lines-empty :7 -insert history_1 0:14 +7 -insert line-scrolldown : +21 XXXXXX :[10] v -insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:2) X123456789X123456789X :=====(0 §§§§§§§ (2:7) +insert ping-pong bump=0 [?=3] +insert lines-empty range=:7 +insert history_1 range=0:14 bump=7 +insert line-scrolldown bump=21 [% XXXXXX=[10]%v] +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=67 (FOCUS_STR)=(1:2) X123456789X123456789X======(0%§§§§§§§%(2:7)] > /window.history.scroll down -insert history_1 4:14 +0 -insert line-bookmark : +10 -insert history_1 14:24 +11 -insert line-scrolldown : +21 XXXXXX :[2] vv -insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:2) X123456789X123456789X :=====(0 §§§§§§§ (2:7) +insert history_1 range=4:14 bump=0 +insert line-bookmark bump=10 +insert history_1 range=14:24 bump=11 +insert line-scrolldown bump=21 [% XXXXXX=[2]%vv] +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=67 (FOCUS_STR)=(1:2) X123456789X123456789X======(0%§§§§§§§%(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 FOCUS_X=65 FOCUS_STR=0 X123456789X123456789X :=====(§§§ (1:2) (2:7) +insert history_0 range=11:32 bump=0 +insert line-bookmark bump=21 +insert lines-status-prompt-start [% (FOCUS_X)=65 (FOCUS_STR)=0 X123456789X123456789X======(§§§%(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 FOCUS_X=67 FOCUS_STR=(1:2) X123456789X123456789X :=====(0 §§§§§§§ (2:7) +insert history_1 range=4:24 bump=0 +insert line-bookmark bump=20 +insert line-scrolldown bump=21 [% XXXXXX=[2]%vv] +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=67 (FOCUS_STR)=(1:2) X123456789X123456789X======(0%§§§§§§§%(2:7)] -# check that growing lines below scroll in other preserves non-bottom bookmark (left in sight on previous window leave) +# 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 ? :4 -insert history_0 11:32 +0 -insert line-bookmark : +21 -insert lines-status-prompt-start : +22 FOCUS_X=65 FOCUS_STR=0 X123456789X123456789X :=====(§§§ (1:4) (2:7) +insert ping-pong bump=0 [?=4] +insert history_0 range=11:32 bump=0 +insert line-bookmark bump=21 +insert lines-status-prompt-start [% (FOCUS_X)=65 (FOCUS_STR)=0 X123456789X123456789X======(§§§%(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 FOCUS_X=67 FOCUS_STR=(1:4) X123456789X123456789X :=====(0 §§§§§§§ (2:7) +insert history_1 range=4:24 bump=0 +insert line-bookmark bump=20 +insert line-scrolldown bump=21 [% XXXXXX=[4]%vv] +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=67 (FOCUS_STR)=(1:4) X123456789X123456789X======(0%§§§§§§§%(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 FOCUS_X=67 FOCUS_STR=(1:4) X123456789X123456789X :=====(0 §§§§§§§ (2:7) +insert lines-empty range=:7 +insert history_1 range=:14 bump=7 +insert line-scrolldown bump=21 [% XXXXXX=[12]%v] +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=67 (FOCUS_STR)=(1:4) X123456789X123456789X======(0%§§§§§§§%(2:7)] > /window 0 -insert ping-pong : +0 ? :5 -insert history_0 11:32 +0 -insert line-bookmark : +21 -insert lines-status-prompt-start : +22 FOCUS_X=65 FOCUS_STR=0 X123456789X123456789X :=====(§§§ (1:6) (2:7) +insert ping-pong bump=0 [?=5] +insert history_0 range=11:32 bump=0 +insert line-bookmark bump=21 +insert lines-status-prompt-start [% (FOCUS_X)=65 (FOCUS_STR)=0 X123456789X123456789X======(§§§%(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 FOCUS_X=67 FOCUS_STR=(1:6) X123456789X123456789X :=====(0 §§§§§§§ (2:7) +insert lines-empty range=:7 +insert history_1 range=:14 bump=7 +insert line-scrolldown bump=21 [% XXXXXX=[14]%v] +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=67 (FOCUS_STR)=(1:6) X123456789X123456789X======(0%§§§§§§§%(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 FOCUS_X=67 FOCUS_STR=(1:6) X123456789X123456789X :=====(0 §§§§§§§ (2:7) +insert history_1 range=4:24 bump=0 +insert line-bookmark bump=20 +insert line-scrolldown bump=21 [% XXXXXX=[6]%vv] +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=67 (FOCUS_STR)=(1:6) X123456789X123456789X======(0%§§§§§§§%(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 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) +insert history_1 range=9:24 bump=0 +insert line-bookmark bump=15 +insert history_1 range=24:30 bump=16 +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=71 (FOCUS_STR)=1 X123456789X123456789X==========(0%§§§%(2:7)] # check log growth beyond max depth only remarkable after scrolling up to limit -insert ping-pong : +0 ? :6 -insert history_1 11:24 +0 -insert line-bookmark : +13 -insert history_1 24:32 +14 -insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) +insert ping-pong bump=0 [?=6] +insert history_1 range=11:24 bump=0 +insert line-bookmark bump=13 +insert history_1 range=24:32 bump=14 +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=71 (FOCUS_STR)=1 X123456789X123456789X==========(0%§§§%(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 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) +insert history_1 range=1:22 bump=0 +insert line-scrolldown bump=21 [% XXXXXX=[9]%vv] +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=71 (FOCUS_STR)=1 X123456789X123456789X==========(0%§§§%(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 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) +insert lines-empty range=:10 +insert history_1 range=:11 bump=10 +insert line-scrolldown bump=21 [% XXXXXX=[19]%v] +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=71 (FOCUS_STR)=1 X123456789X123456789X==========(0%§§§%(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 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) +insert lines-empty range=:20 +insert history_1 range=:1 bump=20 +insert line-scrolldown bump=21 [% XXXXXX=[29]%v] +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=71 (FOCUS_STR)=1 X123456789X123456789X==========(0%§§§%(2:7)] # check cut-off log growth seen from topmost scroll not affecting scrolldown count, but unread-lines status -insert ping-pong : +0 ? :7 -insert lines-empty :20 -insert history_1 2:3 +20 -insert line-scrolldown : +21 XXXXXX :[29] v -insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:2) X123456789X123456789X :=====(0 §§§§§§§ (2:7) +insert ping-pong bump=0 [?=7] +insert lines-empty range=:20 +insert history_1 range=2:3 bump=20 +insert line-scrolldown bump=21 [% XXXXXX=[29]%v] +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=67 (FOCUS_STR)=(1:2) X123456789X123456789X======(0%§§§§§§§%(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 FOCUS_X=65 FOCUS_STR=0 X123456789X123456789X :=====(§§§ (1:2) (2: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 ping-pong : +0 ? :16 -insert ping-pong : +0 ? :17 -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 history_0 11:32 +0 -insert line-bookmark : +21 -insert lines-status-prompt-start : +22 FOCUS_X=64 FOCUS_STR=0 X123456789X123456789X :====(§§§ (1:32) (2:7) +insert history_0 range=11:32 bump=0 +insert line-bookmark bump=21 +insert lines-status-prompt-start [% (FOCUS_X)=65 (FOCUS_STR)=0 X123456789X123456789X======(§§§%(1:2)%(2:7)] +insert ping-pong [?=8] +insert ping-pong [?=9] +insert ping-pong [?=10] +insert ping-pong [?=11] +insert ping-pong [?=12] +insert ping-pong [?=13] +insert ping-pong [?=14] +insert ping-pong [?=15] +insert ping-pong [?=16] +insert ping-pong [?=17] +insert ping-pong [?=18] +insert ping-pong [?=19] +insert ping-pong [?=20] +insert ping-pong [?=21] +insert ping-pong [?=22] +insert history_0 range=11:32 bump=0 +insert line-bookmark bump=21 +insert lines-status-prompt-start [% (FOCUS_X)=64 (FOCUS_STR)=0 X123456789X123456789X=====(§§§%(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 34:35 +20 -insert line-scrolldown : +21 XXXXXX :[29] v -insert lines-status-prompt-foobarbaz : +22 FOCUS_X=66 FOCUS_STR=(1:29) X123456789X123456789X :====(0 §§§§§§§§ (2:7) +insert lines-empty range=:20 +insert history_1 range=34:35 bump=20 +insert line-scrolldown bump=21 [% XXXXXX=[29]%v] +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=66 (FOCUS_STR)=(1:29) X123456789X123456789X=====(0%§§§§§§§§%(2:7)] > /window.history.scroll down -insert lines-empty :9 -insert history_1 34:46 +9 -insert line-scrolldown : +21 XXXXXX :[18] v -insert lines-status-prompt-foobarbaz : +22 FOCUS_X=66 FOCUS_STR=(1:18) X123456789X123456789X :====(0 §§§§§§§§ (2:7) +insert lines-empty range=:9 +insert history_1 range=34:46 bump=9 +insert line-scrolldown bump=21 [% XXXXXX=[18]%v] +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=66 (FOCUS_STR)=(1:18) X123456789X123456789X=====(0%§§§§§§§§%(2:7)] > /window.history.scroll down -insert history_1 36:57 +0 -insert line-scrolldown : +21 XXXXXX :[7] vv -insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:7) X123456789X123456789X :=====(0 §§§§§§§ (2:7) +insert history_1 range=36:57 bump=0 +insert line-scrolldown bump=21 [% XXXXXX=[7]%vv] +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=67 (FOCUS_STR)=(1:7) X123456789X123456789X======(0%§§§§§§§%(2:7)] > /window.history.scroll down -insert history_1 42:62 +0 -insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) +insert history_1 range=42:62 bump=0 +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=71 (FOCUS_STR)=1 X123456789X123456789X==========(0%§§§%(2:7)] # check bookmark remains absent with log growing while scrolled to bottom, … -insert ping-pong : +0 ? :23 -insert history_1 44:64 +0 -insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) +insert ping-pong [?=23] +insert history_1 range=44:64 bump=0 +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=71 (FOCUS_STR)=1 X123456789X123456789X==========(0%§§§%(2:7)] # … as well as if further growth happens below scroll > /window.history.scroll up -insert lines-empty :2 -insert history_1 36:55 +2 -insert line-scrolldown : +21 XXXXXX :[11] v -insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) -insert ping-pong : +0 ? :24 -insert lines-empty :4 -insert history_1 38:55 +4 -insert line-scrolldown : +21 XXXXXX :[13] v -insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:2) X123456789X123456789X :=====(0 §§§§§§§ (2:7) -> /window.history.scroll down -insert history_1 45:66 +0 -insert line-scrolldown : +21 XXXXXX :[2] vv -insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:2) X123456789X123456789X :=====(0 §§§§§§§ (2:7) +insert lines-empty range=:2 +insert history_1 range=36:55 bump=2 +insert line-scrolldown bump=21 [% XXXXXX=[11]%v] +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=71 (FOCUS_STR)=1 X123456789X123456789X==========(0%§§§%(2:7)] +insert ping-pong bump=0 [?=24] +insert lines-empty range=:4 +insert history_1 range=38:55 bump=4 +insert line-scrolldown bump=21 [% XXXXXX=[13]%v] +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=67 (FOCUS_STR)=(1:2) X123456789X123456789X======(0%§§§§§§§%(2:7)] +> /window.history.scroll down +insert history_1 range=45:66 bump=0 +insert line-scrolldown bump=21 [% XXXXXX=[2]%vv] +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=67 (FOCUS_STR)=(1:2) X123456789X123456789X======(0%§§§§§§§%(2:7)] > /window.history.scroll down -insert history_1 46:68 +0 -insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) +insert history_1 range=46:68 bump=0 +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=71 (FOCUS_STR)=1 X123456789X123456789X==========(0%§§§%(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 38:55 +2 -insert line-scrolldown : +21 XXXXXX :[11] v -insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) -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 ping-pong : +0 ? :33 -insert ping-pong : +0 ? :34 -insert ping-pong : +0 ? :35 -insert ping-pong : +0 ? :36 -insert ping-pong : +0 ? :37 -insert ping-pong : +0 ? :38 -insert ping-pong : +0 ? :39 -insert lines-empty :20 -insert history_1 68:69 +20 -insert line-scrolldown : +21 XXXXXX :[29] v -insert lines-status-prompt-foobarbaz : +22 FOCUS_X=66 FOCUS_STR=(1:29) X123456789X123456789X :====(0 §§§§§§§§ (2:7) +insert lines-empty range=:2 +insert history_1 range=38:55 bump=2 +insert line-scrolldown bump=21 [% XXXXXX=[11]%v] +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=71 (FOCUS_STR)=1 X123456789X123456789X==========(0%§§§%(2:7)] +insert ping-pong [?=25] +insert ping-pong [?=26] +insert ping-pong [?=27] +insert ping-pong [?=28] +insert ping-pong [?=29] +insert ping-pong [?=30] +insert ping-pong [?=31] +insert ping-pong [?=32] +insert ping-pong [?=33] +insert ping-pong [?=34] +insert ping-pong [?=35] +insert ping-pong [?=36] +insert ping-pong [?=37] +insert ping-pong [?=38] +insert ping-pong [?=39] +insert lines-empty range=:20 +insert history_1 range=68:69 bump=20 +insert line-scrolldown bump=21 [% XXXXXX=[29]%v] +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=66 (FOCUS_STR)=(1:29) X123456789X123456789X=====(0%§§§§§§§§%(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 FOCUS_X=64 FOCUS_STR=0 X123456789X123456789X :====(§§§ (1:29) (2:7) +insert history_0 range=11:32 bump=0 +insert line-bookmark bump=21 +insert lines-status-prompt-start [% (FOCUS_X)=64 (FOCUS_STR)=0 X123456789X123456789X=====(§§§%(1:29)%(2:7)] > /window 1 -insert lines-empty :19 -insert history_1 68:69 +19 -insert line-bookmark : +20 -insert line-scrolldown : +21 XXXXXX :[29] v -insert lines-status-prompt-foobarbaz : +22 FOCUS_X=66 FOCUS_STR=(1:29) X123456789X123456789X :====(0 §§§§§§§§ (2:7) +insert lines-empty range=:19 +insert history_1 range=68:69 bump=19 +insert line-bookmark bump=20 +insert line-scrolldown bump=21 [% XXXXXX=[29]%v] +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=66 (FOCUS_STR)=(1:29) X123456789X123456789X=====(0%§§§§§§§§%(2:7)] > /window.history.scroll down -insert lines-empty :8 -insert history_1 68:69 +8 -insert line-bookmark : +9 -insert history_1 69:80 +10 -insert line-scrolldown : +21 XXXXXX :[18] v -insert lines-status-prompt-foobarbaz : +22 FOCUS_X=66 FOCUS_STR=(1:18) X123456789X123456789X :====(0 §§§§§§§§ (2:7) +insert lines-empty range=:8 +insert history_1 range=68:69 bump=8 +insert line-bookmark bump=9 +insert history_1 range=69:80 bump=10 +insert line-scrolldown bump=21 [% XXXXXX=[18]%v] +insert lines-status-prompt-foobarbaz [% (FOCUS_X)=66 (FOCUS_STR)=(1:18) X123456789X123456789X=====(0%§§§§§§§§%(2:7)] diff --git a/src/tests/tui_line_formattings.test b/src/tests/tui_line_formattings.test index 80dd83c..ae0c54f 100644 --- a/src/tests/tui_line_formattings.test +++ b/src/tests/tui_line_formattings.test @@ -4,8 +4,8 @@ insert ./lib/servermsglogged insert ./lib/servernotice × servermsglogged-and-line-unwrapped -insert servermsglogged : +0 MSG :XXX -line 21 0 on_black,bright_white < §§:§§:§§ XXX§§ +insert servermsglogged +line 21 0 on_black,bright_white < §§:§§:§§ (MSG)§§ × ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× @@ -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 [% (MSG)=: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 [% (MSG)=:foo.bar.baz%002%foo%:456789%123456789%123456789%123456789%12345678%01] line 20 0 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678§§ line 21 0 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 [% (MSG)=:foo.bar.baz%002%foo%:456789%123456789%123456789%123456789%123456789%1] line 20 0 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 123456789§§ line 21 0 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 [% (MSG)=:foo.bar.baz%002%foo%:456789%123456789%123456789%123456789%1234567890%2] line 20 0 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890§§ line 21 0 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 [% (MSG)=:foo.bar.baz%002%foo%:456789%123456789%123456789%123456789%1234567890%%3] line 20 0 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890§§ line 21 0 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 [% (MSG)=:foo.bar.baz%002%foo%:2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_2345678] line 19 0 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo§§ line 20 0 on_black,bright_white :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_234567§§ line 21 0 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 [% (MSG)=:foo.bar.baz%002%foo%:456789%123456789%123456789%123456789%1234567%💓] +insert servermsglogged [% (MSG)=:foo.bar.baz%002%foo%:456789%123456789%123456789%123456789%12345678%💓] line 20 0 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678§§ line 21 0 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 [% (MSG)=:foo.bar.baz%002%foo%:2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_23456💓] line 19 0 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo§§ line 20 0 on_black,bright_white :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_23456§§ line 21 0 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 [% (NOTICE)=***%check%that%{esc|ape}s,%formatting%not%counting%into%wrap] line 20 0 on_black,bright_white < §§:§§:§§ :*.?.net NOTICE * :*** check that {esc|ape}s, formatting not counting§§ line 21 0 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 ee34d01..caa21bd 100644 --- a/src/tests/tui_prompt_basics.test +++ b/src/tests/tui_prompt_basics.test @@ -8,8 +8,9 @@ insert ./lib/enter_misc > # expected complaints on wrong command inputs -insert enter-unprefixed : +0 ? :foo -insert enter-unknown : +0 ? :foo +insert enter-unprefixed [?=foo] +insert enter-unknown [?=foo] + > /help foo log 0 # invalid prompt command: /help given argument(s) while none expected > /window diff --git a/src/tests/tui_status_line_scrolling.test b/src/tests/tui_status_line_scrolling.test index 3402d58..1a4db1e 100644 --- a/src/tests/tui_status_line_scrolling.test +++ b/src/tests/tui_status_line_scrolling.test @@ -3,64 +3,64 @@ insert ./lib/caps-neg-empty insert ./lib/001-to-usermode × new-hi -insert servermsglogged : +0 MSG ::winWIN_ID!~winWIN_ID@bar.bar PRIVMSG foo :hi there -log WIN_ID < [winWIN_ID] hi there +insert servermsglogged [% (MSG)=:win(WIN_ID)!~win(WIN_ID)@bar.bar%PRIVMSG%foo%:hi%there] +log (WIN_ID) < [win(WIN_ID)] hi there × status-line -line 22 0 on_black,bright_white LINE -line 22 FOCUS_X on_black,bright_white,bold [FOCUS_STR] +line 22 0 on_black,bright_white (LINE) +line 22 (FOCUS_X) on_black,bright_white,bold [(FOCUS_STR)] × ×--------------------------------- insert connect-to-connected insert caps-neg-empty insert 001-to-usermode -insert new-hi : + WIN_ID :3 -insert new-hi : + WIN_ID :4 -insert new-hi : + WIN_ID :5 -insert new-hi : + WIN_ID :6 -insert new-hi : + WIN_ID :7 -insert new-hi : + WIN_ID :8 -insert new-hi : + WIN_ID :9 -insert new-hi : + WIN_ID :10 -insert status-line : + FOCUS_X=15 FOCUS_STR=0 LINE ::start)=======(§§§ (1:32) (2:7) (3:2) (4:2) (5:2) (6:2) (7:2) (8:2) (9:2) (10:2)§§ +insert new-hi [(WIN_ID)=3] +insert new-hi [(WIN_ID)=4] +insert new-hi [(WIN_ID)=5] +insert new-hi [(WIN_ID)=6] +insert new-hi [(WIN_ID)=7] +insert new-hi [(WIN_ID)=8] +insert new-hi [(WIN_ID)=9] +insert new-hi [(WIN_ID)=10] +insert status-line [% (FOCUS_X)=15 (FOCUS_STR)=0 (LINE)=:start)=======(§§§%(1:32)%(2:7)%(3:2)%(4:2)%(5:2)%(6:2)%(7:2)%(8:2)%(9:2)%(10:2)§§] # grow windows list to maximum before ellipsis necessary -insert new-hi : + WIN_ID :11 -insert status-line : + FOCUS_X=8 FOCUS_STR=0 LINE ::start)(§§§ (1:33) (2:7) (3:2) (4:2) (5:2) (6:2) (7:2) (8:2) (9:2) (10:2) (11:2)§§ +insert new-hi [(WIN_ID)=11] +insert status-line [% (FOCUS_X)=8 (FOCUS_STR)=0 (LINE)=:start)(§§§%(1:33)%(2:7)%(3:2)%(4:2)%(5:2)%(6:2)%(7:2)%(8:2)%(9:2)%(10:2)%(11:2)§§] # grow list beyond, with focus on left force ellipsis to the right -insert new-hi : + WIN_ID :12 -insert status-line : + FOCUS_X=8 FOCUS_STR=0 LINE ::start)(§§§ (1:34) (2:7) (3:2) (4:2) (5:2) (6:2) (7:2) (8:2) (9:2) (10:2) (11:…>§§ +insert new-hi [(WIN_ID)=12] +insert status-line [% (FOCUS_X)=8 (FOCUS_STR)=0 (LINE)=:start)(§§§%(1:34)%(2:7)%(3:2)%(4:2)%(5:2)%(6:2)%(7:2)%(8:2)%(9:2)%(10:2)%(11:…>§§] # shrink (uncut) listing but grow title to the left more, forcing ellipsis still to cut earlier > /window 1 -insert status-line : + FOCUS_X=21 FOCUS_STR=1 LINE :foo.bar.baz:debug)(0 §§§ (2:7) (3:2) (4:2) (5:2) (6:2) (7:2) (8:2) (9:2) (10:2…>§§ +insert status-line [% (FOCUS_X)=21 (FOCUS_STR)=1 (LINE)=foo.bar.baz:debug)(0%§§§%(2:7)%(3:2)%(4:2)%(5:2)%(6:2)%(7:2)%(8:2)%(9:2)%(10:2…>§§] # further shrink uncut listing until ellipsis gone again; with focus not moving beyond left half, don't scroll yet > /window 3 -insert status-line : + FOCUS_X=28 FOCUS_STR=3 LINE :foo.bar.baz/win3)(0 1 (2:7) §§§ (4:2) (5:2) (6:2) (7:2) (8:2) (9:2) (10:2) (11…>§§ +insert status-line [% (FOCUS_X)=28 (FOCUS_STR)=3 (LINE)=foo.bar.baz/win3)(0%1%(2:7)%§§§%(4:2)%(5:2)%(6:2)%(7:2)%(8:2)%(9:2)%(10:2)%(11…>§§] > /window 4 -insert status-line : + FOCUS_X=30 FOCUS_STR=4 LINE :foo.bar.baz/win4)(0 1 (2:7) 3 §§§ (5:2) (6:2) (7:2) (8:2) (9:2) (10:2) (11:2) …>§§ +insert status-line [% (FOCUS_X)=30 (FOCUS_STR)=4 (LINE)=foo.bar.baz/win4)(0%1%(2:7)%3%§§§%(5:2)%(6:2)%(7:2)%(8:2)%(9:2)%(10:2)%(11:2)%…>§§] > /window 5 -insert status-line : + FOCUS_X=32 FOCUS_STR=5 LINE :foo.bar.baz/win5)(0 1 (2:7) 3 4 §§§ (6:2) (7:2) (8:2) (9:2) (10:2) (11:2) (12:2)§§ +insert status-line [% (FOCUS_X)=32 (FOCUS_STR)=5 (LINE)=foo.bar.baz/win5)(0%1%(2:7)%3%4%§§§%(6:2)%(7:2)%(8:2)%(9:2)%(10:2)%(11:2)%(12:2)§§] # grow uncut listing again, re-establishing ellipsis to the right -insert new-hi : + WIN_ID :13 -insert status-line : + FOCUS_X=36 FOCUS_STR=5 LINE :foo.bar.baz/win5)(0 (1:1) (2:7) 3 4 §§§ (6:2) (7:2) (8:2) (9:2) (10:2) (11:2) …>§§ +insert new-hi [(WIN_ID)=13] +insert status-line [% (FOCUS_X)=36 (FOCUS_STR)=5 (LINE)=foo.bar.baz/win5)(0%(1:1)%(2:7)%3%4%§§§%(6:2)%(7:2)%(8:2)%(9:2)%(10:2)%(11:2)%…>§§] # move focus into middle of listing, scrolling so that ellipsis on both side > /window 8 -insert status-line : + FOCUS_X=47 FOCUS_STR=8 LINE :foo.bar.baz/win8)<…:1) (2:7) 3 4 5 (6:2) (7:2) §§§ (9:2) (10:2) (11:2) (12:2) …>§§ +insert status-line [% (FOCUS_X)=47 (FOCUS_STR)=8 (LINE)=foo.bar.baz/win8)<…:1)%(2:7)%3%4%5%(6:2)%(7:2)%§§§%(9:2)%(10:2)%(11:2)%(12:2)%…>§§] # move focus further to the right, so that only ellipsis on the left > /window 9 -insert status-line : + FOCUS_X=49 FOCUS_STR=9 LINE :foo.bar.baz/win9)<…:1) (2:7) 3 4 5 (6:2) (7:2) 8 §§§ (10:2) (11:2) (12:2) (13:2)§§ +insert status-line [% (FOCUS_X)=49 (FOCUS_STR)=9 (LINE)=foo.bar.baz/win9)<…:1)%(2:7)%3%4%5%(6:2)%(7:2)%8%§§§%(10:2)%(11:2)%(12:2)%(13:2)§§] # shrink uncut listing to return to full view again (no ellipses) > /window 13 -insert status-line : + FOCUS_X=76 FOCUS_STR=13 LINE :foo.bar.baz/win13)(0 (1:1) (2:7) 3 4 5 (6:2) (7:2) 8 9 (10:2) (11:2) (12:2) §§§§§§ +insert status-line [% (FOCUS_X)=76 (FOCUS_STR)=13 (LINE)=foo.bar.baz/win13)(0%(1:1)%(2:7)%3%4%5%(6:2)%(7:2)%8%9%(10:2)%(11:2)%(12:2)%§§§§§§] # add new window, re-establishing ellipsis to the left, with focus remaining quite to the right -insert new-hi : + WIN_ID :14 -insert status-line : + FOCUS_X=69 FOCUS_STR=13 LINE :foo.bar.baz/win13)<…(2:7) 3 4 5 (6:2) (7:2) 8 9 (10:2) (11:2) (12:2) §§§§ (14:2)§§ +insert new-hi [(WIN_ID)=14] +insert status-line [% (FOCUS_X)=69 (FOCUS_STR)=13 (LINE)=foo.bar.baz/win13)<…(2:7)%3%4%5%(6:2)%(7:2)%8%9%(10:2)%(11:2)%(12:2)%§§§§%(14:2)§§] diff --git a/src/tests/userset.test b/src/tests/userset.test index 967044f..fade4e3 100644 --- a/src/tests/userset.test +++ b/src/tests/userset.test @@ -12,80 +12,80 @@ insert ./lib/user-set-to × connecting-to-nick > /reconnect -insert attempting-to-connected-w-password : + SECRET=foo WIN_IDS :2 +insert attempting-to-connected-w-password [SECRET=foo] × cap-to-auth insert get-sasl-plain log 1 $ sasl_auth_state set to: [attempting] log 1 > AUTHENTICATE :PLAIN -insert servermsglogged : + MSG :AUTHENTICATE + +insert servermsglogged [% (MSG)=AUTHENTICATE%+] log 1 > AUTHENTICATE :Zm9vAGZvbwBmb28= × end-auth -insert servermsglogged : + MSG ::foo.bar.baz NUMERIC foo :SASL authentication SASL_STATE -log 1 $ sasl_auth_state set to: [SASL authentication SASL_STATE] +insert servermsglogged [% (MSG)=:foo.bar.baz%(NUMERIC)%foo%:SASL%authentication%(SASL_STATE)] +log 1 $ sasl_auth_state set to: [SASL authentication (SASL_STATE)] log 1 > CAP :END × ×------------------------------------- -insert connect-w-password : + SECRET :foo +insert connect-w-password [SECRET=foo] # check not setting any user data, going straight to disconnect once possible -insert connecting-to-nick 1: +insert connecting-to-nick range=1: > /window 1 # -insert cmd-disconnect-0 :2 -insert cmd-disconnect-1 :-1 -insert disconnect1 1:-1 + WIN_IDS :2 +insert cmd-disconnect-0 range=:2 +insert cmd-disconnect-1 range=:-1 +insert disconnect1 range=1:-1 # check going straight to disconnect once possible, only receiving user data in QUIT message insert connecting-to-nick # -insert cmd-disconnect-0 :-2 + ~baz@baz.bar.foo :~foo@foo.foo -insert user-set-to : + USER_ID=me USERNICK=foo USERNAME=~foofoo USERHOST :foo.foo -insert cmd-disconnect-0 -2: + ~baz@baz.bar.foo :~foo@foo.foo -insert cmd-disconnect-1 :-1 -insert disconnect1 1: + WIN_IDS :2 +insert cmd-disconnect-0 range=:-2 [~baz@baz.bar.foo=~foo@foo.foo] +insert user-set-to [(USER_ID)=me (USER_NICK)=foo (USER_USER)=~foofoo (USER_HOST)=foo.foo] +insert cmd-disconnect-0 range=-2: [~baz@baz.bar.foo=~foo@foo.foo] +insert cmd-disconnect-1 range=:-1 +insert disconnect1 range=1: # check receiving nickname during set-up, other stuff only via QUIT message # check immediate insert connecting-to-nick -insert cap-msg : + CAPMSG :* LS : +insert cap-msg [% (CAP_MSG)=*%LS%:] log 1 > CAP :LIST -insert cap-msg : + CAPMSG :foo LIST : -insert user-set-to :1 + USER_ID=me USERNICK :foo +insert cap-msg [% (CAP_MSG)=foo%LIST%:] +insert user-set-to range=:1 [(USER_ID)=me (USER_NICK)=foo] log 1 > CAP :END # -insert cmd-disconnect-0 :-2 + ~baz@baz.bar.foo :~foo@foo.foo -insert user-set-to 1: + USER_ID=me USERNAME=~foofoo USERHOST :foo.foo -insert cmd-disconnect-0 -2: + ~baz@baz.bar.foo :~foo@foo.foo -insert cmd-disconnect-1 :-1 -insert disconnect1 1: + WIN_IDS :2 +insert cmd-disconnect-0 range=:-2 [~baz@baz.bar.foo=~foo@foo.foo] +insert user-set-to range=1: [(USER_ID)=me (USER_USER)=~foofoo (USER_HOST)=foo.foo] +insert cmd-disconnect-0 range=-2: [~baz@baz.bar.foo=~foo@foo.foo] +insert cmd-disconnect-1 range=:-1 +insert disconnect1 range=1: # check failing SASL authentication insert connecting-to-nick insert cap-to-auth -insert end-auth : + NUMERIC=904 SASL_STATE :failed +insert end-auth [(NUMERIC)=904 (SASL_STATE)=failed] # -insert cmd-disconnect-0 :-2 + ~baz@baz.bar.foo :~foo@foo.foo -insert user-set-to 1: + USER_ID=me USERNAME=~foofoo USERHOST :foo.foo -insert cmd-disconnect-0 -2: + ~baz@baz.bar.foo :~foo@foo.foo +insert cmd-disconnect-0 range=:-2 [~baz@baz.bar.foo=~foo@foo.foo] +insert user-set-to range=1: [(USER_ID)=me (USER_USER)=~foofoo (USER_HOST)=foo.foo] +insert cmd-disconnect-0 range=-2: [~baz@baz.bar.foo=~foo@foo.foo] insert cmd-disconnect-1 -insert disconnect1 1:-1 + WIN_IDS :2 +insert disconnect1 range=1:-1 log 1 $ sasl_auth_state set to: [] -insert disconnect1 -1: +insert disconnect1 range=-1: # check successful SASL authentication insert connecting-to-nick insert cap-to-auth -insert servermsglogged : + MSG ::foo.bar.baz 900 foo foo!foo@foo.foo foo :You are now logged in as foo -insert user-set-to 1: + USER_ID=me USERNAME=foo USERHOST :foo.foo +insert servermsglogged [% (MSG)=:foo.bar.baz%900%foo%foo!foo@foo.foo%foo%:You%are%now%logged%in%as%foo] +insert user-set-to range=1: [(USER_ID)=me (USER_USER)=foo (USER_HOST)=foo.foo] log 1 $ sasl_account set to: [foo] -insert end-auth : + NUMERIC=903 SASL_STATE :successful +insert end-auth [(NUMERIC)=903 (SASL_STATE)=successful] # check tilde addition and MODE setting -insert servermsglogged : + MSG ::foo!~foo@foo.foo MODE foo +aBc +insert servermsglogged [% (MSG)=:foo!~foo@foo.foo%MODE%foo%+aBc] log 1 $ users:me:user set to: [~foo] log 1 $ users:me:modes set to: [Bac] -insert servermsglogged : + MSG ::foo!~foo@foo.foo MODE foo -cba +insert servermsglogged [% (MSG)=:foo!~foo@foo.foo%MODE%foo%-cba] log 1 $ users:me:modes set to: [B] -- 2.30.2