From: Christian Heller Date: Tue, 28 Oct 2025 18:20:07 +0000 (+0100) Subject: Remove formatting hints from stripped log lines, move formatting to BaseTui.log. X-Git-Url: https://plomlompom.com/repos/%7B%7B%20web_path%20%7D%7D/static/%7B%7Bprefix%7D%7D/%7B%7Bdb.prefix%7D%7D/foo.html?a=commitdiff_plain;h=4002c8d5da09e05c0c717d08f0b0a3123b51a3b5;p=ircplom Remove formatting hints from stripped log lines, move formatting to BaseTui.log. --- diff --git a/src/ircplom/tui_base.py b/src/ircplom/tui_base.py index 2aecdec..fb1fc02 100644 --- a/src/ircplom/tui_base.py +++ b/src/ircplom/tui_base.py @@ -253,22 +253,17 @@ class _HistoryWidget(_ScrollableWidget): super().__init__(**kwargs) self._maxlen_log = maxlen_log self._length_to_term = length_to_term - self._formatted: list[tuple[int, str]] = [] + self._wrapped: list[tuple[int, str]] = [] self._newest_read_history_idx_pos = self._UNSET_IDX_POS self._history_offset = 0 self._history_idx_neg = self._UNSET_IDX_NEG - def _add_formatted(self, history_idx_pos: int, line: str) -> int: - attrs = [] - for c in line.split(LOG_FMT_SEP, maxsplit=1)[0]: - attrs += list(LOG_FMT_ATTRS.get(c, tuple())) - formatted_line = FormattingString(line).attrd(*attrs) - formatted_lines = FormattingString(formatted_line - ).wrap(self._sizes.x, - self._length_to_term) - self._formatted += [(self._history_offset + history_idx_pos, line) - for line in formatted_lines] - return len(formatted_lines) + def _add_wrapped(self, history_idx_pos: int, line: str) -> int: + lines = FormattingString(line).wrap(self._sizes.x, + self._length_to_term) + self._wrapped += [(self._history_offset + history_idx_pos, line) + for line in lines] + return len(lines) @property def _len_full_history(self) -> int: @@ -278,14 +273,14 @@ class _HistoryWidget(_ScrollableWidget): super().set_geometry(sizes) if self._drawable: self._y_pgscroll = self._sizes.y // 2 - self._formatted.clear() + self._wrapped.clear() for history_idx_pos, line in enumerate(self._history): - self._add_formatted(history_idx_pos, line) + self._add_wrapped(history_idx_pos, line) # ensure that of the full line identified by ._history_idx_neg, # ._wrapped_idx_neg point to the lowest of its wrap parts self._wrapped_idx_neg = ( - self._UNSET_IDX_NEG if (not self._formatted) - else (-len(self._formatted) + self._UNSET_IDX_NEG if (not self._wrapped) + else (-len(self._wrapped) + self._last_wrapped_idx_pos_for_hist_idx_pos( self._len_full_history + max(self._history_idx_neg, - self._maxlen_log)))) @@ -297,7 +292,7 @@ class _HistoryWidget(_ScrollableWidget): if not self._UNSET_IDX_NEG != self._history_idx_neg >= -1: self._history_idx_neg -= 1 if self._drawable: - n_wrapped = self._add_formatted(len(self._history) - 1, to_append) + n_wrapped = self._add_wrapped(len(self._history) - 1, to_append) if not self._UNSET_IDX_NEG != self._wrapped_idx_neg >= -1: self._wrapped_idx_neg -= n_wrapped if len(self._history) > self._maxlen_log: @@ -306,20 +301,20 @@ class _HistoryWidget(_ScrollableWidget): self._history_idx_neg = max(self._history_idx_neg, -self._maxlen_log) wrap_offset = 0 - for wrap_idx_pos, t in enumerate(self._formatted): + for wrap_idx_pos, t in enumerate(self._wrapped): if t[0] == self._history_offset: wrap_offset = wrap_idx_pos break - self._formatted = self._formatted[wrap_offset:] + self._wrapped = self._wrapped[wrap_offset:] self._wrapped_idx_neg = max(self._wrapped_idx_neg, - -len(self._formatted)) + -len(self._wrapped)) def _draw(self) -> None: add_scroll_info = self._wrapped_idx_neg < -1 start_idx_neg = (self._wrapped_idx_neg - self._sizes.y + 1 + bool(add_scroll_info)) end_idx_neg = (self._wrapped_idx_neg + 1) if add_scroll_info else None - wrapped = self._formatted[start_idx_neg:end_idx_neg] + wrapped = self._wrapped[start_idx_neg:end_idx_neg] while len(wrapped) < self._sizes.y - bool(add_scroll_info): wrapped.insert(0, (self._PADDING_HISTORY_IDX_POS, '')) for idx, line in enumerate([lt[1] for lt in wrapped]): @@ -335,17 +330,17 @@ class _HistoryWidget(_ScrollableWidget): def bookmark(self) -> None: 'Store next idx to what most recent line we have (been) scrolled.' bookmark = (self._BOOKMARK_HISTORY_IDX_POS, '-' * self._sizes.x) - if bookmark in self._formatted: + if bookmark in self._wrapped: bookmark_idx_neg\ - = self._formatted.index(bookmark) - len(self._formatted) - del self._formatted[bookmark_idx_neg] + = self._wrapped.index(bookmark) - len(self._wrapped) + del self._wrapped[bookmark_idx_neg] if bookmark_idx_neg > self._wrapped_idx_neg: self._wrapped_idx_neg += 1 if self._newest_read_history_idx_pos < self._history_offset: return - if not self._formatted: + if not self._wrapped: return - self._formatted.insert(self._bookmark_wrapped_idx_pos, bookmark) + self._wrapped.insert(self._bookmark_wrapped_idx_pos, bookmark) self._wrapped_idx_neg -= int(self._bookmark_wrapped_idx_neg > self._wrapped_idx_neg) @@ -356,10 +351,10 @@ class _HistoryWidget(_ScrollableWidget): @property def _bookmark_wrapped_idx_neg(self) -> int: - return self._bookmark_wrapped_idx_pos - len(self._formatted) + return self._bookmark_wrapped_idx_pos - len(self._wrapped) def _last_wrapped_idx_pos_for_hist_idx_pos(self, hist_idx_pos: int) -> int: - return [idx for idx, t in enumerate(self._formatted) + return [idx for idx, t in enumerate(self._wrapped) if t[0] == hist_idx_pos][-1] @property @@ -376,10 +371,10 @@ class _HistoryWidget(_ScrollableWidget): def _scroll(self, up: bool = True) -> None: super()._scroll(up) - if self._drawable and self._formatted: - if up and len(self._formatted) > 2: + if self._drawable and self._wrapped: + if up and len(self._wrapped) > 2: self._wrapped_idx_neg = max( - -len(self._formatted), + -len(self._wrapped), self._wrapped_idx_neg - self._y_pgscroll) else: self._wrapped_idx_neg = min( @@ -387,7 +382,7 @@ class _HistoryWidget(_ScrollableWidget): idx = self._wrapped_idx_neg - int( self._wrapped_idx_neg == self._bookmark_wrapped_idx_neg) self._history_idx_neg = (-self._len_full_history - + max(0, self._formatted[idx][0])) + + max(0, self._wrapped[idx][0])) class PromptWidget(_ScrollableWidget): @@ -682,9 +677,12 @@ class BaseTui(QueueMixin): prefix = kwargs.get('prefix', _LOG_PREFIX_DEFAULT) 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 msg = f'{prefix}{LOG_FMT_SEP}{time} {msg}' + msg_attrs: list[str] = list(LOG_FMT_ATTRS.get(prefix[0], tuple())) + for t in (('alert', LOG_FMT_ALERT), ('highlight', LOG_FMT_HIGHLIGHT)): + if kwargs.get(t[0], False): + msg_attrs += list(LOG_FMT_ATTRS.get(t[1], tuple())) + msg = FormattingString(msg).attrd(*msg_attrs) affected_win_indices = [] for win in self._log_target_wins(**kwargs): affected_win_indices += [win.idx] diff --git a/src/tests/_timeout_retries.test b/src/tests/_timeout_retries.test index 1ae4b44..5148319 100644 --- a/src/tests/_timeout_retries.test +++ b/src/tests/_timeout_retries.test @@ -1,45 +1,45 @@ × isupport-clear -log 1 $.. isupport cleared -log 1 $.. isupport:CHANTYPES set to: [#&] -log 1 $.. isupport:PREFIX set to: [(ov)@+] -log 1 $.. isupport:USERLEN set to: [10] +log 1 $ isupport cleared +log 1 $ isupport:CHANTYPES set to: [#&] +log 1 $ isupport:PREFIX set to: [(ov)@+] +log 1 $ isupport:USERLEN set to: [10] × clientwin-init insert isupport-clear : +1 -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 × conn-retry -log 1 $.. connection_state set to: [connecting] -log 1 $.. port set to: [10002] -log 1 $.. connection_state set to: [failed to connect: FAKE TESTING TIMEOUT] +log 1 $ connection_state set to: [connecting] +log 1 $ port set to: [10002] +log 1 $ connection_state set to: [failed to connect: FAKE TESTING TIMEOUT] × conn-init-retries -log 1 $.. port set to: [10003] -log 1 $.. nick_wanted set to: [foo] -log 1 $.. user_wanted set to: [foobarbazquux] -log 1 $.. realname set to: [baz] -log 1 $.. password set to: [bar] +log 1 $ 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] insert conn-retry : +1 -log 1 $!. will retry connecting in 1 seconds +log 1 $ will retry connecting in 1 seconds insert conn-retry :1 +1 -log 1 $.. port set to: [10001] +log 1 $ port set to: [10001] insert conn-retry 2: +1 -log 1 $!. will retry connecting in 2 seconds +log 1 $ will retry connecting in 2 seconds insert conn-retry :1 +1 -log 1 $.. port set to: [10000] +log 1 $ port set to: [10000] insert conn-retry 2: +1 -log 1 $!. will retry connecting in 4 seconds +log 1 $ will retry connecting in 4 seconds × conn -log 1 $.. connection_state set to: [connecting] -log 1 $.. connection_state set to: [connected] -log , $.. CONNECTED -log 1 >.. CAP LS :302 -log 1 >.. USER foobarbazquux 0 * :baz -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 foobarbazquux 0 * :baz +log 1 > NICK :foo × @@ -49,7 +49,7 @@ log 1 >.. NICK :foo > /connect foo.bar.baz:10003 foo:bar baz:foobarbazquux insert clientwin-init : +1 -log 1 $.. hostname set to: [foo.bar.baz] +log 1 $ hostname set to: [foo.bar.baz] insert conn-init-retries : +1 # with TestingClient finally having reduced port to 10000, connecting works now @@ -57,25 +57,25 @@ insert conn : +1 # 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] insert isupport-clear : +1 -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 insert conn : +1 # on second server, check timed auto-retries don't activate after manual intervention > /connect baz.bar.foo:10003 foo:bar baz:foobarbazquux insert clientwin-init : +2 -log 2 $.. hostname set to: [baz.bar.foo] +log 2 $ hostname set to: [baz.bar.foo] insert conn-init-retries : +2 > /window 2 > /reconnect insert conn : +2 wait 4 > /disconnect -log 2 >.. QUIT :ircplom says bye +log 2 > QUIT :ircplom says bye wait 4 diff --git a/src/tests/config.test b/src/tests/config.test index 266c3cd..c890630 100644 --- a/src/tests/config.test +++ b/src/tests/config.test @@ -1,22 +1,22 @@ -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 diff --git a/src/tests/connect_disconnect_legalities.test b/src/tests/connect_disconnect_legalities.test index 15cf59e..4ba5a6e 100644 --- a/src/tests/connect_disconnect_legalities.test +++ b/src/tests/connect_disconnect_legalities.test @@ -1,49 +1,49 @@ × isupport-clear -log 1 $.. isupport cleared -log 1 $.. isupport:CHANTYPES set to: [#&] -log 1 $.. isupport:PREFIX set to: [(ov)@+] -log 1 $.. isupport:USERLEN set to: [10] +log 1 $ isupport cleared +log 1 $ isupport:CHANTYPES set to: [#&] +log 1 $ isupport:PREFIX set to: [(ov)@+] +log 1 $ isupport:USERLEN set to: [10] × connecting -log 1 $.. connection_state set to: [connecting] -log 1 $.. connection_state set to: [connected] -log , $.. CONNECTED -log 1 >.. CAP LS :302 -log 1 >.. USER baz 0 * :bar -log 1 >.. NICK :foo +log 1 $ connection_state set to: [connecting] +log 1 $ connection_state set to: [connected] +log , $ CONNECTED +log 1 > CAP LS :302 +log 1 > USER baz 0 * :bar +log 1 > NICK :foo × # to prepare, initiate connection > /connect foo.bar.baz foo bar:baz insert isupport-clear : +1 -log 1 $.. caps cleared -log 1 $.. users cleared -log 1 $.. channels cleared -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] insert connecting : +1 # 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]] insert isupport-clear : +1 -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 diff --git a/src/tests/error_disconnects.test b/src/tests/error_disconnects.test index a10207f..290a345 100644 --- a/src/tests/error_disconnects.test +++ b/src/tests/error_disconnects.test @@ -1,39 +1,39 @@ × isupport-clear -log 1 $.. isupport cleared -log 1 $.. isupport:CHANTYPES set to: [#&] -log 1 $.. isupport:PREFIX set to: [(ov)@+] -log 1 $.. isupport:USERLEN set to: [10] +log 1 $ isupport cleared +log 1 $ isupport:CHANTYPES set to: [#&] +log 1 $ isupport:PREFIX set to: [(ov)@+] +log 1 $ isupport:USERLEN set to: [10] × connecting -log 1 $.. connection_state set to: [connecting] -log 1 $.. connection_state set to: [connected] -log , $.. CONNECTED -log 1 >.. CAP LS :302 -log 1 >.. USER baz 0 * :bar -log 1 >.. NICK :foo +log 1 $ connection_state set to: [connecting] +log 1 $ connection_state set to: [connected] +log , $ CONNECTED +log 1 > CAP LS :302 +log 1 > USER baz 0 * :bar +log 1 > NICK :foo × disconnecting insert isupport-clear : +1 -log 1 $.. connection_state set to: [] -log , $.. DISCONNECTED +log 1 $ connection_state set to: [] +log , $ DISCONNECTED × # to prepare first test, initiate connected state > /connect foo.bar.baz foo bar:baz insert isupport-clear : +1 -log 1 $.. caps cleared -log 1 $.. users cleared -log 1 $.. channels cleared -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] insert connecting : +1 # 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] insert disconnecting : +1 # to prepare next test, get back to connected state @@ -42,7 +42,7 @@ insert disconnecting : +1 insert connecting : +1 # test "timed out)" ERROR handling -loggedservermsg 0 1 <.. ERROR :Closing link: (Connection timed out) -log 1 $.. connection_state set to: [Closing link: (Connection timed out)] +loggedservermsg 0 1 < ERROR :Closing link: (Connection timed out) +log 1 $ connection_state set to: [Closing link: (Connection timed out)] insert disconnecting : +1 -log 1 $!. will retry connecting in 1 seconds +log 1 $ will retry connecting in 1 seconds diff --git a/src/tests/pingpong.test b/src/tests/pingpong.test index d2eb6fd..d25a5e9 100644 --- a/src/tests/pingpong.test +++ b/src/tests/pingpong.test @@ -1,57 +1,57 @@ × isupport-clear -log 1 $.. isupport cleared -log 1 $.. isupport:CHANTYPES set to: [#&] -log 1 $.. isupport:PREFIX set to: [(ov)@+] -log 1 $.. isupport:USERLEN set to: [10] +log 1 $ isupport cleared +log 1 $ isupport:CHANTYPES set to: [#&] +log 1 $ isupport:PREFIX set to: [(ov)@+] +log 1 $ isupport:USERLEN set to: [10] × conn -log 1 $.. connection_state set to: [connecting] -log 1 $.. connection_state set to: [connected] -log , $.. CONNECTED -log 1 >.. CAP LS :302 -log 1 >.. USER foobarbazquux 0 * :baz -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 foobarbazquux 0 * :baz +log 1 > NICK :foo × full-timeout # ping on timeout, go on as normal if PONG received insert trigger-ping : +0 -loggedservermsg 0 1 <.. :*.?.net PONG *.?.net :what's up? -loggedservermsg 0 1 <.. :*.?.net NOTICE * :*** Looking up your ident... -log 2 <.. ({bold|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 insert trigger-ping : +0 servermsg 0 timeout servermsg 0 no timely PONG from server -log 1 $.. connection_state set to: [broken: no timely PONG from server] +log 1 $ connection_state set to: [broken: no timely PONG from server] insert isupport-clear : +1 -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 × trigger-ping servermsg 0 timeout -log 1 >.. PING :what's up? +log 1 > PING :what's up? × > /connect foo.bar.baz foo:bar baz:foobarbazquux insert isupport-clear : +1 -log 1 $.. caps cleared -log 1 $.. users cleared -log 1 $.. channels cleared -log , $.. DISCONNECTED -log 1 $.. hostname set to: [foo.bar.baz] -log 1 $.. port set to: [-1] -log 1 $.. nick_wanted set to: [foo] -log 1 $.. user_wanted set to: [foobarbazquux] -log 1 $.. realname set to: [baz] -log 1 $.. password set to: [bar] -log 1 $.. port set to: [6697] +log 1 $ caps cleared +log 1 $ users cleared +log 1 $ channels cleared +log , $ DISCONNECTED +log 1 $ hostname set to: [foo.bar.baz] +log 1 $ port set to: [-1] +log 1 $ nick_wanted set to: [foo] +log 1 $ user_wanted set to: [foobarbazquux] +log 1 $ realname set to: [baz] +log 1 $ password set to: [bar] +log 1 $ port set to: [6697] insert conn : +1 # ensure we PONG properly -loggedservermsg 0 1 <.. PING :? -log 1 >.. PONG :? +loggedservermsg 0 1 < PING :? +log 1 > PONG :? insert full-timeout : +0 @@ -59,6 +59,6 @@ insert full-timeout : +0 > /window 1 > /reconnect insert conn :2 +1 -log 2 $.. CONNECTED +log 2 $ CONNECTED insert conn 3: +1 insert full-timeout : +0 diff --git a/src/tests/test.test b/src/tests/test.test index 729808d..04867f6 100644 --- a/src/tests/test.test +++ b/src/tests/test.test @@ -1,288 +1,288 @@ × isupport-clear -log 1 $.. isupport cleared -log 1 $.. isupport:CHANTYPES set to: [#&] -log 1 $.. isupport:PREFIX set to: [(ov)@+] -log 1 $.. isupport:USERLEN set to: [10] +log 1 $ isupport cleared +log 1 $ isupport:CHANTYPES set to: [#&] +log 1 $ isupport:PREFIX set to: [(ov)@+] +log 1 $ isupport:USERLEN set to: [10] × standard-clear insert isupport-clear : +1 -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 × conn_init_0 -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 foobarbazquux 0 * :baz -log 1 >.. NICK :foo +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 foobarbazquux 0 * :baz +log 1 > NICK :foo × conn_init_1 # expect some NOTICE and PING to process/reply during initiation -loggedservermsg 0 1 <.. :*.?.net NOTICE * :*** Looking up your ident... -log 2 <.. ({bold|server}) *** Looking up your ident... -loggedservermsg 0 1 <.. :*.?.net NOTICE * :*** Looking up your hostname... -log 2 <.. ({bold|server}) *** Looking up your hostname... -loggedservermsg 0 1 <.. :*.?.net NOTICE * :*** Found your hostname (baz.bar.foo) -log 2 <.. ({bold|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 × conn_init_2 # of all pre-MOTD greeting messages, only process isupports -loggedservermsg 0 1 <.. :foo.bar.baz 001 foo1 :Welcome to the foo.bar.baz network -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 001 foo1 :Welcome to the foo.bar.baz network +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 <.. ({bold|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. × during_conn # test recoverable 432 > /nick @foo -log 1 >.. NICK :@foo -loggedservermsg 0 1 <.. :*.?.net 432 foo1 @foo :Erroneous nickname -log 1 $!. nickname refused for bad format, keeping current one +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 <.. [{bold|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 <.. [{bold|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 >.. [{bold|foo1}] hello, how is it going -loggedservermsg 0 1 <.. :baz!~baz@baz.baz PRIVMSG foo1 :fine! -log 6 <.. [{bold|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 >.. [{bold|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]] insert isupport-clear : +1 -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 × disconnect insert isupport-clear : +8 -log 8 $.. connection_state set to: [] -log , $.. DISCONNECTED +log 8 $ connection_state set to: [] +log , $ DISCONNECTED × @@ -291,12 +291,12 @@ log , $.. DISCONNECTED insert standard-clear : +1 # connect with values set by /connect, init CAP negotation -log 1 $.. hostname set to: [foo.bar.baz] -log 1 $.. port set to: [-1] -log 1 $.. nick_wanted set to: [foo] -log 1 $.. user_wanted set to: [foobarbazquux] -log 1 $.. realname set to: [baz] -log 1 $.. password set to: [bar] +log 1 $ hostname set to: [foo.bar.baz] +log 1 $ port set to: [-1] +log 1 $ nick_wanted set to: [foo] +log 1 $ user_wanted set to: [foobarbazquux] +log 1 $ realname set to: [baz] +log 1 $ password set to: [bar] insert conn_init_0 : +1 insert conn_init_1 : +0 @@ -304,80 +304,80 @@ insert conn_init_2 : +0 # 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 > /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 insert during_conn : +0 # test setting up second client, but 432 irrecoverably > /connect baz.bar.foo ?foo foo:foo insert standard-clear : +8 -log 8 $.. hostname set to: [baz.bar.foo] -log 8 $.. port set to: [-1] -log 8 $.. nick_wanted set to: [?foo] -log 8 $.. user_wanted set to: [foo] -log 8 $.. realname set to: [foo] +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] insert conn_init_0 :5 +8 -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 insert disconnect : +8 -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 insert standard-clear : +9 -log 9 $.. hostname set to: [baz.baz.baz] -log 9 $.. port set to: [-1] -log 9 $.. nick_wanted set to: [baz] -log 9 $.. user_wanted set to: [baz] -log 9 $.. realname set to: [baz] +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] insert conn_init_0 :5 +9 -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] insert disconnect : +9 -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 insert conn_init_0 1:3 +1 -log 2,3,4,5,6,7 $.. CONNECTED +log 2,3,4,5,6,7 $ CONNECTED insert conn_init_0 4: +1 insert conn_init_1 : +0 insert conn_init_2 :1 +0 -log 1 >.. JOIN :#testtest +log 1 > JOIN :#testtest insert conn_init_2 1: +0 insert during_conn : +0 diff --git a/src/tests/tui_draw.test b/src/tests/tui_draw.test index b0aca13..185140d 100644 --- a/src/tests/tui_draw.test +++ b/src/tests/tui_draw.test @@ -133,117 +133,117 @@ insert prompt-empty : +23 × history_0 line 0 on_black,bright_white 20§§-§§-§§ §§ -line 1 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: not prefixed by / §§ -line 2 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /foo unknown §§ -line 3 on_black,bright_cyan #.. §§:§§:§§ commands available in this window:§§ -line 4 on_black,bright_cyan #.. §§:§§:§§ /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]§§ -line 5 on_black,bright_cyan #.. §§:§§:§§ /help§§ -line 6 on_black,bright_cyan #.. §§:§§:§§ /list§§ -line 7 on_black,bright_cyan #.. §§:§§:§§ /prompt_enter§§ -line 8 on_black,bright_cyan #.. §§:§§:§§ /quit§§ -line 9 on_black,bright_cyan #.. §§:§§:§§ /window TOWARDS§§ -line 10 on_black,bright_cyan #.. §§:§§:§§ /window.history.scroll DIRECTION§§ -line 11 on_black,bright_cyan #.. §§:§§:§§ /window.paste -line 12 on_black,bright_cyan #.. §§:§§:§§ /window.prompt.backspace§§ -line 13 on_black,bright_cyan #.. §§:§§:§§ /window.prompt.move_cursor DIRECTION§§ -line 14 on_black,bright_cyan #.. §§:§§:§§ /window.prompt.scroll DIRECTION§§ -line 15 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /0 unknown§§ -line 16 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /1 unknown§§ -line 17 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /2 unknown§§ -line 18 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /3 unknown§§ -line 19 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /4 unknown§§ -line 20 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /5 unknown§§ -line 21 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /6 unknown§§ -line 22 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /7 unknown§§ -line 23 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_01234567 unknown§§ -line 24 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_012345678§§ +line 1 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: not prefixed by / §§ +line 2 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: /foo unknown §§ +line 3 on_black,bright_cyan # §§:§§:§§ commands available in this window:§§ +line 4 on_black,bright_cyan # §§:§§:§§ /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]§§ +line 5 on_black,bright_cyan # §§:§§:§§ /help§§ +line 6 on_black,bright_cyan # §§:§§:§§ /list§§ +line 7 on_black,bright_cyan # §§:§§:§§ /prompt_enter§§ +line 8 on_black,bright_cyan # §§:§§:§§ /quit§§ +line 9 on_black,bright_cyan # §§:§§:§§ /window TOWARDS§§ +line 10 on_black,bright_cyan # §§:§§:§§ /window.history.scroll DIRECTION§§ +line 11 on_black,bright_cyan # §§:§§:§§ /window.paste +line 12 on_black,bright_cyan # §§:§§:§§ /window.prompt.backspace§§ +line 13 on_black,bright_cyan # §§:§§:§§ /window.prompt.move_cursor DIRECTION§§ +line 14 on_black,bright_cyan # §§:§§:§§ /window.prompt.scroll DIRECTION§§ +line 15 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: /0 unknown§§ +line 16 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: /1 unknown§§ +line 17 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: /2 unknown§§ +line 18 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: /3 unknown§§ +line 19 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: /4 unknown§§ +line 20 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: /5 unknown§§ +line 21 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: /6 unknown§§ +line 22 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: /7 unknown§§ +line 23 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_0123456789 unknown§§ +line 24 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_0123456789_§§ line 25 on_black,bright_red,bold unknown§§ -line 26 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /bar_0123456789_0123456789_012345678§§ +line 26 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: /bar_0123456789_0123456789_0123456789_§§ line 27 on_black,bright_red,bold unknown§§ -line 28 on_black,bright_cyan #.. §§:§§:§§ windows available via /window:§§ -line 29 on_black,bright_cyan #.. §§:§§:§§ 0) :start§§ -line 30 on_black,bright_cyan #.. §§:§§:§§ 1) foo.bar.baz:debug§§ +line 28 on_black,bright_cyan # §§:§§:§§ windows available via /window:§§ +line 29 on_black,bright_cyan # §§:§§:§§ 0) :start§§ +line 30 on_black,bright_cyan # §§:§§:§§ 1) foo.bar.baz:debug§§ × history_1 line 0 on_black,bright_white 20§§-§§-§§ §§ -line 1 on_black,bright_yellow $.. §§:§§:§§ isupport cleared -line 2 on_black,bright_yellow $.. §§:§§:§§ isupport:CHANTYPES set to: [#&] -line 3 on_black,bright_yellow $.. §§:§§:§§ isupport:PREFIX set to: [(ov)@+] -line 4 on_black,bright_yellow $.. §§:§§:§§ isupport:USERLEN set to: [10] -line 5 on_black,bright_yellow $.. §§:§§:§§ caps cleared -line 6 on_black,bright_yellow $.. §§:§§:§§ users cleared -line 7 on_black,bright_yellow $.. §§:§§:§§ channels cleared -line 8 on_black,bright_yellow $.. §§:§§:§§ hostname set to: [foo.bar.baz] -line 9 on_black,bright_yellow $.. §§:§§:§§ port set to: [-1] -line 10 on_black,bright_yellow $.. §§:§§:§§ nick_wanted set to: [foo] -line 11 on_black,bright_yellow $.. §§:§§:§§ user_wanted set to: [baz] -line 12 on_black,bright_yellow $.. §§:§§:§§ realname set to: [bar] -line 13 on_black,bright_yellow $.. §§:§§:§§ port set to: [6697] -line 14 on_black,bright_yellow $.. §§:§§:§§ connection_state set to: [connecting] -line 15 on_black,bright_yellow $.. §§:§§:§§ connection_state set to: [connected] -line 16 on_black,bright_green >.. §§:§§:§§ CAP LS :302§§ -line 17 on_black,bright_green >.. §§:§§:§§ USER baz 0 * :bar§§ -line 18 on_black,bright_green >.. §§:§§:§§ NICK :foo§§ -line 19 on_black,bright_white <.. §§:§§:§§ PING :? -line 20 on_black,bright_green >.. §§:§§:§§ PONG :? -line 21 on_black,bright_white <.. §§:§§:§§ PING :123456789 123456789 123456789 123456789 123456789 123456789§§ +line 1 on_black,bright_yellow $ §§:§§:§§ isupport cleared +line 2 on_black,bright_yellow $ §§:§§:§§ isupport:CHANTYPES set to: [#&] +line 3 on_black,bright_yellow $ §§:§§:§§ isupport:PREFIX set to: [(ov)@+] +line 4 on_black,bright_yellow $ §§:§§:§§ isupport:USERLEN set to: [10] +line 5 on_black,bright_yellow $ §§:§§:§§ caps cleared +line 6 on_black,bright_yellow $ §§:§§:§§ users cleared +line 7 on_black,bright_yellow $ §§:§§:§§ channels cleared +line 8 on_black,bright_yellow $ §§:§§:§§ hostname set to: [foo.bar.baz] +line 9 on_black,bright_yellow $ §§:§§:§§ port set to: [-1] +line 10 on_black,bright_yellow $ §§:§§:§§ nick_wanted set to: [foo] +line 11 on_black,bright_yellow $ §§:§§:§§ user_wanted set to: [baz] +line 12 on_black,bright_yellow $ §§:§§:§§ realname set to: [bar] +line 13 on_black,bright_yellow $ §§:§§:§§ port set to: [6697] +line 14 on_black,bright_yellow $ §§:§§:§§ connection_state set to: [connecting] +line 15 on_black,bright_yellow $ §§:§§:§§ connection_state set to: [connected] +line 16 on_black,bright_green > §§:§§:§§ CAP LS :302§§ +line 17 on_black,bright_green > §§:§§:§§ USER baz 0 * :bar§§ +line 18 on_black,bright_green > §§:§§:§§ NICK :foo§§ +line 19 on_black,bright_white < §§:§§:§§ PING :? +line 20 on_black,bright_green > §§:§§:§§ PONG :? +line 21 on_black,bright_white < §§:§§:§§ PING :9 123456789 123456789 123456789 123456789 123456789 123456789§§ line 22 on_black,bright_white 123456789 123456789§§ -line 23 on_black,bright_green >.. §§:§§:§§ PONG :123456789 123456789 123456789 123456789 123456789 123456789§§ +line 23 on_black,bright_green > §§:§§:§§ PONG :9 123456789 123456789 123456789 123456789 123456789 123456789§§ line 24 on_black,bright_green 123456789 123456789§§ -line 25 on_black,bright_white <.. §§:§§:§§ PING :foo -line 26 on_black,bright_green >.. §§:§§:§§ PONG :foo -line 27 on_black,bright_white <.. §§:§§:§§ PING :bar -line 28 on_black,bright_green >.. §§:§§:§§ PONG :bar -line 29 on_black,bright_white <.. §§:§§:§§ PING :baz -line 30 on_black,bright_green >.. §§:§§:§§ PONG :baz -line 31 on_black,bright_white <.. §§:§§:§§ PING :0 -line 32 on_black,bright_green >.. §§:§§:§§ PONG :0 -line 33 on_black,bright_white <.. §§:§§:§§ PING :1 -line 34 on_black,bright_green >.. §§:§§:§§ PONG :1 -line 35 on_black,bright_white <.. §§:§§:§§ PING :2 -line 36 on_black,bright_green >.. §§:§§:§§ PONG :2 -line 37 on_black,bright_white <.. §§:§§:§§ PING :3 -line 38 on_black,bright_green >.. §§:§§:§§ PONG :3 -line 39 on_black,bright_white <.. §§:§§:§§ PING :4 -line 40 on_black,bright_green >.. §§:§§:§§ PONG :4 -line 41 on_black,bright_white <.. §§:§§:§§ PING :5 -line 42 on_black,bright_green >.. §§:§§:§§ PONG :5 -line 43 on_black,bright_white <.. §§:§§:§§ PING :6 -line 44 on_black,bright_green >.. §§:§§:§§ PONG :6 -line 45 on_black,bright_white <.. §§:§§:§§ PING :7 -line 46 on_black,bright_green >.. §§:§§:§§ PONG :7 -line 47 on_black,bright_white <.. §§:§§:§§ PING :8 -line 48 on_black,bright_green >.. §§:§§:§§ PONG :8 -line 49 on_black,bright_white <.. §§:§§:§§ PING :9 -line 50 on_black,bright_green >.. §§:§§:§§ PONG :9 -line 51 on_black,bright_white <.. §§:§§:§§ PING :10 -line 52 on_black,bright_green >.. §§:§§:§§ PONG :10 -line 53 on_black,bright_white <.. §§:§§:§§ PING :11 -line 54 on_black,bright_green >.. §§:§§:§§ PONG :11 -line 55 on_black,bright_white <.. §§:§§:§§ PING :12 -line 56 on_black,bright_green >.. §§:§§:§§ PONG :12 -line 57 on_black,bright_white <.. §§:§§:§§ PING :13 -line 58 on_black,bright_green >.. §§:§§:§§ PONG :13 -line 59 on_black,bright_white <.. §§:§§:§§ PING :14 -line 60 on_black,bright_green >.. §§:§§:§§ PONG :14 -line 61 on_black,bright_white <.. §§:§§:§§ PING :15 -line 62 on_black,bright_green >.. §§:§§:§§ PONG :15 -line 63 on_black,bright_white <.. §§:§§:§§ PING :16 -line 64 on_black,bright_green >.. §§:§§:§§ PONG :16 -line 65 on_black,bright_white <.. §§:§§:§§ PING :17 -line 66 on_black,bright_green >.. §§:§§:§§ PONG :17 -line 67 on_black,bright_white <.. §§:§§:§§ PING :18 -line 68 on_black,bright_green >.. §§:§§:§§ PONG :18 -line 69 on_black,bright_white <.. §§:§§:§§ PING :19 -line 70 on_black,bright_green >.. §§:§§:§§ PONG :19 -line 71 on_black,bright_white <.. §§:§§:§§ PING :20 -line 72 on_black,bright_green >.. §§:§§:§§ PONG :20 -line 73 on_black,bright_white <.. §§:§§:§§ PING :21 -line 74 on_black,bright_green >.. §§:§§:§§ PONG :21 -line 75 on_black,bright_white <.. §§:§§:§§ PING :22 -line 76 on_black,bright_green >.. §§:§§:§§ PONG :22 -line 77 on_black,bright_white <.. §§:§§:§§ PING :23 -line 78 on_black,bright_green >.. §§:§§:§§ PONG :23 +line 25 on_black,bright_white < §§:§§:§§ PING :foo +line 26 on_black,bright_green > §§:§§:§§ PONG :foo +line 27 on_black,bright_white < §§:§§:§§ PING :bar +line 28 on_black,bright_green > §§:§§:§§ PONG :bar +line 29 on_black,bright_white < §§:§§:§§ PING :baz +line 30 on_black,bright_green > §§:§§:§§ PONG :baz +line 31 on_black,bright_white < §§:§§:§§ PING :0 +line 32 on_black,bright_green > §§:§§:§§ PONG :0 +line 33 on_black,bright_white < §§:§§:§§ PING :1 +line 34 on_black,bright_green > §§:§§:§§ PONG :1 +line 35 on_black,bright_white < §§:§§:§§ PING :2 +line 36 on_black,bright_green > §§:§§:§§ PONG :2 +line 37 on_black,bright_white < §§:§§:§§ PING :3 +line 38 on_black,bright_green > §§:§§:§§ PONG :3 +line 39 on_black,bright_white < §§:§§:§§ PING :4 +line 40 on_black,bright_green > §§:§§:§§ PONG :4 +line 41 on_black,bright_white < §§:§§:§§ PING :5 +line 42 on_black,bright_green > §§:§§:§§ PONG :5 +line 43 on_black,bright_white < §§:§§:§§ PING :6 +line 44 on_black,bright_green > §§:§§:§§ PONG :6 +line 45 on_black,bright_white < §§:§§:§§ PING :7 +line 46 on_black,bright_green > §§:§§:§§ PONG :7 +line 47 on_black,bright_white < §§:§§:§§ PING :8 +line 48 on_black,bright_green > §§:§§:§§ PONG :8 +line 49 on_black,bright_white < §§:§§:§§ PING :9 +line 50 on_black,bright_green > §§:§§:§§ PONG :9 +line 51 on_black,bright_white < §§:§§:§§ PING :10 +line 52 on_black,bright_green > §§:§§:§§ PONG :10 +line 53 on_black,bright_white < §§:§§:§§ PING :11 +line 54 on_black,bright_green > §§:§§:§§ PONG :11 +line 55 on_black,bright_white < §§:§§:§§ PING :12 +line 56 on_black,bright_green > §§:§§:§§ PONG :12 +line 57 on_black,bright_white < §§:§§:§§ PING :13 +line 58 on_black,bright_green > §§:§§:§§ PONG :13 +line 59 on_black,bright_white < §§:§§:§§ PING :14 +line 60 on_black,bright_green > §§:§§:§§ PONG :14 +line 61 on_black,bright_white < §§:§§:§§ PING :15 +line 62 on_black,bright_green > §§:§§:§§ PONG :15 +line 63 on_black,bright_white < §§:§§:§§ PING :16 +line 64 on_black,bright_green > §§:§§:§§ PONG :16 +line 65 on_black,bright_white < §§:§§:§§ PING :17 +line 66 on_black,bright_green > §§:§§:§§ PONG :17 +line 67 on_black,bright_white < §§:§§:§§ PING :18 +line 68 on_black,bright_green > §§:§§:§§ PONG :18 +line 69 on_black,bright_white < §§:§§:§§ PING :19 +line 70 on_black,bright_green > §§:§§:§§ PONG :19 +line 71 on_black,bright_white < §§:§§:§§ PING :20 +line 72 on_black,bright_green > §§:§§:§§ PONG :20 +line 73 on_black,bright_white < §§:§§:§§ PING :21 +line 74 on_black,bright_green > §§:§§:§§ PONG :21 +line 75 on_black,bright_white < §§:§§:§§ PING :22 +line 76 on_black,bright_green > §§:§§:§§ PONG :22 +line 77 on_black,bright_white < §§:§§:§§ PING :23 +line 78 on_black,bright_green > §§:§§:§§ PONG :23 × @@ -265,7 +265,7 @@ insert status-[0]-prompt : +22 # non-empty command input starts log at bottom, with date above it > foo -log 0 #!. invalid prompt command: not prefixed by / +log 0 # invalid prompt command: not prefixed by / insert lines-empty :20 +0 insert history_0 :2 +20 insert status-[0]-prompt : +22 @@ -282,7 +282,7 @@ insert status-[0]-prompt : +22 # further inputs grow log upwards > /foo -log 0 #!. invalid prompt command: /foo unknown +log 0 # invalid prompt command: /foo unknown insert lines-empty :19 +0 insert history_0 :3 +19 insert status-[0]-prompt : +22 @@ -307,18 +307,18 @@ insert history_0 :1 +20 insert scrolldown-2 : +21 insert status-[0]-prompt : +22 > /help -log 0 #.. commands available in this window: -log 0 #.. /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME] -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 insert lines-empty :20 +0 insert history_0 :1 +20 insert scrolldown-14 : +21 @@ -349,21 +349,21 @@ insert lines-empty :7 +0 insert history_0 :15 +7 insert status-[0]-prompt : +22 > /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 insert history_0 1:23 +0 insert status-[0]-prompt : +22 @@ -381,10 +381,10 @@ insert status-[0]-prompt : +22 # check wrapping > /window.history.scroll down -> /foo_0123456789_0123456789_01234567 -log 0 #!. invalid prompt command: /foo_0123456789_0123456789_01234567 unknown -> /foo_0123456789_0123456789_012345678 -log 0 #!. invalid prompt command: /foo_0123456789_0123456789_012345678 unknown +> /foo_0123456789_0123456789_0123456789 +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 status-[0]-prompt : +22 @@ -405,9 +405,9 @@ insert history_0 :15 +6 insert scrolldown-10 : +21 insert status-[0]-prompt : +22 -# check wrapped input only increases below-scroll count by one -> /bar_0123456789_0123456789_012345678 -log 0 #!. invalid prompt command: /bar_0123456789_0123456789_012345678 unknown +# 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 +0 insert history_0 :15 +6 insert scrolldown-11 : +21 @@ -438,26 +438,26 @@ insert status-[0:1]-prompt : +22 # check that triggering creation of new window with new lines adds it to status, with unread-lines count > /connect foo.bar.baz foo bar:baz -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 insert lines-empty :20 +0 insert history_0 :1 +20 insert scrolldown-25 : +21 @@ -519,19 +519,19 @@ insert status-[0]-1-prompt : +22 # check new lines push bookmark up > /list -log 0 #.. windows available via /window: -log 0 #.. 0) :start -log 0 #.. 1) foo.bar.baz:debug +log 0 # windows available via /window: +log 0 # 0) :start +log 0 # 1) foo.bar.baz:debug insert history_0 10:28 +0 insert bookmark : +18 insert history_0 28:31 +19 insert status-[0]-1-prompt : +22 # check new lines growing in other window, one of which long enough to wrap, to be re-start count in status (with wrapped only as single) -loggedservermsg 0 1 <.. PING :? -log 1 >.. PONG :? -loggedservermsg 0 1 <.. PING :123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 -log 1 >.. PONG :123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 +loggedservermsg 0 1 < PING :? +log 1 > PONG :? +loggedservermsg 0 1 < PING :9 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 +log 1 > PONG :9 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 insert history_0 10:28 +0 insert bookmark : +18 insert history_0 28:31 +19 @@ -546,8 +546,8 @@ insert status-0-[1]-prompt : +22 ### # check that growth below scroll does not by itself re-position bookmark in history > /window.history.scroll up -loggedservermsg 0 1 <.. PING :foo -log 1 >.. PONG :foo +loggedservermsg 0 1 < PING :foo +log 1 > PONG :foo insert lines-empty :6 +0 insert history_1 0:15 +6 insert scrolldown-10 : +21 @@ -572,8 +572,8 @@ insert status-0-[1:2]-prompt : +22 # check that growing lines below scroll in other preserves non-bottom bookmark (left in sight on previous window leave) > /window 0 -loggedservermsg 0 1 <.. PING :bar -log 1 >.. PONG :bar +loggedservermsg 0 1 < PING :bar +log 1 > PONG :bar insert history_0 10:31 +0 insert bookmark : +21 insert status-[0]-1:4-prompt : +22 @@ -590,8 +590,8 @@ insert history_1 :15 +6 insert scrolldown-12 : +21 insert status-0-[1:4]-prompt : +22 > /window 0 -loggedservermsg 0 1 <.. PING :baz -log 1 >.. PONG :baz +loggedservermsg 0 1 < PING :baz +log 1 > PONG :baz insert history_0 10:31 +0 insert bookmark : +21 insert status-[0]-1:6-prompt : +22 @@ -612,8 +612,8 @@ insert history_1 25:31 +16 insert status-0-[1]-prompt : +22 # check log growth beyond max depth only remarkable after scrolling up to limit -loggedservermsg 0 1 <.. PING :0 -log 1 >.. PONG :0 +loggedservermsg 0 1 < PING :0 +log 1 > PONG :0 insert history_1 12:25 +0 insert bookmark : +13 insert history_1 25:33 +14 @@ -634,8 +634,8 @@ insert scrolldown-29 : +21 insert status-0-[1]-prompt : +22 # check cut-off log growth seen from topmost scroll not affecting scrolldown count, but unread-lines status -loggedservermsg 0 1 <.. PING :0 -log 1 >.. PONG :0 +loggedservermsg 0 1 < PING :0 +log 1 > PONG :0 insert lines-empty :20 +0 insert history_1 3:4 +20 insert scrolldown-29 : +21 @@ -646,36 +646,36 @@ insert status-0-[1:2]-prompt : +22 insert history_0 10:31 +0 insert bookmark : +21 insert status-[0]-1:2-prompt : +22 -loggedservermsg 0 1 <.. PING :1 -log 1 >.. PONG :1 -loggedservermsg 0 1 <.. PING :2 -log 1 >.. PONG :2 -loggedservermsg 0 1 <.. PING :3 -log 1 >.. PONG :3 -loggedservermsg 0 1 <.. PING :4 -log 1 >.. PONG :4 -loggedservermsg 0 1 <.. PING :5 -log 1 >.. PONG :5 -loggedservermsg 0 1 <.. PING :6 -log 1 >.. PONG :6 -loggedservermsg 0 1 <.. PING :7 -log 1 >.. PONG :7 -loggedservermsg 0 1 <.. PING :8 -log 1 >.. PONG :8 -loggedservermsg 0 1 <.. PING :9 -log 1 >.. PONG :9 -loggedservermsg 0 1 <.. PING :10 -log 1 >.. PONG :10 -loggedservermsg 0 1 <.. PING :11 -log 1 >.. PONG :11 -loggedservermsg 0 1 <.. PING :12 -log 1 >.. PONG :12 -loggedservermsg 0 1 <.. PING :13 -log 1 >.. PONG :13 -loggedservermsg 0 1 <.. PING :14 -log 1 >.. PONG :14 -loggedservermsg 0 1 <.. PING :15 -log 1 >.. PONG :15 +loggedservermsg 0 1 < PING :1 +log 1 > PONG :1 +loggedservermsg 0 1 < PING :2 +log 1 > PONG :2 +loggedservermsg 0 1 < PING :3 +log 1 > PONG :3 +loggedservermsg 0 1 < PING :4 +log 1 > PONG :4 +loggedservermsg 0 1 < PING :5 +log 1 > PONG :5 +loggedservermsg 0 1 < PING :6 +log 1 > PONG :6 +loggedservermsg 0 1 < PING :7 +log 1 > PONG :7 +loggedservermsg 0 1 < PING :8 +log 1 > PONG :8 +loggedservermsg 0 1 < PING :9 +log 1 > PONG :9 +loggedservermsg 0 1 < PING :10 +log 1 > PONG :10 +loggedservermsg 0 1 < PING :11 +log 1 > PONG :11 +loggedservermsg 0 1 < PING :12 +log 1 > PONG :12 +loggedservermsg 0 1 < PING :13 +log 1 > PONG :13 +loggedservermsg 0 1 < PING :14 +log 1 > PONG :14 +loggedservermsg 0 1 < PING :15 +log 1 > PONG :15 insert history_0 10:31 +0 insert bookmark : +21 insert status-[0]-1:32-prompt : +22 @@ -700,8 +700,8 @@ insert history_1 41:61 +0 insert status-0-[1]-prompt : +22 # check bookmark remains absent with log growing while scrolled to bottom, … -loggedservermsg 0 1 <.. PING :16 -log 1 >.. PONG :16 +loggedservermsg 0 1 < PING :16 +log 1 > PONG :16 insert history_1 43:63 +0 insert status-0-[1]-prompt : +22 @@ -711,8 +711,8 @@ insert lines-empty :2 +0 insert history_1 35:54 +2 insert scrolldown-11 : +21 insert status-0-[1]-prompt : +22 -loggedservermsg 0 1 <.. PING :17 -log 1 >.. PONG :17 +loggedservermsg 0 1 < PING :17 +log 1 > PONG :17 insert lines-empty :4 +0 insert history_1 37:54 +4 insert scrolldown-13 : +21 @@ -731,36 +731,36 @@ insert lines-empty :2 +0 insert history_1 37:54 +2 insert scrolldown-11 : +21 insert status-0-[1]-prompt : +22 -loggedservermsg 0 1 <.. PING :18 -log 1 >.. PONG :18 -loggedservermsg 0 1 <.. PING :19 -log 1 >.. PONG :19 -loggedservermsg 0 1 <.. PING :20 -log 1 >.. PONG :20 -loggedservermsg 0 1 <.. PING :21 -log 1 >.. PONG :21 -loggedservermsg 0 1 <.. PING :22 -log 1 >.. PONG :22 -loggedservermsg 0 1 <.. PING :23 -log 1 >.. PONG :23 -loggedservermsg 0 1 <.. PING :24 -log 1 >.. PONG :24 -loggedservermsg 0 1 <.. PING :25 -log 1 >.. PONG :25 -loggedservermsg 0 1 <.. PING :26 -log 1 >.. PONG :26 -loggedservermsg 0 1 <.. PING :27 -log 1 >.. PONG :27 -loggedservermsg 0 1 <.. PING :28 -log 1 >.. PONG :28 -loggedservermsg 0 1 <.. PING :29 -log 1 >.. PONG :29 -loggedservermsg 0 1 <.. PING :30 -log 1 >.. PONG :30 -loggedservermsg 0 1 <.. PING :31 -log 1 >.. PONG :31 -loggedservermsg 0 1 <.. PING :32 -log 1 >.. PONG :32 +loggedservermsg 0 1 < PING :18 +log 1 > PONG :18 +loggedservermsg 0 1 < PING :19 +log 1 > PONG :19 +loggedservermsg 0 1 < PING :20 +log 1 > PONG :20 +loggedservermsg 0 1 < PING :21 +log 1 > PONG :21 +loggedservermsg 0 1 < PING :22 +log 1 > PONG :22 +loggedservermsg 0 1 < PING :23 +log 1 > PONG :23 +loggedservermsg 0 1 < PING :24 +log 1 > PONG :24 +loggedservermsg 0 1 < PING :25 +log 1 > PONG :25 +loggedservermsg 0 1 < PING :26 +log 1 > PONG :26 +loggedservermsg 0 1 < PING :27 +log 1 > PONG :27 +loggedservermsg 0 1 < PING :28 +log 1 > PONG :28 +loggedservermsg 0 1 < PING :29 +log 1 > PONG :29 +loggedservermsg 0 1 < PING :30 +log 1 > PONG :30 +loggedservermsg 0 1 < PING :31 +log 1 > PONG :31 +loggedservermsg 0 1 < PING :32 +log 1 > PONG :32 insert lines-empty :20 +0 insert history_1 67:68 +20 insert scrolldown-29 : +21 diff --git a/src/tests/tui_line_formattings.test b/src/tests/tui_line_formattings.test index fbf3ade..48b418d 100644 --- a/src/tests/tui_line_formattings.test +++ b/src/tests/tui_line_formattings.test @@ -1,76 +1,76 @@ > /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 > /window 1 -loggedservermsg 0 1 <.. :foo.bar.baz 001 foo :Welcome to the foo.bar.baz network -log 1 $.. users:me:nick set to: [?] -log 1 $.. users:me:nick set to: [foo] +loggedservermsg 0 1 < :foo.bar.baz 001 foo :Welcome to the foo.bar.baz network +log 1 $ users:me:nick set to: [?] +log 1 $ users:me:nick set to: [foo] # check full line not wrapped -loggedservermsg 0 1 <.. :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 12345678 0 -line 21 on_black,bright_white <.. §§:§§:§§ :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 12345678 0§§ +loggedservermsg 0 1 < :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 12345678 0 +line 21 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 12345678 0§§ # check wrap if last space-separated item one char too long -loggedservermsg 0 1 <.. :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 12345678 01 -line 20 on_black,bright_white <.. §§:§§:§§ :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 12345678§§ +loggedservermsg 0 1 < :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 12345678 01 +line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 12345678§§ line 21 on_black,bright_white 01§§ # check wrap if item starts right after width-final space -loggedservermsg 0 1 <.. :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 123456789 1 -line 20 on_black,bright_white <.. §§:§§:§§ :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 123456789§§ +loggedservermsg 0 1 < :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 123456789 1 +line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 123456789§§ line 21 on_black,bright_white 1§§ # check wrap if item starts right after space after item extending to end of width -loggedservermsg 0 1 <.. :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 1234567890 2 -line 20 on_black,bright_white <.. §§:§§:§§ :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 1234567890§§ +loggedservermsg 0 1 < :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 1234567890 2 +line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 1234567890§§ line 21 on_black,bright_white 2§§ # check wrap if item starts right after double-space after item extending to end of width -loggedservermsg 0 1 <.. :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 1234567890 3 -line 20 on_black,bright_white <.. §§:§§:§§ :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 1234567890§§ +loggedservermsg 0 1 < :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 1234567890 3 +line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 1234567890§§ line 21 on_black,bright_white 3§§ # check wrap on item too large to fit into screen width minus indent -loggedservermsg 0 1 <.. :foo.bar.baz 001 foo :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_2345678 -line 19 on_black,bright_white <.. §§:§§:§§ :foo.bar.baz 001 foo§§ +loggedservermsg 0 1 < :foo.bar.baz 001 foo :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_2345678 +line 19 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo§§ line 20 on_black,bright_white :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_234567§§ line 21 on_black,bright_white 8 # check wrapping calculation on double-width character (tbh not much of a test since the tester itself counts specifically this char as two, so it's pretty much the same as above testing with a sequence of two ASCII chars; mostly just ensures that the wrapping code relies on Terminal.length_to_term) -loggedservermsg 0 1 <.. :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 1234567 💓 -line 21 on_black,bright_white <.. §§:§§:§§ :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 1234567 💓§§ -loggedservermsg 0 1 <.. :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 12345678 💓 -line 20 on_black,bright_white <.. §§:§§:§§ :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 12345678§§ +loggedservermsg 0 1 < :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 1234567 💓 +line 21 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 1234567 💓§§ +loggedservermsg 0 1 < :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 12345678 💓 +line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 12345678§§ line 21 on_black,bright_white 💓§§ -loggedservermsg 0 1 <.. :foo.bar.baz 001 foo :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_23456💓 -line 19 on_black,bright_white <.. §§:§§:§§ :foo.bar.baz 001 foo§§ +loggedservermsg 0 1 < :foo.bar.baz 001 foo :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_23456💓 +line 19 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo§§ line 20 on_black,bright_white :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_23456§§ line 21 on_black,bright_white 💓§§ # check interpretation and escape of formatting characters -servermsg 0 :*.?.net NOTICE * :*** checking {esc|ape}s, formatting not counting into wrap -log 1 <.. :*.?.net NOTICE * :*** checking {{esc|ape{}s, formatting not counting into wrap -log 2 <.. ({bold|server}) *** checking {{esc|ape{}s, formatting not counting into wrap -line 20 on_black,bright_white <.. §§:§§:§§ :*.?.net NOTICE * :*** checking {esc|ape}s, formatting not counting§§ +servermsg 0 :*.?.net NOTICE * :*** check that {esc|ape}s, formatting not counting into wrap +log 1 < :*.?.net NOTICE * :*** check that {esc|ape}s, formatting not counting into wrap +log 2 < (server) *** check that {esc|ape}s, formatting not counting into wrap +line 20 on_black,bright_white < §§:§§:§§ :*.?.net NOTICE * :*** check that {esc|ape}s, formatting not counting§§ line 21 on_black,bright_white into wrap§§ > /window 2 -line 21 on_black,bright_white <.. §§:§§:§§ (§§§§§§) *** checking {esc|ape}s, formatting not counting into wrap§§ -line 21 on_black,bright_white,bold §§§§§§§§§§§§§§server§ +line 21 on_black,bright_white < §§:§§:§§ (§§§§§§) *** check that {esc|ape}s, formatting not counting into wrap§§ +line 21 on_black,bright_white,bold §§§§§§§§§§§§server§ diff --git a/src/tests/tui_prompt_basics.test b/src/tests/tui_prompt_basics.test index 7c7a68b..261d980 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