From: Christian Heller Date: Sun, 19 Oct 2025 08:12:50 +0000 (+0200) Subject: Restructure color formatting. X-Git-Url: https://plomlompom.com/repos/%7B%7B%20web_path%20%7D%7D/static/%7B%7Bprefix%7D%7D/%27%29?a=commitdiff_plain;h=6b0cda0df25e5ceae661da22442f360f530c3c1a;p=ircplom Restructure color formatting. --- diff --git a/src/ircplom/testing.py b/src/ircplom/testing.py index 0c1d8ea..8883223 100644 --- a/src/ircplom/testing.py +++ b/src/ircplom/testing.py @@ -96,7 +96,7 @@ class TestTerminal(QueueMixin, TerminalInterface): text = text[:-len(_SCREENLINE_PADDING_SUFFIX)] text += ' ' * (self.size.x - len(text)) for idx, cell_expected in enumerate( - (self._attrs_tuple_from_str(attrs_str), c) for c in text): + (tuple(attrs_str.split(_SEP_1)), c) for c in text): if _SCREENLINE_IGNORE_CHAR == cell_expected[1]: continue cell_found = self._screen[y][idx] @@ -210,7 +210,7 @@ class _Playbook: fmt, msg_no_fmt = args[2].split(LOG_FMT_SEP, maxsplit=1) for c in fmt[:-1]: assert c in LOG_FMT_ATTRS - assert fmt[-1] == LOG_PREFIX_IN + assert fmt[0] == LOG_PREFIX_IN return [(f'{index_str}:s:0', _SEP_0.join((_MARK_SERVERMSG, args[0], msg_no_fmt))), (f'{index_str}:s:1', diff --git a/src/ircplom/tui_base.py b/src/ircplom/tui_base.py index 3ebf673..fca16f0 100644 --- a/src/ircplom/tui_base.py +++ b/src/ircplom/tui_base.py @@ -189,24 +189,24 @@ class _HistoryWidget(_ScrollableWidget): while len(wrapped) < self._sizes.y - bool(add_scroll_info): wrapped.insert(0, (self._PADDING_HISTORY_IDX_POS, '')) - to_write_w_attrs: list[tuple[Optional[str], str]] = [] + to_write_w_attrs: list[tuple[list[str], str]] = [] prev_history_idx_pos = self._COMPARAND_HISTORY_IDX_POS attrs: list[str] for history_idx_pos, line in wrapped: if history_idx_pos != prev_history_idx_pos: - attrs = ['on_black'] + attrs = [] for c in line.split(LOG_FMT_SEP, maxsplit=1)[0]: attrs += list(LOG_FMT_ATTRS.get(c, tuple())) prev_history_idx_pos = history_idx_pos - to_write_w_attrs += [(','.join(attrs), line)] + to_write_w_attrs += [(attrs, line)] if add_scroll_info: scroll_info = f'vvv [{(-1) * self._history_idx_neg}] ' scroll_info += 'v' * (self._sizes.x - len(scroll_info)) - to_write_w_attrs += [('reverse', scroll_info)] + to_write_w_attrs += [(['reverse'], scroll_info)] for idx, line_t in enumerate(to_write_w_attrs): - self._write(start_y=idx, attributes=line_t[0], msg=line_t[1]) + self._write(start_y=idx, attrs=line_t[0], msg=line_t[1]) self._newest_read_history_idx_pos\ = max(self._newest_read_history_idx_pos, wrapped[-1][0]) @@ -313,7 +313,7 @@ class PromptWidget(_ScrollableWidget): + _PROMPT_ELL_OUT) self._write(to_write[:cursor_x_to_write], self._sizes.y, padding=False) - self._write(to_write[cursor_x_to_write], attributes='reverse', + self._write(to_write[cursor_x_to_write], attrs=['reverse'], padding=False) self._write(to_write[cursor_x_to_write + 1:]) @@ -511,10 +511,6 @@ class TerminalInterface(ABC): def wrap(self, line: str) -> list[str]: 'Wrap line to list of lines fitting into terminal width.' - @staticmethod - def _attrs_tuple_from_str(attrs_str: str) -> tuple[str, ...]: - return tuple(attr for attr in attrs_str.split(',') if attr) - @abstractmethod def _length_to_terminal(self, text: str) -> int: pass @@ -526,7 +522,7 @@ class TerminalInterface(ABC): def write(self, msg: str = '', start_y: Optional[int] = None, - attributes: str = '', + attrs: Optional[list[str]] = None, padding: bool = True ) -> None: 'Print to terminal, with position, padding to line end, attributes.' @@ -538,7 +534,13 @@ class TerminalInterface(ABC): if (len_padding := self.size.x - end_x) and padding: msg += ' ' * len_padding end_x = self.size.x - self._write_w_attrs(msg, self._attrs_tuple_from_str(attributes)) + attrs_to_pass = ['on_black', 'bright_white'] + for attr in attrs or []: + if attr.startswith('bright_'): + attrs_to_pass[1] = attr + else: + attrs_to_pass += [attr] + self._write_w_attrs(msg, tuple(attrs_to_pass)) self._cursor_yx = _YX(self._cursor_yx.y, end_x) @abstractmethod @@ -570,8 +572,7 @@ class BaseTui(QueueMixin): now = str(datetime.now()) today, time = now[:10], now[11:19] for t in (('alert', LOG_FMT_ALERT), ('highlight', LOG_FMT_HIGHLIGHT)): - prefix = (t[1] if kwargs.get(t[0], False) else LOG_FMT_NONE - ) + prefix + prefix += t[1] if kwargs.get(t[0], False) else LOG_FMT_NONE msg = f'{prefix}{LOG_FMT_SEP}{time} {msg}' affected_win_indices = [] for win in self._log_target_wins(**kwargs): diff --git a/src/tests/_timeout_retries.test b/src/tests/_timeout_retries.test index 232ccdb..22f4be6 100644 --- a/src/tests/_timeout_retries.test +++ b/src/tests/_timeout_retries.test @@ -5,81 +5,81 @@ | clientwin-init-in | isupport-clear-in -log 1 ..$ isupport cleared -log 1 ..$ isupport:CHANTYPES set to: [#&] -log 1 ..$ isupport:PREFIX set to: [(ov)@+] -log 1 ..$ isupport:USERLEN set to: [10] +log 1 $.. isupport cleared +log 1 $.. isupport:CHANTYPES set to: [#&] +log 1 $.. isupport:PREFIX set to: [(ov)@+] +log 1 $.. isupport:USERLEN set to: [10] | isupport-clear-out -log 1 ..$ caps cleared -log 1 ..$ users cleared -log 1 ..$ channels cleared +log 1 $.. caps cleared +log 1 $.. users cleared +log 1 $.. channels cleared | clientwin-init-out -log , ..$ DISCONNECTED -log 1 ..$ hostname set to: [foo.bar.baz] +log , $.. DISCONNECTED +log 1 $.. hostname set to: [foo.bar.baz] | conn-init-retries-in -log 1 ..$ port set to: [10003] -log 1 ..$ nick_wanted set to: [foo] -log 1 ..$ user_wanted set to: [foobarbazquux] -log 1 ..$ realname set to: [baz] -log 1 ..$ password set to: [bar] +log 1 $.. port set to: [10003] +log 1 $.. nick_wanted set to: [foo] +log 1 $.. user_wanted set to: [foobarbazquux] +log 1 $.. realname set to: [baz] +log 1 $.. password set to: [bar] -log 1 ..$ connection_state set to: [connecting] -log 1 ..$ port set to: [10002] -log 1 ..$ connection_state set to: [failed to connect: FAKE TESTING TIMEOUT] -log 1 .!$ will retry connecting in 1 seconds +log 1 $.. connection_state set to: [connecting] +log 1 $.. port set to: [10002] +log 1 $.. connection_state set to: [failed to connect: FAKE TESTING TIMEOUT] +log 1 $!. will retry connecting in 1 seconds -log 1 ..$ connection_state set to: [connecting] -log 1 ..$ port set to: [10001] -log 1 ..$ connection_state set to: [failed to connect: FAKE TESTING TIMEOUT] -log 1 .!$ will retry connecting in 2 seconds +log 1 $.. connection_state set to: [connecting] +log 1 $.. port set to: [10001] +log 1 $.. connection_state set to: [failed to connect: FAKE TESTING TIMEOUT] +log 1 $!. will retry connecting in 2 seconds -log 1 ..$ connection_state set to: [connecting] -log 1 ..$ port set to: [10000] -log 1 ..$ connection_state set to: [failed to connect: FAKE TESTING TIMEOUT] -log 1 .!$ will retry connecting in 4 seconds +log 1 $.. connection_state set to: [connecting] +log 1 $.. port set to: [10000] +log 1 $.. connection_state set to: [failed to connect: FAKE TESTING TIMEOUT] +log 1 $!. will retry connecting in 4 seconds | conn-init-retries-out # with TestingClient finally having reduced port to 10000, connecting works now | conn-full-in | conn0-in -log 1 ..$ connection_state set to: [connecting] -log 1 ..$ connection_state set to: [connected] +log 1 $.. connection_state set to: [connecting] +log 1 $.. connection_state set to: [connected] | conn0-out -log , ..$ CONNECTED +log , $.. CONNECTED | conn1-in -log 1 ..> CAP LS :302 -log 1 ..> USER foobarbazquux 0 * :baz -log 1 ..> NICK :foo +log 1 >.. CAP LS :302 +log 1 >.. USER foobarbazquux 0 * :baz +log 1 >.. NICK :foo | conn1-out | conn-full-out # test retry chain also started by in-connection timeout servermsg 0 timeout -log 1 ..> PING :what's up? +log 1 >.. PING :what's up? servermsg 0 timeout servermsg 0 no timely PONG from server -log 1 ..$ connection_state set to: [broken: no timely PONG from server] +log 1 $.. connection_state set to: [broken: no timely PONG from server] repeat isupport-clear-in isupport-clear-out -log 1 ..$ connection_state set to: [] -log , ..$ DISCONNECTED -log 1 .!$ will retry connecting in 1 seconds +log 1 $.. connection_state set to: [] +log , $.. DISCONNECTED +log 1 $!. will retry connecting in 1 seconds repeat conn-full-in conn-full-out # on second server, check timed auto-retries don't activate after manual intervention > /connect baz.bar.foo:10003 foo:bar baz:foobarbazquux repeat clientwin-init-in clientwin-init-out 2 -log , ..$ DISCONNECTED -log 2 ..$ hostname set to: [baz.bar.foo] +log , $.. DISCONNECTED +log 2 $.. hostname set to: [baz.bar.foo] repeat conn-init-retries-in conn-init-retries-out 2 > /window 2 > /reconnect repeat conn0-in conn0-out 2 -log , ..$ CONNECTED +log , $.. CONNECTED repeat conn1-in conn1-out 2 wait 4 > /disconnect -log 2 ..> QUIT :ircplom says bye +log 2 >.. QUIT :ircplom says bye wait 4 > /quit -log 0 ..< +log 0 <.. diff --git a/src/tests/config.test b/src/tests/config.test index 179a5dc..45e2635 100644 --- a/src/tests/config.test +++ b/src/tests/config.test @@ -1,25 +1,25 @@ -log 0 ..# Found config at tests/config.toml, reading … -log 0 ..# Connecting: {'hostname': 'irc.test0.net', 'nickname': 'foo', 'password': 'bar', 'username': 'baz', 'realname': 'quux', 'port': 1234, 'channels': ['#test', '##testtest']} -log 1 ..$ isupport cleared -log 1 ..$ isupport:CHANTYPES set to: [#&] -log 1 ..$ isupport:PREFIX set to: [(ov)@+] -log 1 ..$ isupport:USERLEN set to: [10] -log 1 ..$ caps cleared -log 1 ..$ users cleared -log 1 ..$ channels cleared -log , ..$ DISCONNECTED -log 1 ..$ hostname set to: [irc.test0.net] -log 1 ..$ port set to: [1234] -log 1 ..$ nick_wanted set to: [foo] -log 1 ..$ user_wanted set to: [baz] -log 1 *.$ realname set to: [quux] -log 1 ..$ password set to: [bar] -log 1 ..$ connection_state set to: [connecting] -log 1 ..$ connection_state set to: [connected] -log , ..$ CONNECTED -log 1 ..> CAP LS :302 -log 1 *.> USER baz 0 * :quux -log 1 ..> NICK :foo +log 0 #.. Found config at tests/config.toml, reading … +log 0 #.. Connecting: {'hostname': 'irc.test0.net', 'nickname': 'foo', 'password': 'bar', 'username': 'baz', 'realname': 'quux', 'port': 1234, 'channels': ['#test', '##testtest']} +log 1 $.. isupport cleared +log 1 $.. isupport:CHANTYPES set to: [#&] +log 1 $.. isupport:PREFIX set to: [(ov)@+] +log 1 $.. isupport:USERLEN set to: [10] +log 1 $.. caps cleared +log 1 $.. users cleared +log 1 $.. channels cleared +log , $.. DISCONNECTED +log 1 $.. hostname set to: [irc.test0.net] +log 1 $.. port set to: [1234] +log 1 $.. nick_wanted set to: [foo] +log 1 $.. user_wanted set to: [baz] +log 1 $.* realname set to: [quux] +log 1 $.. password set to: [bar] +log 1 $.. connection_state set to: [connecting] +log 1 $.. connection_state set to: [connected] +log , $.. CONNECTED +log 1 >.. CAP LS :302 +log 1 >.* USER baz 0 * :quux +log 1 >.. NICK :foo > /quit log 0 .< diff --git a/src/tests/connect_disconnect_legalities.test b/src/tests/connect_disconnect_legalities.test index c5dd1cb..be8eadc 100644 --- a/src/tests/connect_disconnect_legalities.test +++ b/src/tests/connect_disconnect_legalities.test @@ -1,51 +1,51 @@ # to prepare, initiate connection > /connect foo.bar.baz foo bar:baz | isupport-clear-in -log 1 ..$ isupport cleared -log 1 ..$ isupport:CHANTYPES set to: [#&] -log 1 ..$ isupport:PREFIX set to: [(ov)@+] -log 1 ..$ isupport:USERLEN set to: [10] +log 1 $.. isupport cleared +log 1 $.. isupport:CHANTYPES set to: [#&] +log 1 $.. isupport:PREFIX set to: [(ov)@+] +log 1 $.. isupport:USERLEN set to: [10] | isupport-clear-out -log 1 ..$ caps cleared -log 1 ..$ users cleared -log 1 ..$ channels cleared -log , ..$ DISCONNECTED -log 1 ..$ hostname set to: [foo.bar.baz] -log 1 ..$ port set to: [-1] -log 1 ..$ nick_wanted set to: [foo] -log 1 ..$ user_wanted set to: [baz] -log 1 ..$ realname set to: [bar] -log 1 ..$ port set to: [6697] +log 1 $.. caps cleared +log 1 $.. users cleared +log 1 $.. channels cleared +log , $.. DISCONNECTED +log 1 $.. hostname set to: [foo.bar.baz] +log 1 $.. port set to: [-1] +log 1 $.. nick_wanted set to: [foo] +log 1 $.. user_wanted set to: [baz] +log 1 $.. realname set to: [bar] +log 1 $.. port set to: [6697] | connecting-in -log 1 ..$ connection_state set to: [connecting] -log 1 ..$ connection_state set to: [connected] -log , ..$ CONNECTED -log 1 ..> CAP LS :302 -log 1 ..> USER baz 0 * :bar -log 1 ..> NICK :foo +log 1 $.. connection_state set to: [connecting] +log 1 $.. connection_state set to: [connected] +log , $.. CONNECTED +log 1 >.. CAP LS :302 +log 1 >.. USER baz 0 * :bar +log 1 >.. NICK :foo | connecting-out # fail to reconnect while connected > /window 1 > /reconnect -log 1 .!$ not re-connecting since already connected +log 1 $!. not re-connecting since already connected # handle /disconnect on being connected > /disconnect -log 1 ..> QUIT :ircplom says bye -loggedservermsg 0 1 ..< ERROR :Closing link: (whatever@whatever.com) [Quit: ircplom says bye] -log 1 ..$ connection_state set to: [Closing link: (whatever@whatever.com) [Quit: ircplom says bye]] +log 1 >.. QUIT :ircplom says bye +loggedservermsg 0 1 <.. ERROR :Closing link: (whatever@whatever.com) [Quit: ircplom says bye] +log 1 $.. connection_state set to: [Closing link: (whatever@whatever.com) [Quit: ircplom says bye]] repeat isupport-clear-in isupport-clear-out -log 1 ..$ connection_state set to: [] -log , ..$ DISCONNECTED +log 1 $.. connection_state set to: [] +log , $.. DISCONNECTED # fail to disconnect when already disconnected > /disconnect -log 1 .!$ cannot send, connection seems closed +log 1 $!. cannot send, connection seems closed # succeed to re-connect after disconnect > /reconnect repeat connecting-in connecting-out > /quit -log 0 ..< +log 0 <.. diff --git a/src/tests/error_disconnects.test b/src/tests/error_disconnects.test index 4d96ff9..1ec55ba 100644 --- a/src/tests/error_disconnects.test +++ b/src/tests/error_disconnects.test @@ -1,37 +1,37 @@ # to prepare first test, initiate connected state > /connect foo.bar.baz foo bar:baz | isupport-clear-in -log 1 ..$ isupport cleared -log 1 ..$ isupport:CHANTYPES set to: [#&] -log 1 ..$ isupport:PREFIX set to: [(ov)@+] -log 1 ..$ isupport:USERLEN set to: [10] +log 1 $.. isupport cleared +log 1 $.. isupport:CHANTYPES set to: [#&] +log 1 $.. isupport:PREFIX set to: [(ov)@+] +log 1 $.. isupport:USERLEN set to: [10] | isupport-clear-out -log 1 ..$ caps cleared -log 1 ..$ users cleared -log 1 ..$ channels cleared -log , ..$ DISCONNECTED -log 1 ..$ hostname set to: [foo.bar.baz] -log 1 ..$ port set to: [-1] -log 1 ..$ nick_wanted set to: [foo] -log 1 ..$ user_wanted set to: [baz] -log 1 ..$ realname set to: [bar] -log 1 ..$ port set to: [6697] +log 1 $.. caps cleared +log 1 $.. users cleared +log 1 $.. channels cleared +log , $.. DISCONNECTED +log 1 $.. hostname set to: [foo.bar.baz] +log 1 $.. port set to: [-1] +log 1 $.. nick_wanted set to: [foo] +log 1 $.. user_wanted set to: [baz] +log 1 $.. realname set to: [bar] +log 1 $.. port set to: [6697] | connecting-in -log 1 ..$ connection_state set to: [connecting] -log 1 ..$ connection_state set to: [connected] -log , ..$ CONNECTED -log 1 ..> CAP LS :302 -log 1 ..> USER baz 0 * :bar -log 1 ..> NICK :foo +log 1 $.. connection_state set to: [connecting] +log 1 $.. connection_state set to: [connected] +log , $.. CONNECTED +log 1 >.. CAP LS :302 +log 1 >.. USER baz 0 * :bar +log 1 >.. NICK :foo | connecting-out # test default ERROR handling -loggedservermsg 0 1 ..< ERROR :abc def ghi -log 1 ..$ connection_state set to: [abc def ghi] +loggedservermsg 0 1 <.. ERROR :abc def ghi +log 1 $.. connection_state set to: [abc def ghi] | disconnecting-in repeat isupport-clear-in isupport-clear-out -log 1 ..$ connection_state set to: [] -log , ..$ DISCONNECTED +log 1 $.. connection_state set to: [] +log , $.. DISCONNECTED | disconnecting-out # to prepare next test, get back to connected state @@ -40,11 +40,11 @@ log , ..$ DISCONNECTED repeat connecting-in connecting-out # test "timed out)" ERROR handling -loggedservermsg 0 1 ..< ERROR :Closing link: (Connection timed out) -log 1 ..$ connection_state set to: [Closing link: (Connection timed out)] +loggedservermsg 0 1 <.. ERROR :Closing link: (Connection timed out) +log 1 $.. connection_state set to: [Closing link: (Connection timed out)] repeat disconnecting-in disconnecting-out -log 1 .!$ will retry connecting in 1 seconds +log 1 $!. will retry connecting in 1 seconds # over and out > /quit -log 0 ..< +log 0 <.. diff --git a/src/tests/pingpong.test b/src/tests/pingpong.test index 33466a2..d6b98a7 100644 --- a/src/tests/pingpong.test +++ b/src/tests/pingpong.test @@ -1,64 +1,64 @@ > /connect foo.bar.baz foo:bar baz:foobarbazquux | isupport-clear-in -log 1 ..$ isupport cleared -log 1 ..$ isupport:CHANTYPES set to: [#&] -log 1 ..$ isupport:PREFIX set to: [(ov)@+] -log 1 ..$ isupport:USERLEN set to: [10] +log 1 $.. isupport cleared +log 1 $.. isupport:CHANTYPES set to: [#&] +log 1 $.. isupport:PREFIX set to: [(ov)@+] +log 1 $.. isupport:USERLEN set to: [10] | isupport-clear-out -log 1 ..$ caps cleared -log 1 ..$ users cleared -log 1 ..$ channels cleared -log , ..$ DISCONNECTED -log 1 ..$ hostname set to: [foo.bar.baz] -log 1 ..$ port set to: [-1] -log 1 ..$ nick_wanted set to: [foo] -log 1 ..$ user_wanted set to: [foobarbazquux] -log 1 ..$ realname set to: [baz] -log 1 ..$ password set to: [bar] -log 1 ..$ port set to: [6697] +log 1 $.. caps cleared +log 1 $.. users cleared +log 1 $.. channels cleared +log , $.. DISCONNECTED +log 1 $.. hostname set to: [foo.bar.baz] +log 1 $.. port set to: [-1] +log 1 $.. nick_wanted set to: [foo] +log 1 $.. user_wanted set to: [foobarbazquux] +log 1 $.. realname set to: [baz] +log 1 $.. password set to: [bar] +log 1 $.. port set to: [6697] | conn0-in -log 1 ..$ connection_state set to: [connecting] -log 1 ..$ connection_state set to: [connected] +log 1 $.. connection_state set to: [connecting] +log 1 $.. connection_state set to: [connected] | conn0-out -log , ..$ CONNECTED +log , $.. CONNECTED | conn1-in -log 1 ..> CAP LS :302 -log 1 ..> USER foobarbazquux 0 * :baz -log 1 ..> NICK :foo +log 1 >.. CAP LS :302 +log 1 >.. USER foobarbazquux 0 * :baz +log 1 >.. NICK :foo | conn1-out # ensure we PONG properly -loggedservermsg 0 1 ..< PING :? -log 1 ..> PONG :? +loggedservermsg 0 1 <.. PING :? +log 1 >.. PONG :? # ping on timeout, go on as normal if PONG received | full-timeout-in | trigger-ping-in servermsg 0 timeout -log 1 ..> PING :what's up? +log 1 >.. PING :what's up? | trigger-ping-out -loggedservermsg 0 1 ..< :*.?.net PONG *.?.net :what's up? -loggedservermsg 0 1 ..< :*.?.net NOTICE * :*** Looking up your ident... -log 2 ..< (server) *** Looking up your ident... +loggedservermsg 0 1 <.. :*.?.net PONG *.?.net :what's up? +loggedservermsg 0 1 <.. :*.?.net NOTICE * :*** Looking up your ident... +log 2 <.. (server) *** Looking up your ident... # another timeout instead of pong? disconnect repeat trigger-ping-in trigger-ping-out servermsg 0 timeout servermsg 0 no timely PONG from server -log 1 ..$ connection_state set to: [broken: no timely PONG from server] +log 1 $.. connection_state set to: [broken: no timely PONG from server] repeat isupport-clear-in isupport-clear-out -log 1 ..$ connection_state set to: [] -log 2 ..$ DISCONNECTED -log 1 .!$ will retry connecting in 1 seconds +log 1 $.. connection_state set to: [] +log 2 $.. DISCONNECTED +log 1 $!. will retry connecting in 1 seconds | full-timeout-out # on re-connect, ensure timer cleared, i.e. only 2nd time-out will disconnect > /window 1 > /reconnect repeat conn0-in conn0-out -log 2 ..$ CONNECTED +log 2 $.. CONNECTED repeat conn1-in conn1-out repeat full-timeout-in full-timeout-out > /quit -log 0 ..< +log 0 <.. diff --git a/src/tests/test.test b/src/tests/test.test index c80cd1a..a6c2cee 100644 --- a/src/tests/test.test +++ b/src/tests/test.test @@ -2,399 +2,399 @@ > /connect foo.bar.baz foo:bar baz:foobarbazquux | standard-clears-in | isupport-clear-in -log 1 ..$ isupport cleared -log 1 ..$ isupport:CHANTYPES set to: [#&] -log 1 ..$ isupport:PREFIX set to: [(ov)@+] -log 1 ..$ isupport:USERLEN set to: [10] +log 1 $.. isupport cleared +log 1 $.. isupport:CHANTYPES set to: [#&] +log 1 $.. isupport:PREFIX set to: [(ov)@+] +log 1 $.. isupport:USERLEN set to: [10] | isupport-clear-out -log 1 ..$ caps cleared -log 1 ..$ users cleared -log 1 ..$ channels cleared -log , ..$ DISCONNECTED +log 1 $.. caps cleared +log 1 $.. users cleared +log 1 $.. channels cleared +log , $.. DISCONNECTED | standard-clears-out # connect with values set by /connect, init CAP negotation -log 1 ..$ hostname set to: [foo.bar.baz] -log 1 ..$ port set to: [-1] -log 1 ..$ nick_wanted set to: [foo] -log 1 ..$ user_wanted set to: [foobarbazquux] -log 1 ..$ realname set to: [baz] -log 1 ..$ password set to: [bar] +log 1 $.. hostname set to: [foo.bar.baz] +log 1 $.. port set to: [-1] +log 1 $.. nick_wanted set to: [foo] +log 1 $.. user_wanted set to: [foobarbazquux] +log 1 $.. realname set to: [baz] +log 1 $.. password set to: [bar] | conn-in -log 1 ..$ port set to: [6697] +log 1 $.. port set to: [6697] | conn0-in -log 1 ..$ connection_state set to: [connecting] -log 1 ..$ connection_state set to: [connected] +log 1 $.. connection_state set to: [connecting] +log 1 $.. connection_state set to: [connected] | conn0-out -log , ..$ CONNECTED +log , $.. CONNECTED | conn1-in -log 1 ..> CAP LS :302 +log 1 >.. CAP LS :302 | conn-out -log 1 ..> USER foobarbazquux 0 * :baz -log 1 ..> NICK :foo +log 1 >.. USER foobarbazquux 0 * :baz +log 1 >.. NICK :foo # expect some NOTICE and PING to process/reply during initiation -loggedservermsg 0 1 ..< :*.?.net NOTICE * :*** Looking up your ident... -log 2 ..< (server) *** Looking up your ident... -loggedservermsg 0 1 ..< :*.?.net NOTICE * :*** Looking up your hostname... -log 2 ..< (server) *** Looking up your hostname... -loggedservermsg 0 1 ..< :*.?.net NOTICE * :*** Found your hostname (baz.bar.foo) -log 2 ..< (server) *** Found your hostname (baz.bar.foo) -loggedservermsg 0 1 ..< PING :? -log 1 ..> PONG :? +loggedservermsg 0 1 <.. :*.?.net NOTICE * :*** Looking up your ident... +log 2 <.. (server) *** Looking up your ident... +loggedservermsg 0 1 <.. :*.?.net NOTICE * :*** Looking up your hostname... +log 2 <.. (server) *** Looking up your hostname... +loggedservermsg 0 1 <.. :*.?.net NOTICE * :*** Found your hostname (baz.bar.foo) +log 2 <.. (server) *** Found your hostname (baz.bar.foo) +loggedservermsg 0 1 <.. PING :? +log 1 >.. PONG :? # handle 433 -loggedservermsg 0 1 ..< :*.?.net 433 * foo :Nickname already in use -log 1 .!$ nickname already in use, trying increment -log 1 ..> NICK :foo0 -loggedservermsg 0 1 ..< :*.?.net 433 * foo0 :Nickname already in use -log 1 .!$ nickname already in use, trying increment -log 1 ..> NICK :foo1 +loggedservermsg 0 1 <.. :*.?.net 433 * foo :Nickname already in use +log 1 $!. nickname already in use, trying increment +log 1 >.. NICK :foo0 +loggedservermsg 0 1 <.. :*.?.net 433 * foo0 :Nickname already in use +log 1 $!. nickname already in use, trying increment +log 1 >.. NICK :foo1 # collect server capabilities -loggedservermsg 0 1 ..< :*.?.net CAP * LS : foo bar sasl=PLAIN,EXTERNAL baz cap-notify -log 1 ..> CAP REQ :sasl -log 1 ..> CAP :LIST -loggedservermsg 0 1 ..< :*.?.net CAP * ACK :sasl -loggedservermsg 0 1 ..< :*.?.net CAP * LIST :cap-notify sasl -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:cap-notify:enabled set to: [True] -log 1 ..$ caps:foo:data set to: [] -log 1 ..$ caps:sasl:data set to: [] -log 1 ..$ caps:sasl:data set to: [PLAIN,EXTERNAL] -log 1 ..$ caps:sasl:enabled set to: [True] +loggedservermsg 0 1 <.. :*.?.net CAP * LS : foo bar sasl=PLAIN,EXTERNAL baz cap-notify +log 1 >.. CAP REQ :sasl +log 1 >.. CAP :LIST +loggedservermsg 0 1 <.. :*.?.net CAP * ACK :sasl +loggedservermsg 0 1 <.. :*.?.net CAP * LIST :cap-notify sasl +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:cap-notify:enabled set to: [True] +log 1 $.. caps:foo:data set to: [] +log 1 $.. caps:sasl:data set to: [] +log 1 $.. caps:sasl:data set to: [PLAIN,EXTERNAL] +log 1 $.. caps:sasl:enabled set to: [True] # authenticate via SASL, collect items of user identity -log 1 ..$ sasl_auth_state set to: [attempting] -log 1 ..> AUTHENTICATE :PLAIN -loggedservermsg 0 1 ..< AUTHENTICATE + -log 1 ..> AUTHENTICATE :Zm9vAGZvbwBiYXI= -loggedservermsg 0 1 ..< :foo.bar.baz 900 foo1 foo1!foobarbazq@baz.bar.foo foo :You are now logged in as foo -log 1 ..$ users:me:nick set to: [?] -log 1 ..$ users:me:nick set to: [foo1] -log 1 ..$ users:me:user set to: [foobarbazq] -log 1 ..$ users:me:host set to: [baz.bar.foo] -log 1 ..$ sasl_account set to: [foo] -loggedservermsg 0 1 ..< :foo.bar.baz 903 foo1 :SASL authentication successful -log 1 ..$ sasl_auth_state set to: [SASL authentication successful] +log 1 $.. sasl_auth_state set to: [attempting] +log 1 >.. AUTHENTICATE :PLAIN +loggedservermsg 0 1 <.. AUTHENTICATE + +log 1 >.. AUTHENTICATE :Zm9vAGZvbwBiYXI= +loggedservermsg 0 1 <.. :foo.bar.baz 900 foo1 foo1!foobarbazq@baz.bar.foo foo :You are now logged in as foo +log 1 $.. users:me:nick set to: [?] +log 1 $.. users:me:nick set to: [foo1] +log 1 $.. users:me:user set to: [foobarbazq] +log 1 $.. users:me:host set to: [baz.bar.foo] +log 1 $.. sasl_account set to: [foo] +loggedservermsg 0 1 <.. :foo.bar.baz 903 foo1 :SASL authentication successful +log 1 $.. sasl_auth_state set to: [SASL authentication successful] # finish CAP negotation, thus login procedure -log 1 ..> CAP :END +log 1 >.. CAP :END # of all pre-MOTD greeting messages, only process isupports -loggedservermsg 0 1 ..< :foo.bar.baz 001 foo1 :Welcome to the foo.bar.baz network +loggedservermsg 0 1 <.. :foo.bar.baz 001 foo1 :Welcome to the foo.bar.baz network | conn1-out | conn2-in -loggedservermsg 0 1 ..< :foo.bar.baz 002 foo1 :Your host is foo.bar.baz -loggedservermsg 0 1 ..< :foo.bar.baz 003 foo1 :This server was created Jan 1 2020 -loggedservermsg 0 1 ..< :foo.bar.baz 004 foo1 foo.bar.baz ircserver-1.0 abc def ghi -loggedservermsg 0 1 ..< :foo.bar.baz 005 foo1 ABC=DEF GHI=JKL :are supported by this server -log 1 ..$ isupport:ABC set to: [DEF] -log 1 ..$ isupport:GHI set to: [JKL] -loggedservermsg 0 1 ..< :foo.bar.baz 005 foo1 MNO=PQR STU=VWX Y=Z :are supported by this server -log 1 ..$ isupport:MNO set to: [PQR] -log 1 ..$ isupport:STU set to: [VWX] -log 1 ..$ isupport:Y set to: [Z] -loggedservermsg 0 1 ..< :foo.bar.baz 251 foo1 :There are 10 users and 1000 invisible on 5 servers -loggedservermsg 0 1 ..< :foo.bar.baz 252 foo1 7 :IRC Operators online -loggedservermsg 0 1 ..< :foo.bar.baz 253 foo1 4 :unknown connection(s) -loggedservermsg 0 1 ..< :foo.bar.baz 254 foo1 800 :channels formed -loggedservermsg 0 1 ..< :foo.bar.baz 255 foo1 :I have 100 clients and 1 serveres -loggedservermsg 0 1 ..< :foo.bar.baz 265 foo1 100 150 :Current local users 100, max 150 -loggedservermsg 0 1 ..< :foo.bar.baz 266 foo1 1010 1050 :Current global users 1010, max 1050 -loggedservermsg 0 1 ..< :foo.bar.baz 250 foo1 :Highest connection count: 151 (150 clients) (1080 connections received) +loggedservermsg 0 1 <.. :foo.bar.baz 002 foo1 :Your host is foo.bar.baz +loggedservermsg 0 1 <.. :foo.bar.baz 003 foo1 :This server was created Jan 1 2020 +loggedservermsg 0 1 <.. :foo.bar.baz 004 foo1 foo.bar.baz ircserver-1.0 abc def ghi +loggedservermsg 0 1 <.. :foo.bar.baz 005 foo1 ABC=DEF GHI=JKL :are supported by this server +log 1 $.. isupport:ABC set to: [DEF] +log 1 $.. isupport:GHI set to: [JKL] +loggedservermsg 0 1 <.. :foo.bar.baz 005 foo1 MNO=PQR STU=VWX Y=Z :are supported by this server +log 1 $.. isupport:MNO set to: [PQR] +log 1 $.. isupport:STU set to: [VWX] +log 1 $.. isupport:Y set to: [Z] +loggedservermsg 0 1 <.. :foo.bar.baz 251 foo1 :There are 10 users and 1000 invisible on 5 servers +loggedservermsg 0 1 <.. :foo.bar.baz 252 foo1 7 :IRC Operators online +loggedservermsg 0 1 <.. :foo.bar.baz 253 foo1 4 :unknown connection(s) +loggedservermsg 0 1 <.. :foo.bar.baz 254 foo1 800 :channels formed +loggedservermsg 0 1 <.. :foo.bar.baz 255 foo1 :I have 100 clients and 1 serveres +loggedservermsg 0 1 <.. :foo.bar.baz 265 foo1 100 150 :Current local users 100, max 150 +loggedservermsg 0 1 <.. :foo.bar.baz 266 foo1 1010 1050 :Current global users 1010, max 1050 +loggedservermsg 0 1 <.. :foo.bar.baz 250 foo1 :Highest connection count: 151 (150 clients) (1080 connections received) # collect MOTD into a single output (rather than line-by-line) -loggedservermsg 0 1 ..< :foo.bar.baz 375 foo1 :- foo.bar.baz Message of the Day - -loggedservermsg 0 1 ..< :foo.bar.baz 372 foo1 :- Howdy! - -loggedservermsg 0 1 ..< :foo.bar.baz 372 foo1 :- Welcome! - -loggedservermsg 0 1 ..< :foo.bar.baz 372 foo1 :- (to this server) - -loggedservermsg 0 1 ..< :foo.bar.baz 376 foo1 :End of /MOTD command -log 1 ..$ motd set to: -log 1 ..$ - Howdy! - -log 1 ..$ - Welcome! - -log 1 ..$ - (to this server) - +loggedservermsg 0 1 <.. :foo.bar.baz 375 foo1 :- foo.bar.baz Message of the Day - +loggedservermsg 0 1 <.. :foo.bar.baz 372 foo1 :- Howdy! - +loggedservermsg 0 1 <.. :foo.bar.baz 372 foo1 :- Welcome! - +loggedservermsg 0 1 <.. :foo.bar.baz 372 foo1 :- (to this server) - +loggedservermsg 0 1 <.. :foo.bar.baz 376 foo1 :End of /MOTD command +log 1 $.. motd set to: +log 1 $.. - Howdy! - +log 1 $.. - Welcome! - +log 1 $.. - (to this server) - # collect user mode -loggedservermsg 0 1 ..< :foo1 MODE foo1 :+Ziw -log 1 ..$ users:me:modes set to: [+Ziw] +loggedservermsg 0 1 <.. :foo1 MODE foo1 :+Ziw +log 1 $.. users:me:modes set to: [+Ziw] # handle bot query NOTICE -loggedservermsg 0 1 ..< :SaslServ!SaslServ@services.bar.baz NOTICE foo1 :Last login from ~foobarbaz@foo.bar.baz on Jan 1 22:00:00 2021 +0000. -log 3 ..< (SaslServ) Last login from ~foobarbaz@foo.bar.baz on Jan 1 22:00:00 2021 +0000. +loggedservermsg 0 1 <.. :SaslServ!SaslServ@services.bar.baz NOTICE foo1 :Last login from ~foobarbaz@foo.bar.baz on Jan 1 22:00:00 2021 +0000. +log 3 <.. (SaslServ) Last login from ~foobarbaz@foo.bar.baz on Jan 1 22:00:00 2021 +0000. | conn2-out # check difference in available commands when switching to client window > /join #test -log 0 .!# invalid prompt command: /join unknown +log 0 #!. invalid prompt command: /join unknown > /list -log 0 ..# windows available via /window: -log 0 ..# 0) :start -log 0 ..# 1) foo.bar.baz:debug -log 0 ..# 2) foo.bar.baz:server -log 0 ..# 3) foo.bar.baz/SaslServ +log 0 #.. windows available via /window: +log 0 #.. 0) :start +log 0 #.. 1) foo.bar.baz:debug +log 0 #.. 2) foo.bar.baz:server +log 0 #.. 3) foo.bar.baz/SaslServ | conn3-in > /window 1 > /help -log 1 ..# commands available in this window: -log 1 ..# /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME] -log 1 ..# /disconnect [QUIT_MSG] -log 1 ..# /help -log 1 ..# /join CHANNEL -log 1 ..# /list -log 1 ..# /nick NEW_NICK -log 1 ..# /privmsg TARGET MSG -log 1 ..# /prompt_enter -log 1 ..# /quit -log 1 ..# /raw VERB [PARAMS_STR] -log 1 ..# /reconnect -log 1 ..# /window TOWARDS -log 1 ..# /window.disconnect [QUIT_MSG] -log 1 ..# /window.history.scroll DIRECTION -log 1 ..# /window.join CHANNEL -log 1 ..# /window.nick NEW_NICK -log 1 ..# /window.paste -log 1 ..# /window.privmsg TARGET MSG -log 1 ..# /window.prompt.backspace -log 1 ..# /window.prompt.move_cursor DIRECTION -log 1 ..# /window.prompt.scroll DIRECTION -log 1 ..# /window.raw VERB [PARAMS_STR] -log 1 ..# /window.reconnect +log 1 #.. commands available in this window: +log 1 #.. /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME] +log 1 #.. /disconnect [QUIT_MSG] +log 1 #.. /help +log 1 #.. /join CHANNEL +log 1 #.. /list +log 1 #.. /nick NEW_NICK +log 1 #.. /privmsg TARGET MSG +log 1 #.. /prompt_enter +log 1 #.. /quit +log 1 #.. /raw VERB [PARAMS_STR] +log 1 #.. /reconnect +log 1 #.. /window TOWARDS +log 1 #.. /window.disconnect [QUIT_MSG] +log 1 #.. /window.history.scroll DIRECTION +log 1 #.. /window.join CHANNEL +log 1 #.. /window.nick NEW_NICK +log 1 #.. /window.paste +log 1 #.. /window.privmsg TARGET MSG +log 1 #.. /window.prompt.backspace +log 1 #.. /window.prompt.move_cursor DIRECTION +log 1 #.. /window.prompt.scroll DIRECTION +log 1 #.. /window.raw VERB [PARAMS_STR] +log 1 #.. /window.reconnect # test recoverable 432 > /nick @foo -log 1 ..> NICK :@foo -loggedservermsg 0 1 ..< :*.?.net 432 foo1 @foo :Erroneous nickname -log 1 .!$ nickname refused for bad format, keeping current one +log 1 >.. NICK :@foo +loggedservermsg 0 1 <.. :*.?.net 432 foo1 @foo :Erroneous nickname +log 1 $!. nickname refused for bad format, keeping current one # join channel, collect topic, residents; update me:user from JOIN message; ensure topic.who not affecting users DB > /join #test -log 1 ..> JOIN :#test -loggedservermsg 0 1 ..< :foo1!~foobarbaz@baz.bar.foo JOIN #test -log 1 ..$ users:me:user set to: [~foobarbaz] -loggedservermsg 0 1 ..< :foo.bar.baz 332 foo1 #test :foo bar baz -log 1 ..$ channels:#test:exits cleared -loggedservermsg 0 1 ..< :foo.bar.baz 333 foo1 #test bar!~bar@OLD.bar.bar 1234567890 -log 1 ..$ channels:#test:topic set to: [Topic(what='foo bar baz', who=NickUserHost(nick='bar', user='~bar', host='OLD.bar.bar'))] -log 4 ..$ bar!~bar@OLD.bar.bar set topic: foo bar baz -loggedservermsg 0 1 ..< :foo.bar.baz 353 foo1 @ #test :foo1 @bar -log 1 ..$ users:1:nick set to: [?] -log 1 ..$ users:1:nick set to: [bar] -loggedservermsg 0 1 ..< :foo.bar.baz 366 foo1 #test :End of /NAMES list. -log 1 ..$ channels:#test:user_ids set to: -log 1 ..$ 1 -log 1 ..$ me -log 4 ..$ residents: bar, foo1 +log 1 >.. JOIN :#test +loggedservermsg 0 1 <.. :foo1!~foobarbaz@baz.bar.foo JOIN #test +log 1 $.. users:me:user set to: [~foobarbaz] +loggedservermsg 0 1 <.. :foo.bar.baz 332 foo1 #test :foo bar baz +log 1 $.. channels:#test:exits cleared +loggedservermsg 0 1 <.. :foo.bar.baz 333 foo1 #test bar!~bar@OLD.bar.bar 1234567890 +log 1 $.. channels:#test:topic set to: [Topic(what='foo bar baz', who=NickUserHost(nick='bar', user='~bar', host='OLD.bar.bar'))] +log 4 $.. bar!~bar@OLD.bar.bar set topic: foo bar baz +loggedservermsg 0 1 <.. :foo.bar.baz 353 foo1 @ #test :foo1 @bar +log 1 $.. users:1:nick set to: [?] +log 1 $.. users:1:nick set to: [bar] +loggedservermsg 0 1 <.. :foo.bar.baz 366 foo1 #test :End of /NAMES list. +log 1 $.. channels:#test:user_ids set to: +log 1 $.. 1 +log 1 $.. me +log 4 $.. residents: bar, foo1 # deliver PRIVMSG to channel window, update sender's user+host from metadata -loggedservermsg 0 1 ..< :bar!~bar@bar.bar PRIVMSG #test :hi there -log 1 ..$ users:1:user set to: [~bar] -log 1 ..$ users:1:host set to: [bar.bar] -log 4 ..< [bar] hi there +loggedservermsg 0 1 <.. :bar!~bar@bar.bar PRIVMSG #test :hi there +log 1 $.. users:1:user set to: [~bar] +log 1 $.. users:1:host set to: [bar.bar] +log 4 <.. [bar] hi there # check _changing_ TOPIC message is communicated to channel window, as long as either content or who change -loggedservermsg 0 1 ..< :bar!~bar@bar.bar TOPIC #test :foo bar baz -log 1 ..$ channels:#test:topic set to: [Topic(what='foo bar baz', who=NickUserHost(nick='bar', user='~bar', host='bar.bar'))] -log 4 ..$ bar!~bar@bar.bar set topic: foo bar baz -loggedservermsg 0 1 ..< :bar!~bar@bar.bar TOPIC #test :foo bar baz -loggedservermsg 0 1 ..< :bar!~bar@bar.bar TOPIC #test :abc def ghi -log 1 ..$ channels:#test:topic set to: [Topic(what='abc def ghi', who=NickUserHost(nick='bar', user='~bar', host='bar.bar'))] -log 4 ..$ bar!~bar@bar.bar set topic: abc def ghi +loggedservermsg 0 1 <.. :bar!~bar@bar.bar TOPIC #test :foo bar baz +log 1 $.. channels:#test:topic set to: [Topic(what='foo bar baz', who=NickUserHost(nick='bar', user='~bar', host='bar.bar'))] +log 4 $.. bar!~bar@bar.bar set topic: foo bar baz +loggedservermsg 0 1 <.. :bar!~bar@bar.bar TOPIC #test :foo bar baz +loggedservermsg 0 1 <.. :bar!~bar@bar.bar TOPIC #test :abc def ghi +log 1 $.. channels:#test:topic set to: [Topic(what='abc def ghi', who=NickUserHost(nick='bar', user='~bar', host='bar.bar'))] +log 4 $.. bar!~bar@bar.bar set topic: abc def ghi # process non-self channel JOIN -loggedservermsg 0 1 ..< :baz!~baz@baz.baz JOIN :#test -log 1 ..$ users:2:nick set to: [?] -log 1 ..$ users:2:nick set to: [baz] -log 1 ..$ users:2:user set to: [~baz] -log 1 ..$ users:2:host set to: [baz.baz] -log 1 ..$ channels:#test:user_ids set to: -log 1 ..$ 1 -log 1 ..$ 2 -log 1 ..$ me -log 4 ..$ baz!~baz@baz.baz joins +loggedservermsg 0 1 <.. :baz!~baz@baz.baz JOIN :#test +log 1 $.. users:2:nick set to: [?] +log 1 $.. users:2:nick set to: [baz] +log 1 $.. users:2:user set to: [~baz] +log 1 $.. users:2:host set to: [baz.baz] +log 1 $.. channels:#test:user_ids set to: +log 1 $.. 1 +log 1 $.. 2 +log 1 $.. me +log 4 $.. baz!~baz@baz.baz joins # join second channel with partial residents identity to compare distribution of resident-specific messages > /join #testtest -log 1 ..> JOIN :#testtest -loggedservermsg 0 1 ..< :foo1!~foobarbaz@baz.bar.foo JOIN #testtest -loggedservermsg 0 1 ..< :foo.bar.baz 332 foo1 #testtest :baz bar foo -log 1 ..$ channels:#testtest:exits cleared -loggedservermsg 0 1 ..< :foo.bar.baz 333 foo1 #testtest bar!~bar@OLD.bar.bar 1234567890 -log 1 ..$ channels:#testtest:topic set to: [Topic(what='baz bar foo', who=NickUserHost(nick='bar', user='~bar', host='OLD.bar.bar'))] -log 5 ..$ bar!~bar@OLD.bar.bar set topic: baz bar foo -loggedservermsg 0 1 ..< :foo.bar.baz 353 foo1 @ #testtest :foo1 baz -loggedservermsg 0 1 ..< :foo.bar.baz 366 foo1 #testtest :End of /NAMES list. -log 1 ..$ channels:#testtest:user_ids set to: -log 1 ..$ 2 -log 1 ..$ me -log 5 ..$ residents: baz, foo1 +log 1 >.. JOIN :#testtest +loggedservermsg 0 1 <.. :foo1!~foobarbaz@baz.bar.foo JOIN #testtest +loggedservermsg 0 1 <.. :foo.bar.baz 332 foo1 #testtest :baz bar foo +log 1 $.. channels:#testtest:exits cleared +loggedservermsg 0 1 <.. :foo.bar.baz 333 foo1 #testtest bar!~bar@OLD.bar.bar 1234567890 +log 1 $.. channels:#testtest:topic set to: [Topic(what='baz bar foo', who=NickUserHost(nick='bar', user='~bar', host='OLD.bar.bar'))] +log 5 $.. bar!~bar@OLD.bar.bar set topic: baz bar foo +loggedservermsg 0 1 <.. :foo.bar.baz 353 foo1 @ #testtest :foo1 baz +loggedservermsg 0 1 <.. :foo.bar.baz 366 foo1 #testtest :End of /NAMES list. +log 1 $.. channels:#testtest:user_ids set to: +log 1 $.. 2 +log 1 $.. me +log 5 $.. residents: baz, foo1 # handle query window with known user -loggedservermsg 0 1 ..< :baz!~baz@baz.baz PRIVMSG foo1 :hi there -log 6 ..< [baz] hi there +loggedservermsg 0 1 <.. :baz!~baz@baz.baz PRIVMSG foo1 :hi there +log 6 <.. [baz] hi there > /privmsg baz hello, how is it going -log 1 ..> PRIVMSG baz :hello, how is it going -log 6 ..> [foo1] hello, how is it going -loggedservermsg 0 1 ..< :baz!~baz@baz.baz PRIVMSG foo1 :fine! -log 6 ..< [baz] fine! +log 1 >.. PRIVMSG baz :hello, how is it going +log 6 >.. [foo1] hello, how is it going +loggedservermsg 0 1 <.. :baz!~baz@baz.baz PRIVMSG foo1 :fine! +log 6 <.. [baz] fine! # handle failure to query absent user > /privmsg barbar hello! -log 1 ..> PRIVMSG barbar :hello! -log 7 ..> [foo1] hello! -loggedservermsg 0 1 ..< :*.?.net 401 foo1 barbar :No such nick/channel -log 7 .!$ barbar not online +log 1 >.. PRIVMSG barbar :hello! +log 7 >.. [foo1] hello! +loggedservermsg 0 1 <.. :*.?.net 401 foo1 barbar :No such nick/channel +log 7 $!. barbar not online # handle non-self renaming -loggedservermsg 0 1 ..< :baz!~baz@baz.baz NICK :bazbaz -log 1 ..$ users:2:nick set to: [bazbaz] -log 4,5,6 ..$ baz!~baz@baz.baz renames bazbaz +loggedservermsg 0 1 <.. :baz!~baz@baz.baz NICK :bazbaz +log 1 $.. users:2:nick set to: [bazbaz] +log 4,5,6 $.. baz!~baz@baz.baz renames bazbaz # handle non-self PART in one of two inhabited channels, preserve identity into re-JOIN -loggedservermsg 0 1 ..< :bazbaz!~baz@baz.baz PART :#test -log 1 ..$ channels:#test:exits:2 set to: [P] -log 1 ..$ channels:#test:user_ids set to: -log 1 ..$ 1 -log 1 ..$ me -log 4 ..$ bazbaz!~baz@baz.baz parts -log 1 ..$ channels:#test:exits:2 cleared -loggedservermsg 0 1 ..< :bazbaz!~baz@baz.baz JOIN :#test -log 1 ..$ channels:#test:user_ids set to: -log 1 ..$ 1 -log 1 ..$ 2 -log 1 ..$ me -log 4 ..$ bazbaz!~baz@baz.baz joins +loggedservermsg 0 1 <.. :bazbaz!~baz@baz.baz PART :#test +log 1 $.. channels:#test:exits:2 set to: [P] +log 1 $.. channels:#test:user_ids set to: +log 1 $.. 1 +log 1 $.. me +log 4 $.. bazbaz!~baz@baz.baz parts +log 1 $.. channels:#test:exits:2 cleared +loggedservermsg 0 1 <.. :bazbaz!~baz@baz.baz JOIN :#test +log 1 $.. channels:#test:user_ids set to: +log 1 $.. 1 +log 1 $.. 2 +log 1 $.. me +log 4 $.. bazbaz!~baz@baz.baz joins # handle non-self PART in only inhabited channel, lose identity, re-join as new identity -loggedservermsg 0 1 ..< :bar!~bar@bar.bar PART :#test -log 1 ..$ channels:#test:exits:1 set to: [P] -log 1 ..$ channels:#test:user_ids set to: -log 1 ..$ 2 -log 1 ..$ me -log 4 ..$ bar!~bar@bar.bar parts -log 1 ..$ channels:#test:exits:1 cleared -log 1 ..$ users:1 cleared -loggedservermsg 0 1 ..< :bar!~bar@bar.bar JOIN :#test -log 1 ..$ users:3:nick set to: [?] -log 1 ..$ users:3:nick set to: [bar] -log 1 ..$ users:3:user set to: [~bar] -log 1 ..$ users:3:host set to: [bar.bar] -log 1 ..$ channels:#test:user_ids set to: -log 1 ..$ 2 -log 1 ..$ 3 -log 1 ..$ me -log 4 ..$ bar!~bar@bar.bar joins +loggedservermsg 0 1 <.. :bar!~bar@bar.bar PART :#test +log 1 $.. channels:#test:exits:1 set to: [P] +log 1 $.. channels:#test:user_ids set to: +log 1 $.. 2 +log 1 $.. me +log 4 $.. bar!~bar@bar.bar parts +log 1 $.. channels:#test:exits:1 cleared +log 1 $.. users:1 cleared +loggedservermsg 0 1 <.. :bar!~bar@bar.bar JOIN :#test +log 1 $.. users:3:nick set to: [?] +log 1 $.. users:3:nick set to: [bar] +log 1 $.. users:3:user set to: [~bar] +log 1 $.. users:3:host set to: [bar.bar] +log 1 $.. channels:#test:user_ids set to: +log 1 $.. 2 +log 1 $.. 3 +log 1 $.. me +log 4 $.. bar!~bar@bar.bar joins # handle non-self QUIT -loggedservermsg 0 1 ..< :bazbaz!~baz@baz.baz QUIT :Client Quit -log 1 ..$ users:2:exit_msg set to: [QClient Quit] -log 6 ..$ bazbaz!~baz@baz.baz quits: Client Quit -log 1 ..$ channels:#test:exits:2 set to: [QClient Quit] -log 1 ..$ channels:#test:user_ids set to: -log 1 ..$ 3 -log 1 ..$ me -log 4 ..$ bazbaz!~baz@baz.baz quits: Client Quit -log 1 ..$ channels:#test:exits:2 cleared -log 1 ..$ channels:#testtest:exits:2 set to: [QClient Quit] -log 1 ..$ channels:#testtest:user_ids set to: -log 1 ..$ me -log 5 ..$ bazbaz!~baz@baz.baz quits: Client Quit -log 1 ..$ channels:#testtest:exits:2 cleared -log 1 ..$ users:2 cleared +loggedservermsg 0 1 <.. :bazbaz!~baz@baz.baz QUIT :Client Quit +log 1 $.. users:2:exit_msg set to: [QClient Quit] +log 6 $.. bazbaz!~baz@baz.baz quits: Client Quit +log 1 $.. channels:#test:exits:2 set to: [QClient Quit] +log 1 $.. channels:#test:user_ids set to: +log 1 $.. 3 +log 1 $.. me +log 4 $.. bazbaz!~baz@baz.baz quits: Client Quit +log 1 $.. channels:#test:exits:2 cleared +log 1 $.. channels:#testtest:exits:2 set to: [QClient Quit] +log 1 $.. channels:#testtest:user_ids set to: +log 1 $.. me +log 5 $.. bazbaz!~baz@baz.baz quits: Client Quit +log 1 $.. channels:#testtest:exits:2 cleared +log 1 $.. users:2 cleared # handle self-PART: clear channel, and its squatters -loggedservermsg 0 1 ..< :foo1!~foobarbaz@baz.bar.foo PART :#test -log 1 ..$ channels:#test:exits:me set to: [P] -log 1 ..$ channels:#test:user_ids set to: -log 1 ..$ 3 -log 4 ..$ foo1!~foobarbaz@baz.bar.foo parts -log 1 ..$ channels:#test:exits:me cleared -log 1 ..$ channels:#test cleared -log 1 ..$ users:3 cleared +loggedservermsg 0 1 <.. :foo1!~foobarbaz@baz.bar.foo PART :#test +log 1 $.. channels:#test:exits:me set to: [P] +log 1 $.. channels:#test:user_ids set to: +log 1 $.. 3 +log 4 $.. foo1!~foobarbaz@baz.bar.foo parts +log 1 $.. channels:#test:exits:me cleared +log 1 $.. channels:#test cleared +log 1 $.. users:3 cleared # handle lack of implementation -loggedservermsg 0 1 ..< foo bar baz -log 1 .!$ No handler implemented for: foo bar baz -log 2,3,4,5,6,7 .!$ No handler implemented for: foo bar baz +loggedservermsg 0 1 <.. foo bar baz +log 1 $!. No handler implemented for: foo bar baz +log 2,3,4,5,6,7 $!. No handler implemented for: foo bar baz # handle /disconnect, clear all > /disconnect -log 1 ..> QUIT :ircplom says bye -loggedservermsg 0 1 ..< :foo1!~foobarbaz@baz.bar.foo QUIT :Client Quit -log 1 ..$ users:me:exit_msg set to: [QClient Quit] -log 3,6,7 ..$ foo1!~foobarbaz@baz.bar.foo quits: Client Quit -log 1 ..$ channels:#testtest:exits:me set to: [QClient Quit] -log 1 ..$ channels:#testtest:user_ids set to: -log 5 ..$ foo1!~foobarbaz@baz.bar.foo quits: Client Quit -log 1 ..$ channels:#testtest:exits:me cleared -loggedservermsg 0 1 ..< ERROR :Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye] -log 1 ..$ connection_state set to: [Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye]] +log 1 >.. QUIT :ircplom says bye +loggedservermsg 0 1 <.. :foo1!~foobarbaz@baz.bar.foo QUIT :Client Quit +log 1 $.. users:me:exit_msg set to: [QClient Quit] +log 3,6,7 $.. foo1!~foobarbaz@baz.bar.foo quits: Client Quit +log 1 $.. channels:#testtest:exits:me set to: [QClient Quit] +log 1 $.. channels:#testtest:user_ids set to: +log 5 $.. foo1!~foobarbaz@baz.bar.foo quits: Client Quit +log 1 $.. channels:#testtest:exits:me cleared +loggedservermsg 0 1 <.. ERROR :Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye] +log 1 $.. connection_state set to: [Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye]] repeat isupport-clear-in isupport-clear-out -log 1 ..$ caps cleared -log 1 ..$ channels cleared -log 1 ..$ connection_state set to: [] -log 2,3,4,5,6,7 ..$ DISCONNECTED -log 1 ..$ motd set to: -log 1 ..$ sasl_account set to: [] -log 1 ..$ sasl_auth_state set to: [] -log 1 ..$ users cleared +log 1 $.. caps cleared +log 1 $.. channels cleared +log 1 $.. connection_state set to: [] +log 2,3,4,5,6,7 $.. DISCONNECTED +log 1 $.. motd set to: +log 1 $.. sasl_account set to: [] +log 1 $.. sasl_auth_state set to: [] +log 1 $.. users cleared # fail to send in disconnect, check alert window is command prompt window > /window 6 > /privmsg barbar test -log 6 .!$ cannot send, connection seems closed +log 6 $!. cannot send, connection seems closed > /window 1 > /privmsg barbar test -log 1 .!$ cannot send, connection seems closed +log 1 $!. cannot send, connection seems closed > /privmsg #test test -log 1 .!$ not sending, since not in channel +log 1 $!. not sending, since not in channel | conn3-out # test setting up second client, but 432 irrecoverably > /connect baz.bar.foo ?foo foo:foo repeat standard-clears-in standard-clears-out +7 -log 8 ..$ hostname set to: [baz.bar.foo] -log 8 ..$ port set to: [-1] -log 8 ..$ nick_wanted set to: [?foo] -log 8 ..$ user_wanted set to: [foo] -log 8 ..$ realname set to: [foo] +log 8 $.. hostname set to: [baz.bar.foo] +log 8 $.. port set to: [-1] +log 8 $.. nick_wanted set to: [?foo] +log 8 $.. user_wanted set to: [foo] +log 8 $.. realname set to: [foo] repeat conn-in conn-out +7 -log 8 ..> USER foo 0 * :foo -log 8 ..> NICK :?foo -loggedservermsg 1 8 ..< :*.?.net 432 * ?foo :Erroneous nickname +log 8 >.. USER foo 0 * :foo +log 8 >.. NICK :?foo +loggedservermsg 1 8 <.. :*.?.net 432 * ?foo :Erroneous nickname | disconnect-in repeat isupport-clear-in isupport-clear-out 8 -log 8 ..$ connection_state set to: [] -log , ..$ DISCONNECTED +log 8 $.. connection_state set to: [] +log , $.. DISCONNECTED | disconnect-out -log 8 .!$ nickname refused for bad format, giving up +log 8 $!. nickname refused for bad format, giving up # test failing third connection > /connect baz.baz.baz baz baz:baz repeat standard-clears-in standard-clears-out +8 -log 9 ..$ hostname set to: [baz.baz.baz] -log 9 ..$ port set to: [-1] -log 9 ..$ nick_wanted set to: [baz] -log 9 ..$ user_wanted set to: [baz] -log 9 ..$ realname set to: [baz] +log 9 $.. hostname set to: [baz.baz.baz] +log 9 $.. port set to: [-1] +log 9 $.. nick_wanted set to: [baz] +log 9 $.. user_wanted set to: [baz] +log 9 $.. realname set to: [baz] repeat conn-in conn-out +8 -log 9 ..> USER baz 0 * :baz -log 9 ..> NICK :baz +log 9 >.. USER baz 0 * :baz +log 9 >.. NICK :baz servermsg 2 FAKE_IRC_CONN_ABORT_EXCEPTION -log 9 ..$ connection_state set to: [broken: FAKE_IRC_CONN_ABORT_EXCEPTION] +log 9 $.. connection_state set to: [broken: FAKE_IRC_CONN_ABORT_EXCEPTION] repeat disconnect-in disconnect-out +1 -log 9 .!$ will retry connecting in 1 seconds +log 9 $!. will retry connecting in 1 seconds # check that (save TUI tests assuming start on window 0, and no 4 yet) on reconnect, all the same effects can be expected > /reconnect repeat conn0-in conn0-out -log 2,3,4,5,6,7 ..$ CONNECTED +log 2,3,4,5,6,7 $.. CONNECTED repeat conn1-in conn1-out -log 1 ..> JOIN :#testtest +log 1 >.. JOIN :#testtest repeat conn2-in conn2-out repeat conn3-in conn3-out > /quit -log 0 ..< +log 0 <.. diff --git a/src/tests/tui_draw.test b/src/tests/tui_draw.test index f0dda65..cb8e547 100644 --- a/src/tests/tui_draw.test +++ b/src/tests/tui_draw.test @@ -4,7 +4,7 @@ | lines-empty-4-in | lines-empty-2-in | lines-empty-1-in -line 0 on_black §§ +line 0 on_black,bright_white §§ | lines-empty-1-out repeat lines-empty-1-in lines-empty-1-out 1 | lines-empty-2-out @@ -20,10 +20,10 @@ repeat lines-empty-4-in lines-empty-4-out +12 repeat lines-empty-4-in lines-empty-4-out +16 repeat lines-empty-2-in lines-empty-2-out +20 | status-prompt-empty-in -line 22 , :start)=====================================================================([0]§§ +line 22 on_black,bright_white :start)=====================================================================([0]§§ | prompt-empty-in -line 23 , > § §§ -line 23 reverse §§ § +line 23 on_black,bright_white > § §§ +line 23 on_black,bright_white,reverse §§ § | prompt-empty-out | status-prompt-empty-out | empty-init-out @@ -34,30 +34,30 @@ repeat empty-init-in empty-init-out # non-empty command input starts log at bottom, with date above it > foo -log 0 .!# invalid prompt command: not prefixed by / +log 0 #!. invalid prompt command: not prefixed by / repeat lines-empty-16-in lines-empty-16-out repeat lines-empty-4-in lines-empty-4-out +16 | history-lines-0:0:2-at-20-in | history-lines-0:0:1-at-20-in -line 20 on_black 20§§-§§-§§ §§ +line 20 on_black,bright_white 20§§-§§-§§ §§ | history-lines-0:0:1-at-20-out -line 21 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: not prefixed by / §§ +line 21 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: not prefixed by / §§ | history-lines-0:0:2-at-20-out repeat status-prompt-empty-in status-prompt-empty-out # further inputs grow log upwards > /foo -log 0 .!# invalid prompt command: /foo unknown +log 0 #!. invalid prompt command: /foo unknown > /bar -log 0 .!# invalid prompt command: /bar unknown +log 0 #!. invalid prompt command: /bar unknown | before-1st-scroll-in repeat lines-empty-16-in lines-empty-16-out repeat lines-empty-2-in lines-empty-2-out +16 | history-lines-0:0:4-at-18-in repeat history-lines-0:0:2-at-20-in history-lines-0:0:2-at-20-out -2 | history-lines-0:2:4-at-20-in -line 20 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /foo unknown §§ -line 21 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /bar unknown §§ +line 20 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /foo unknown §§ +line 21 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /bar unknown §§ | history-lines-0:2:4-at-20-out | history-lines-0:0:4-at-18-out repeat status-prompt-empty-in status-prompt-empty-out @@ -71,7 +71,7 @@ repeat lines-empty-16-in lines-empty-16-out repeat lines-empty-4-in lines-empty-4-out +16 repeat history-lines-0:0:1-at-20-in history-lines-0:0:1-at-20-out | topmost-scroll-out -line 21 reverse vvv [4] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 21 on_black,bright_white,reverse vvv [4] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ repeat status-prompt-empty-in status-prompt-empty-out | after-1st-scroll-out @@ -83,21 +83,21 @@ repeat before-1st-scroll-in before-1st-scroll-out > /window.history.scroll up repeat after-1st-scroll-in after-1st-scroll-out > /help -log 0 ..# commands available in this window: -log 0 ..# /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME] -log 0 ..# /help -log 0 ..# /list -log 0 ..# /prompt_enter -log 0 ..# /quit -log 0 ..# /window TOWARDS -log 0 ..# /window.history.scroll DIRECTION -log 0 ..# /window.paste -log 0 ..# /window.prompt.backspace -log 0 ..# /window.prompt.move_cursor DIRECTION -log 0 ..# /window.prompt.scroll DIRECTION +log 0 #.. commands available in this window: +log 0 #.. /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME] +log 0 #.. /help +log 0 #.. /list +log 0 #.. /prompt_enter +log 0 #.. /quit +log 0 #.. /window TOWARDS +log 0 #.. /window.history.scroll DIRECTION +log 0 #.. /window.paste +log 0 #.. /window.prompt.backspace +log 0 #.. /window.prompt.move_cursor DIRECTION +log 0 #.. /window.prompt.scroll DIRECTION | before-scrolldown-not-to-bottom-in repeat topmost-scroll-in topmost-scroll-out -line 21 reverse vvv [16] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 21 on_black,bright_white,reverse vvv [16] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ repeat status-prompt-empty-in status-prompt-empty-out | before-scrolldown-not-to-bottom-out @@ -110,26 +110,26 @@ repeat lines-empty-1-in lines-empty-1-out +8 repeat history-lines-0:0:4-at-18-in history-lines-0:0:4-at-18-out -9 | history-lines-0:4:8-at-13-in | history-lines-0:4:5-at-13-in -line 13 on_black,bright_cyan ..# §§:§§:§§ commands available in this window:§§ +line 13 on_black,bright_cyan #.. §§:§§:§§ commands available in this window:§§ | history-lines-0:4:5-at-13-out | history-lines-0:5:6-at-14-in -line 14 on_black,bright_cyan ..# §§:§§:§§ /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]§§ +line 14 on_black,bright_cyan #.. §§:§§:§§ /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]§§ | history-lines-0:5:6-at-14-out | history-lines-0:6:8-at-15-in -line 15 on_black,bright_cyan ..# §§:§§:§§ /help§§ -line 16 on_black,bright_cyan ..# §§:§§:§§ /list§§ +line 15 on_black,bright_cyan #.. §§:§§:§§ /help§§ +line 16 on_black,bright_cyan #.. §§:§§:§§ /list§§ | history-lines-0:6:8-at-15-out | history-lines-0:4:8-at-13-out | history-lines-0:0:8-at-9-out | history-lines-0:8:12-at-17-in -line 17 on_black,bright_cyan ..# §§:§§:§§ /prompt_enter§§ -line 18 on_black,bright_cyan ..# §§:§§:§§ /quit§§ -line 19 on_black,bright_cyan ..# §§:§§:§§ /window TOWARDS§§ +line 17 on_black,bright_cyan #.. §§:§§:§§ /prompt_enter§§ +line 18 on_black,bright_cyan #.. §§:§§:§§ /quit§§ +line 19 on_black,bright_cyan #.. §§:§§:§§ /window TOWARDS§§ | history-lines-0:11:12-at-20-in -line 20 on_black,bright_cyan ..# §§:§§:§§ /window.history.scroll DIRECTION§§ +line 20 on_black,bright_cyan #.. §§:§§:§§ /window.history.scroll DIRECTION§§ | history-lines-0:11:12-at-20-out | history-lines-0:8:12-at-17-out -line 21 reverse vvv [5] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 21 on_black,bright_white,reverse vvv [5] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ repeat status-prompt-empty-in status-prompt-empty-out | after-scrolldown-not-to-bottom-out @@ -148,30 +148,30 @@ repeat history-lines-0:0:8-at-9-in history-lines-0:0:8-at-9-out -3 repeat history-lines-0:8:12-at-17-in history-lines-0:8:12-at-17-out -3 | history-lines-0:12:16-at-18-in | history-lines-0:12:13-at-18-in -line 18 on_black,bright_cyan ..# §§:§§:§§ /window.paste§§ +line 18 on_black,bright_cyan #.. §§:§§:§§ /window.paste§§ | history-lines-0:12:13-at-18-out -line 19 on_black,bright_cyan ..# §§:§§:§§ /window.prompt.backspace§§ -line 20 on_black,bright_cyan ..# §§:§§:§§ /window.prompt.move_cursor DIRECTION§§ -line 21 on_black,bright_cyan ..# §§:§§:§§ /window.prompt.scroll DIRECTION§§ +line 19 on_black,bright_cyan #.. §§:§§:§§ /window.prompt.backspace§§ +line 20 on_black,bright_cyan #.. §§:§§:§§ /window.prompt.move_cursor DIRECTION§§ +line 21 on_black,bright_cyan #.. §§:§§:§§ /window.prompt.scroll DIRECTION§§ | history-lines-0:12:16-at-18-out | history-lines-0:0:16-at-6-out repeat status-prompt-empty-in status-prompt-empty-out > /0 -log 0 .!# invalid prompt command: /0 unknown +log 0 #!. invalid prompt command: /0 unknown > /1 -log 0 .!# invalid prompt command: /1 unknown +log 0 #!. invalid prompt command: /1 unknown > /2 -log 0 .!# invalid prompt command: /2 unknown +log 0 #!. invalid prompt command: /2 unknown > /3 -log 0 .!# invalid prompt command: /3 unknown +log 0 #!. invalid prompt command: /3 unknown > /4 -log 0 .!# invalid prompt command: /4 unknown +log 0 #!. invalid prompt command: /4 unknown > /5 -log 0 .!# invalid prompt command: /5 unknown +log 0 #!. invalid prompt command: /5 unknown > /6 -log 0 .!# invalid prompt command: /6 unknown +log 0 #!. invalid prompt command: /6 unknown > /7 -log 0 .!# invalid prompt command: /7 unknown +log 0 #!. invalid prompt command: /7 unknown | at-bottom-before-wrapped-in repeat history-lines-0:2:4-at-20-in history-lines-0:2:4-at-20-out -20 repeat history-lines-0:4:8-at-13-in history-lines-0:4:8-at-13-out -11 @@ -180,22 +180,22 @@ repeat history-lines-0:12:16-at-18-in history-lines-0:12:16-at-18-out -8 | history-lines-0:16:24-at-14-in | history-lines-0:16:20-at-14-in | history-lines-0:16:18-at-14-in -line 14 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /0 unknown§§ -line 15 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /1 unknown§§ +line 14 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /0 unknown§§ +line 15 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /1 unknown§§ | history-lines-0:16:18-at-14-out | history-lines-0:18:19-at-16-in -line 16 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /2 unknown§§ +line 16 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /2 unknown§§ | history-lines-0:18:19-at-16-out -line 17 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /3 unknown§§ +line 17 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /3 unknown§§ | history-lines-0:16:20-at-14-out | history-lines-0:20:22-at-18-in -line 18 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /4 unknown§§ -line 19 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /5 unknown§§ +line 18 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /4 unknown§§ +line 19 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /5 unknown§§ | history-lines-0:20:22-at-18-out | history-lines-0:22:23-at-20-in -line 20 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /6 unknown§§ +line 20 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /6 unknown§§ | history-lines-0:22:23-at-20-out -line 21 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /7 unknown§§ +line 21 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /7 unknown§§ | history-lines-0:16:24-at-14-out repeat status-prompt-empty-in status-prompt-empty-out | at-bottom-before-wrapped-out @@ -206,16 +206,16 @@ repeat lines-empty-8-in lines-empty-8-out repeat history-lines-0:0:8-at-9-in history-lines-0:0:8-at-9-out -1 repeat history-lines-0:8:12-at-17-in history-lines-0:8:12-at-17-out -1 repeat history-lines-0:12:13-at-18-in history-lines-0:12:13-at-18-out +2 -line 21 reverse vvv [12] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 21 on_black,bright_white,reverse vvv [12] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ repeat status-prompt-empty-in status-prompt-empty-out > /window.history.scroll down repeat at-bottom-before-wrapped-in at-bottom-before-wrapped-out # # check wrapping > /foo_0123456789_0123456789_01234567 -log 0 .!# invalid prompt command: /foo_0123456789_0123456789_01234567 unknown +log 0 #!. invalid prompt command: /foo_0123456789_0123456789_01234567 unknown > /foo_0123456789_0123456789_012345678 -log 0 .!# invalid prompt command: /foo_0123456789_0123456789_012345678 unknown +log 0 #!. invalid prompt command: /foo_0123456789_0123456789_012345678 unknown | at-bottom-after-wrapped-in repeat history-lines-0:5:6-at-14-in history-lines-0:5:6-at-14-out -14 repeat history-lines-0:6:8-at-15-in history-lines-0:6:8-at-15-out -14 @@ -225,11 +225,11 @@ repeat history-lines-0:12:16-at-18-in history-lines-0:12:16-at-18-out -11 | history-lines-0:8:16-at-3-out repeat history-lines-0:16:24-at-14-in history-lines-0:16:24-at-14-out -3 | history-lines-0:24:26-at-19-in -line 19 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_01234567 unknown§§ -line 20 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_012345678§§ +line 19 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_01234567 unknown§§ +line 20 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_012345678§§ | history-lines-0:24:26-at-19-out | history-lines-0:26:27-at-21-in -line 21 on_black,bold,bright_red,bright_cyan unknown§§ +line 21 on_black,bright_red,bold unknown§§ | history-lines-0:26:27-at-21-out repeat status-prompt-empty-in status-prompt-empty-out | at-bottom-after-wrapped-out @@ -241,7 +241,7 @@ repeat lines-empty-4-in lines-empty-4-out repeat lines-empty-1-in lines-empty-1-out +4 repeat history-lines-0:0:16-at-6-in history-lines-0:0:16-at-6-out -1 | scrollup-after-wrapped-out -line 21 reverse vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 21 on_black,bright_white,reverse vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ repeat status-prompt-empty-in status-prompt-empty-out # check scroll-down fully reversible even if over wrapped @@ -249,14 +249,14 @@ repeat status-prompt-empty-in status-prompt-empty-out repeat at-bottom-after-wrapped-in at-bottom-after-wrapped-out > /window.history.scroll up repeat scrollup-after-wrapped-in scrollup-after-wrapped-out -line 21 reverse vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 21 on_black,bright_white,reverse vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ repeat status-prompt-empty-in status-prompt-empty-out # check wrapped input only increases below-scroll count by one > /bar_0123456789_0123456789_012345678 -log 0 .!# invalid prompt command: /bar_0123456789_0123456789_012345678 unknown +log 0 #!. invalid prompt command: /bar_0123456789_0123456789_012345678 unknown repeat scrollup-after-wrapped-in scrollup-after-wrapped-out -line 21 reverse vvv [12] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 21 on_black,bright_white,reverse vvv [12] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ repeat status-prompt-empty-in status-prompt-empty-out # check scroll-down over wrapped will snap down to bottom of wrapped @@ -266,50 +266,50 @@ repeat history-lines-0:8:16-at-3-in history-lines-0:8:16-at-3-out -1 repeat history-lines-0:16:24-at-14-in history-lines-0:16:24-at-14-out -4 repeat history-lines-0:24:26-at-19-in history-lines-0:24:26-at-19-out -1 repeat history-lines-0:26:27-at-21-in history-lines-0:26:27-at-21-out -1 -line 21 reverse vvv [2] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 21 on_black,bright_white,reverse vvv [2] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ repeat status-prompt-empty-in status-prompt-empty-out # # check scrolls-up over longer history until top > /window.history.scroll up repeat scrollup-after-wrapped-in scrollup-after-wrapped-out -line 21 reverse vvv [12] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 21 on_black,bright_white,reverse vvv [12] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ repeat status-prompt-empty-in status-prompt-empty-out > /window.history.scroll up repeat lines-empty-16-in lines-empty-16-out repeat history-lines-0:0:4-at-18-in history-lines-0:0:4-at-18-out -2 repeat history-lines-0:4:5-at-13-in history-lines-0:4:5-at-13-out +7 -line 21 reverse vvv [23] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 21 on_black,bright_white,reverse vvv [23] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ repeat status-prompt-empty-in status-prompt-empty-out > /window.history.scroll up repeat topmost-scroll-in topmost-scroll-out -line 21 reverse vvv [27] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 21 on_black,bright_white,reverse vvv [27] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ repeat status-prompt-empty-in status-prompt-empty-out # check that triggering creation of new window with new lines adds it to status, with unread-lines count > /connect foo.bar.baz foo bar:baz -log 1 ..$ isupport cleared -log 1 ..$ isupport:CHANTYPES set to: [#&] -log 1 ..$ isupport:PREFIX set to: [(ov)@+] -log 1 ..$ isupport:USERLEN set to: [10] -log 1 ..$ caps cleared -log 1 ..$ users cleared -log 1 ..$ channels cleared -log , ..$ DISCONNECTED -log 1 ..$ hostname set to: [foo.bar.baz] -log 1 ..$ port set to: [-1] -log 1 ..$ nick_wanted set to: [foo] -log 1 ..$ user_wanted set to: [baz] -log 1 ..$ realname set to: [bar] -log 1 ..$ port set to: [6697] -log 1 ..$ connection_state set to: [connecting] -log 1 ..$ connection_state set to: [connected] -log , ..$ CONNECTED -log 1 ..> CAP LS :302 -log 1 ..> USER baz 0 * :bar -log 1 ..> NICK :foo +log 1 $.. isupport cleared +log 1 $.. isupport:CHANTYPES set to: [#&] +log 1 $.. isupport:PREFIX set to: [(ov)@+] +log 1 $.. isupport:USERLEN set to: [10] +log 1 $.. caps cleared +log 1 $.. users cleared +log 1 $.. channels cleared +log , $.. DISCONNECTED +log 1 $.. hostname set to: [foo.bar.baz] +log 1 $.. port set to: [-1] +log 1 $.. nick_wanted set to: [foo] +log 1 $.. user_wanted set to: [baz] +log 1 $.. realname set to: [bar] +log 1 $.. port set to: [6697] +log 1 $.. connection_state set to: [connecting] +log 1 $.. connection_state set to: [connected] +log , $.. CONNECTED +log 1 >.. CAP LS :302 +log 1 >.. USER baz 0 * :bar +log 1 >.. NICK :foo repeat topmost-scroll-in topmost-scroll-out -line 21 reverse vvv [27] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ -line 22 , :start)==========================================================([(0:1)] (1:19)§§ +line 21 on_black,bright_white,reverse vvv [27] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 22 on_black,bright_white :start)==========================================================([(0:1)] (1:19)§§ repeat prompt-empty-in prompt-empty-out # check switch to other window, updates to status line (movement of brackets, clearing of own unread-lines count) @@ -319,58 +319,58 @@ repeat lines-empty-1-in lines-empty-1-out +2 | history-lines-1:0:16-at-3-in | history-lines-1:0:8-at-3-in repeat history-lines-0:0:1-at-20-in history-lines-0:0:1-at-20-out -17 -line 4 on_black,bright_yellow ..$ §§:§§:§§ isupport cleared -line 5 on_black,bright_yellow ..$ §§:§§:§§ isupport:CHANTYPES set to: [#&] -line 6 on_black,bright_yellow ..$ §§:§§:§§ isupport:PREFIX set to: [(ov)@+] +line 4 on_black,bright_yellow $.. §§:§§:§§ isupport cleared +line 5 on_black,bright_yellow $.. §§:§§:§§ isupport:CHANTYPES set to: [#&] +line 6 on_black,bright_yellow $.. §§:§§:§§ isupport:PREFIX set to: [(ov)@+] | history-lines-1:4:8-at-7-in -line 7 on_black,bright_yellow ..$ §§:§§:§§ isupport:USERLEN set to: [10] +line 7 on_black,bright_yellow $.. §§:§§:§§ isupport:USERLEN set to: [10] | history-lines-1:5:6-at-8-in -line 8 on_black,bright_yellow ..$ §§:§§:§§ caps cleared +line 8 on_black,bright_yellow $.. §§:§§:§§ caps cleared | history-lines-1:5:6-at-8-out | history-lines-1:6:8-at-9-in -line 9 on_black,bright_yellow ..$ §§:§§:§§ users cleared -line 10 on_black,bright_yellow ..$ §§:§§:§§ channels cleared +line 9 on_black,bright_yellow $.. §§:§§:§§ users cleared +line 10 on_black,bright_yellow $.. §§:§§:§§ channels cleared | history-lines-1:6:8-at-9-out | history-lines-1:4:8-at-7-out | history-lines-1:0:8-at-3-out | history-lines-1:8:16-at-11-in | history-lines-1:8:12-at-11-in -line 11 on_black,bright_yellow ..$ §§:§§:§§ hostname set to: [foo.bar.baz] -line 12 on_black,bright_yellow ..$ §§:§§:§§ port set to: [-1] +line 11 on_black,bright_yellow $.. §§:§§:§§ hostname set to: [foo.bar.baz] +line 12 on_black,bright_yellow $.. §§:§§:§§ port set to: [-1] | history-lines-1:10:12-at-13-in -line 13 on_black,bright_yellow ..$ §§:§§:§§ nick_wanted set to: [foo] -line 14 on_black,bright_yellow ..$ §§:§§:§§ user_wanted set to: [baz] +line 13 on_black,bright_yellow $.. §§:§§:§§ nick_wanted set to: [foo] +line 14 on_black,bright_yellow $.. §§:§§:§§ user_wanted set to: [baz] | history-lines-1:10:12-at-13-out | history-lines-1:8:12-at-11-out | history-lines-1:12:16-at-15-in | history-lines-1:12:14-at-15-in -line 15 on_black,bright_yellow ..$ §§:§§:§§ realname set to: [bar] -line 16 on_black,bright_yellow ..$ §§:§§:§§ port set to: [6697] +line 15 on_black,bright_yellow $.. §§:§§:§§ realname set to: [bar] +line 16 on_black,bright_yellow $.. §§:§§:§§ port set to: [6697] | history-lines-1:12:14-at-15-out | history-lines-1:14:15-at-17-in -line 17 on_black,bright_yellow ..$ §§:§§:§§ connection_state set to: [connecting] +line 17 on_black,bright_yellow $.. §§:§§:§§ connection_state set to: [connecting] | history-lines-1:14:15-at-17-out -line 18 on_black,bright_yellow ..$ §§:§§:§§ connection_state set to: [connected] +line 18 on_black,bright_yellow $.. §§:§§:§§ connection_state set to: [connected] | history-lines-1:12:16-at-15-out | history-lines-1:8:16-at-11-out | history-lines-1:0:16-at-3-out | history-lines-1:16:18-at-19-in -line 19 on_black,bright_green ..> §§:§§:§§ CAP LS :302 -line 20 on_black,bright_green ..> §§:§§:§§ USER baz 0 * :bar +line 19 on_black,bright_green >.. §§:§§:§§ CAP LS :302§§ +line 20 on_black,bright_green >.. §§:§§:§§ USER baz 0 * :bar§§ | history-lines-1:16:18-at-19-out | history-lines-1:18:19-at-21-in -line 21 on_black,bright_green ..> §§:§§:§§ NICK :foo +line 21 on_black,bright_green >.. §§:§§:§§ NICK :foo§§ | history-lines-1:18:19-at-21-out -line 22 , foo.bar.baz:debug)====================================================((0:1) [1]§§ +line 22 on_black,bright_white foo.bar.baz:debug)====================================================((0:1) [1]§§ repeat prompt-empty-in prompt-empty-out # check switch-back to window 0, retaining clearing of window 1's unread-lines count > /window 0 repeat topmost-scroll-in topmost-scroll-out -line 21 reverse vvv [27] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 21 on_black,bright_white,reverse vvv [27] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ repeat status-prompt-after-first-return-in status-prompt-after-first-return-out | status-prompt-after-first-return-in -line 22 , :start)===============================================================([(0:1)] 1§§ +line 22 on_black,bright_white :start)===============================================================([(0:1)] 1§§ repeat prompt-empty-in prompt-empty-out | status-prompt-after-first-return-out @@ -380,7 +380,7 @@ repeat lines-empty-8-in lines-empty-8-out repeat lines-empty-1-in lines-empty-1-out +8 repeat history-lines-0:0:8-at-9-in history-lines-0:0:8-at-9-out repeat history-lines-0:8:12-at-17-in history-lines-0:8:12-at-17-out -line 21 reverse vvv [16] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 21 on_black,bright_white,reverse vvv [16] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ repeat status-prompt-after-first-return-in status-prompt-after-first-return-out > /window.history.scroll down | before-first-sight-of-bookmark-in @@ -390,7 +390,7 @@ repeat history-lines-0:8:16-at-3-in history-lines-0:8:16-at-3-out +3 repeat history-lines-0:16:20-at-14-in history-lines-0:16:20-at-14-out repeat history-lines-0:20:22-at-18-in history-lines-0:20:22-at-18-out repeat history-lines-0:22:23-at-20-in history-lines-0:22:23-at-20-out -line 21 reverse vvv [5] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 21 on_black,bright_white,reverse vvv [5] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ repeat status-prompt-after-first-return-in status-prompt-after-first-return-out | before-first-sight-of-bookmark-out > /window.history.scroll down @@ -400,13 +400,13 @@ repeat history-lines-0:16:24-at-14-in history-lines-0:16:24-at-14-out -6 repeat history-lines-0:24:26-at-19-in history-lines-0:24:26-at-19-out -3 repeat history-lines-0:26:27-at-21-in history-lines-0:26:27-at-21-out -3 | bookmark-at-19-in -line 19 on_black --------------------------------------------------------------------------------§§ +line 19 on_black,bright_white --------------------------------------------------------------------------------§§ | bookmark-at-19-out | history-lines-0:27:28-at-20-in -line 20 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /bar_0123456789_0123456789_012345678§§ +line 20 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /bar_0123456789_0123456789_012345678§§ | history-lines-0:27:28-at-20-out | history-lines-0:28:29-at-21-in -line 21 on_black,bold,bright_red,bright_cyan unknown§§ +line 21 on_black,bright_red,bold unknown§§ | history-lines-0:28:29-at-21-out repeat status-prompt-after-first-return-in status-prompt-after-first-return-out | first-sight-of-bookmark-out @@ -417,7 +417,7 @@ repeat lines-empty-2-in lines-empty-2-out repeat history-lines-0:0:16-at-6-in history-lines-0:0:16-at-6-out -4 repeat history-lines-0:16:18-at-14-in history-lines-0:16:18-at-14-out +4 repeat history-lines-0:18:19-at-16-in history-lines-0:18:19-at-16-out +4 -line 21 reverse vvv [9] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 21 on_black,bright_white,reverse vvv [9] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ repeat status-prompt-after-first-return-in status-prompt-after-first-return-out > /window.history.scroll down repeat first-sight-of-bookmark-in first-sight-of-bookmark-out @@ -430,7 +430,7 @@ repeat history-lines-1:16:18-at-19-in history-lines-1:16:18-at-19-out -1 repeat history-lines-1:18:19-at-21-in history-lines-1:18:19-at-21-out -1 repeat bookmark-at-19-in bookmark-at-19-out +2 | status-prompt-both-empty-in -line 22 , foo.bar.baz:debug)========================================================(0 [1]§§ +line 22 on_black,bright_white foo.bar.baz:debug)========================================================(0 [1]§§ repeat prompt-empty-in prompt-empty-out | status-prompt-both-empty-out @@ -445,14 +445,14 @@ repeat history-lines-0:27:28-at-20-in history-lines-0:27:28-at-20-out -1 | history-lines-0:24:28-at-16-out repeat history-lines-0:28:29-at-21-in history-lines-0:28:29-at-21-out -1 repeat bookmark-at-19-in bookmark-at-19-out +2 -line 22 , :start)===================================================================([0] 1§§ +line 22 on_black,bright_white :start)===================================================================([0] 1§§ repeat prompt-empty-in prompt-empty-out # check new lines push bookmark up > /list -log 0 ..# windows available via /window: -log 0 ..# 0) :start -log 0 ..# 1) foo.bar.baz:debug +log 0 #.. windows available via /window: +log 0 #.. 0) :start +log 0 #.. 1) foo.bar.baz:debug | before-first-server-responses-in repeat history-lines-0:11:12-at-20-in history-lines-0:11:12-at-20-out -20 repeat history-lines-0:12:16-at-18-in history-lines-0:12:16-at-18-out -17 @@ -461,23 +461,23 @@ repeat history-lines-0:24:28-at-16-in history-lines-0:24:28-at-16-out -3 repeat history-lines-0:28:29-at-21-in history-lines-0:28:29-at-21-out -4 repeat bookmark-at-19-in bookmark-at-19-out -1 | history-lines-0:29:30-at-19-in -line 19 on_black,bright_cyan ..# §§:§§:§§ windows available via /window:§§ +line 19 on_black,bright_cyan #.. §§:§§:§§ windows available via /window:§§ | history-lines-0:29:30-at-19-out | history-lines-0:30:32-at-20-in -line 20 on_black,bright_cyan ..# §§:§§:§§ 0) :start§§ -line 21 on_black,bright_cyan ..# §§:§§:§§ 1) foo.bar.baz:debug§§ +line 20 on_black,bright_cyan #.. §§:§§:§§ 0) :start§§ +line 21 on_black,bright_cyan #.. §§:§§:§§ 1) foo.bar.baz:debug§§ | history-lines-0:30:32-at-20-out | before-first-server-responses-out -line 22 , :start)===================================================================([0] 1§§ +line 22 on_black,bright_white :start)===================================================================([0] 1§§ repeat prompt-empty-in prompt-empty-out # check new lines growing in other window, one of which long enough to wrap, to be re-start count in status (with wrapped only as single) -loggedservermsg 0 1 ..< PING :? -log 1 ..> PONG :? -loggedservermsg 0 1 ..< PING :123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 -log 1 ..> PONG :123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 +loggedservermsg 0 1 <.. PING :? +log 1 >.. PONG :? +loggedservermsg 0 1 <.. PING :123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 +log 1 >.. PONG :123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 repeat before-first-server-responses-in before-first-server-responses-out -line 22 , :start)===============================================================([0] (1:4)§§ +line 22 on_black,bright_white :start)===============================================================([0] (1:4)§§ repeat prompt-empty-in prompt-empty-out # check that switching to window with new lines, but left scroll-to-bottom, keeps the scroll-to-bottom, keeps bookmark after last line previously seen there @@ -488,13 +488,13 @@ repeat history-lines-1:16:18-at-19-in history-lines-1:16:18-at-19-out -7 repeat history-lines-1:18:19-at-21-in history-lines-1:18:19-at-21-out -7 repeat bookmark-at-19-in bookmark-at-19-out -4 | history-lines-1:19:20-at-16-in -line 16 on_black,bright_white ..< §§:§§:§§ PING :? +line 16 on_black,bright_white <.. §§:§§:§§ PING :? | history-lines-1:19:20-at-16-out | history-lines-1:20:24-at-17-in -line 17 on_black,bright_green ..> §§:§§:§§ PONG :? -line 18 on_black,bright_white ..< §§:§§:§§ PING :123456789 123456789 123456789 123456789 123456789 123456789§§ +line 17 on_black,bright_green >.. §§:§§:§§ PONG :? +line 18 on_black,bright_white <.. §§:§§:§§ PING :123456789 123456789 123456789 123456789 123456789 123456789§§ line 19 on_black,bright_white 123456789 123456789§§ -line 20 on_black,bright_green ..> §§:§§:§§ PONG :123456789 123456789 123456789 123456789 123456789 123456789§§ +line 20 on_black,bright_green >.. §§:§§:§§ PONG :123456789 123456789 123456789 123456789 123456789 123456789§§ | history-lines-1:20:24-at-17-out | history-lines-1:24:25-at-21-in line 21 on_black,bright_green 123456789 123456789§§ @@ -503,8 +503,8 @@ repeat status-prompt-both-empty-in status-prompt-both-empty-out # check that growth below scroll does not by itself re-position bookmark in history > /window.history.scroll up -loggedservermsg 0 1 ..< PING :foo -log 1 ..> PONG :foo +loggedservermsg 0 1 <.. PING :foo +log 1 >.. PONG :foo | early-win1-upscroll-in repeat lines-empty-4-in lines-empty-4-out repeat lines-empty-2-in lines-empty-2-out +4 @@ -513,7 +513,7 @@ repeat history-lines-1:8:12-at-11-in history-lines-1:8:12-at-11-out +3 repeat history-lines-1:12:14-at-15-in history-lines-1:12:14-at-15-out +3 repeat history-lines-1:14:15-at-17-in history-lines-1:14:15-at-17-out +3 | early-win1-upscroll-out -line 21 reverse vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 21 on_black,bright_white,reverse vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ repeat status-prompt-both-empty-in status-prompt-both-empty-out > /window.history.scroll down repeat history-lines-1:5:6-at-8-in history-lines-1:5:6-at-8-out -8 @@ -525,7 +525,7 @@ repeat bookmark-at-19-in bookmark-at-19-out -5 repeat history-lines-1:19:20-at-16-in history-lines-1:19:20-at-16-out -1 repeat history-lines-1:20:24-at-17-in history-lines-1:20:24-at-17-out -1 repeat history-lines-1:24:25-at-21-in history-lines-1:24:25-at-21-out -1 -line 21 reverse vvv [3] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 21 on_black,bright_white,reverse vvv [3] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ repeat status-prompt-both-empty-in status-prompt-both-empty-out # check that with new lines left unread, switch away and back into window moves bookmark below newest read line, counts unread lines in status @@ -540,7 +540,7 @@ repeat history-lines-0:29:30-at-19-in history-lines-0:29:30-at-19-out -1 repeat history-lines-0:30:32-at-20-in history-lines-0:30:32-at-20-out -1 repeat bookmark-at-19-in bookmark-at-19-out +2 | win-0-only-for-win-1-tests-out -line 22 , :start)===============================================================([0] (1:2)§§ +line 22 on_black,bright_white :start)===============================================================([0] (1:2)§§ repeat prompt-empty-in prompt-empty-out > /window 1 | keep-bookmark-on-outside-growth-test-in @@ -556,40 +556,40 @@ repeat history-lines-1:20:24-at-17-in history-lines-1:20:24-at-17-out -2 repeat history-lines-1:24:25-at-21-in history-lines-1:24:25-at-21-out -2 repeat bookmark-at-19-in bookmark-at-19-out +1 | keep-bookmark-on-outside-growth-test-out -line 21 reverse vvv [3] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ -line 22 , foo.bar.baz:debug)====================================================(0 [(1:2)]§§ +line 21 on_black,bright_white,reverse vvv [3] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:2)]§§ repeat prompt-empty-in prompt-empty-out # check that growing lines below scroll in other preserves non-bottom bookmark (left in sight on previous window leave) > /window 0 -loggedservermsg 0 1 ..< PING :bar -log 1 ..> PONG :bar +loggedservermsg 0 1 <.. PING :bar +log 1 >.. PONG :bar repeat win-0-only-for-win-1-tests-in win-0-only-for-win-1-tests-out -line 22 , :start)===============================================================([0] (1:4)§§ +line 22 on_black,bright_white :start)===============================================================([0] (1:4)§§ repeat prompt-empty-in prompt-empty-out > /window 1 repeat keep-bookmark-on-outside-growth-test-in keep-bookmark-on-outside-growth-test-out -line 21 reverse vvv [5] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 21 on_black,bright_white,reverse vvv [5] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ | status-prompt-on-win1-4-unread-in -line 22 , foo.bar.baz:debug)====================================================(0 [(1:4)]§§ +line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:4)]§§ repeat prompt-empty-in prompt-empty-out | status-prompt-on-win1-4-unread-out # check same applies when leaving affected window with bookmark out-of-sight > /window.history.scroll up repeat early-win1-upscroll-in early-win1-upscroll-out -line 21 reverse vvv [13] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 21 on_black,bright_white,reverse vvv [13] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ repeat status-prompt-on-win1-4-unread-in status-prompt-on-win1-4-unread-out > /window 0 -loggedservermsg 0 1 ..< PING :baz -log 1 ..> PONG :baz +loggedservermsg 0 1 <.. PING :baz +log 1 >.. PONG :baz repeat win-0-only-for-win-1-tests-in win-0-only-for-win-1-tests-out -line 22 , :start)===============================================================([0] (1:6)§§ +line 22 on_black,bright_white :start)===============================================================([0] (1:6)§§ repeat prompt-empty-in prompt-empty-out > /window 1 repeat early-win1-upscroll-in early-win1-upscroll-out -line 21 reverse vvv [15] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ -line 22 , foo.bar.baz:debug)====================================================(0 [(1:6)]§§ +line 21 on_black,bright_white,reverse vvv [15] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:6)]§§ repeat prompt-empty-in prompt-empty-out > /window.history.scroll down repeat history-lines-1:5:6-at-8-in history-lines-1:5:6-at-8-out -8 @@ -598,8 +598,8 @@ repeat history-lines-1:8:16-at-11-in history-lines-1:8:16-at-11-out -8 repeat history-lines-1:16:24-at-11-in history-lines-1:16:24-at-11-out repeat history-lines-1:24:25-at-21-in history-lines-1:24:25-at-21-out -2 repeat bookmark-at-19-in bookmark-at-19-out +1 -line 21 reverse vvv [7] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ -line 22 , foo.bar.baz:debug)====================================================(0 [(1:6)]§§ +line 21 on_black,bright_white,reverse vvv [7] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:6)]§§ repeat prompt-empty-in prompt-empty-out > /window.history.scroll down repeat history-lines-1:10:12-at-13-in history-lines-1:10:12-at-13-out -13 @@ -607,14 +607,14 @@ repeat history-lines-1:12:16-at-15-in history-lines-1:12:16-at-15-out -13 repeat history-lines-1:16:24-at-11-in history-lines-1:16:24-at-11-out -5 repeat history-lines-1:24:25-at-21-in history-lines-1:24:25-at-21-out -7 repeat bookmark-at-19-in bookmark-at-19-out -4 -line 16 on_black,bright_white ..< §§:§§:§§ PING :foo -line 17 on_black,bright_green ..> §§:§§:§§ PONG :foo -line 18 on_black,bright_white ..< §§:§§:§§ PING :bar -line 19 on_black,bright_green ..> §§:§§:§§ PONG :bar -line 20 on_black,bright_white ..< §§:§§:§§ PING :baz -line 21 on_black,bright_green ..> §§:§§:§§ PONG :baz -line 22 , foo.bar.baz:debug)====================================================(0 [(1:6)]§§ +line 16 on_black,bright_white <.. §§:§§:§§ PING :foo +line 17 on_black,bright_green >.. §§:§§:§§ PONG :foo +line 18 on_black,bright_white <.. §§:§§:§§ PING :bar +line 19 on_black,bright_green >.. §§:§§:§§ PONG :bar +line 20 on_black,bright_white <.. §§:§§:§§ PING :baz +line 21 on_black,bright_green >.. §§:§§:§§ PONG :baz +line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:6)]§§ repeat prompt-empty-in prompt-empty-out > /quit -log 0 ..< +log 0 <.. diff --git a/src/tests/tui_prompt_basics.test b/src/tests/tui_prompt_basics.test index cd6a05d..c4649b7 100644 --- a/src/tests/tui_prompt_basics.test +++ b/src/tests/tui_prompt_basics.test @@ -5,35 +5,35 @@ # expected complaints on wrong command inputs > foo -log 0 .!# invalid prompt command: not prefixed by / +log 0 #!. invalid prompt command: not prefixed by / > /foo -log 0 .!# invalid prompt command: /foo unknown +log 0 #!. invalid prompt command: /foo unknown > /help foo -log 0 .!# invalid prompt command: /help given argument(s) while none expected +log 0 #!. invalid prompt command: /help given argument(s) while none expected > /window -log 0 .!# invalid prompt command: /window too few arguments (given 0, need 1) +log 0 #!. invalid prompt command: /window too few arguments (given 0, need 1) # some simple expected command successes > /help -log 0 ..# commands available in this window: -log 0 ..# /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME] -log 0 ..# /help -log 0 ..# /list -log 0 ..# /prompt_enter -log 0 ..# /quit -log 0 ..# /window TOWARDS -log 0 ..# /window.history.scroll DIRECTION -log 0 ..# /window.paste -log 0 ..# /window.prompt.backspace -log 0 ..# /window.prompt.move_cursor DIRECTION -log 0 ..# /window.prompt.scroll DIRECTION +log 0 #.. commands available in this window: +log 0 #.. /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME] +log 0 #.. /help +log 0 #.. /list +log 0 #.. /prompt_enter +log 0 #.. /quit +log 0 #.. /window TOWARDS +log 0 #.. /window.history.scroll DIRECTION +log 0 #.. /window.paste +log 0 #.. /window.prompt.backspace +log 0 #.. /window.prompt.move_cursor DIRECTION +log 0 #.. /window.prompt.scroll DIRECTION > /list -log 0 ..# windows available via /window: -log 0 ..# 0) :start +log 0 #.. windows available via /window: +log 0 #.. 0) :start # should probably not be available at all by explicit prompt writing, but for now this be the expected behavior … > /prompt_enter -log 0 .!# invalid prompt command: /prompt_enter would loop into ourselves +log 0 #!. invalid prompt command: /prompt_enter would loop into ourselves > /window.history.scroll foo > /window.prompt.backspace > /window.prompt.move_cursor foo @@ -41,4 +41,4 @@ log 0 .!# invalid prompt command: /prompt_enter would loop into ourselves > /window.paste > /quit -log 0 ..< +log 0 <..