From d423a3cf439814a2b7a35d2d5d9568515b51abac Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Thu, 23 Oct 2025 05:38:29 +0200 Subject: [PATCH] Add basic log depth cutoff tests. --- src/ircplom/testing.py | 1 + src/ircplom/tui_base.py | 22 +++++++++----- src/tests/tui_draw.test | 63 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 7 deletions(-) diff --git a/src/ircplom/testing.py b/src/ircplom/testing.py index 183df9d..e949cf2 100644 --- a/src/ircplom/testing.py +++ b/src/ircplom/testing.py @@ -379,6 +379,7 @@ class _Playbook: class TestingClientTui(ClientTui): 'Collects keypresses via TestTerminal and test file, compares log results.' + _MAXLEN_LOG = 30 _client_cls = _TestClientKnowingTui _clients: list[_TestClientKnowingTui] _path_config: Optional[Path] = None diff --git a/src/ircplom/tui_base.py b/src/ircplom/tui_base.py index 4b2cf9d..ef48d08 100644 --- a/src/ircplom/tui_base.py +++ b/src/ircplom/tui_base.py @@ -24,7 +24,6 @@ LOG_FMT_ATTRS: dict[str, tuple[str, ...]] = { LOG_FMT_ALERT: ('bold', 'bright_red'), _LOG_PREFIX_DEFAULT: ('bright_cyan',), } -_LOG_MAX_LEN = 1000 _MIN_HEIGHT = 4 _MIN_WIDTH = 32 @@ -123,8 +122,13 @@ class _HistoryWidget(_ScrollableWidget): _BOOKMARK_HISTORY_IDX_POS: int = -3 _PADDING_HISTORY_IDX_POS: int = -4 - def __init__(self, wrap: Callable[[str], list[str]], **kwargs) -> None: + def __init__(self, + maxlen_log: int, + wrap: Callable[[str], list[str]], + **kwargs + ) -> None: super().__init__(**kwargs) + self._maxlen_log = maxlen_log self._wrap = wrap self._wrapped: list[tuple[int, str]] = [] self._newest_read_history_idx_pos = self._UNSET_IDX_POS @@ -155,7 +159,7 @@ class _HistoryWidget(_ScrollableWidget): else (-len(self._wrapped) + self._last_wrapped_idx_pos_for_hist_idx_pos( self._len_full_history + max(self._history_idx_neg, - -_LOG_MAX_LEN)))) + - self._maxlen_log)))) self.bookmark() def append(self, to_append: str) -> None: @@ -167,7 +171,7 @@ class _HistoryWidget(_ScrollableWidget): 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) > _LOG_MAX_LEN: + if len(self._history) > self._maxlen_log: self._history = self._history[1:] self._history_offset += 1 wrap_offset = 0 @@ -414,11 +418,13 @@ class Window: _title = ':start' _last_today = '' - def __init__(self, idx: int, term: 'Terminal', **kwargs) -> None: + def __init__(self, idx: int, term: 'Terminal', maxlen_log: int, **kwargs + ) -> None: super().__init__(**kwargs) self.idx = idx self._term = term - self.history = _HistoryWidget(wrap=self._term.wrap, + self.history = _HistoryWidget(maxlen_log=maxlen_log, + wrap=self._term.wrap, write=self._term.write) self.prompt = self.__annotations__['prompt'](write=self._term.write) if hasattr(self._term, 'size'): @@ -550,6 +556,7 @@ class TerminalInterface(ABC): class BaseTui(QueueMixin): 'Base for graphical user interface elements.' + _MAXLEN_LOG = 1000 def __init__(self, term: TerminalInterface, **kwargs) -> None: super().__init__(**kwargs) @@ -584,7 +591,8 @@ class BaseTui(QueueMixin): def _new_window(self, win_class=Window, **kwargs) -> Window: new_idx = len(self._windows) - win = win_class(idx=new_idx, term=self._term, **kwargs) + win = win_class(idx=new_idx, term=self._term, + maxlen_log=self._MAXLEN_LOG, **kwargs) self._windows += [win] return win diff --git a/src/tests/tui_draw.test b/src/tests/tui_draw.test index e7fd8d7..814f15e 100644 --- a/src/tests/tui_draw.test +++ b/src/tests/tui_draw.test @@ -44,6 +44,8 @@ line 21 on_black,bright_white,reverse vvv [4] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv line 21 on_black,bright_white,reverse vvv [6] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ × scrolldown-8 line 21 on_black,bright_white,reverse vvv [8] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +× scrolldown-9 +line 21 on_black,bright_white,reverse vvv [9] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ × scrolldown-10 line 21 on_black,bright_white,reverse vvv [10] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ × scrolldown-11 @@ -52,10 +54,15 @@ line 21 on_black,bright_white,reverse vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv line 21 on_black,bright_white,reverse vvv [12] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ × scrolldown-14 line 21 on_black,bright_white,reverse vvv [14] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +× scrolldown-19 +line 21 on_black,bright_white,reverse vvv [19] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ × scrolldown-22 line 21 on_black,bright_white,reverse vvv [22] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ × scrolldown-25 line 21 on_black,bright_white,reverse vvv [25] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +× scrolldown-29 +line 21 on_black,bright_white,reverse vvv [29] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ + × status-[0]-prompt line 22 on_black,bright_white :start)=====================================================================([0]§§ @@ -81,6 +88,8 @@ insert prompt-empty : +23 × status-0-[1:6]-prompt line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:6)]§§ insert prompt-empty : +23 +× status-0-[1:32]-prompt +line 22 on_black,bright_white foo.bar.baz:debug)===================================================(0 [(1:32)]§§ × status-0-[1]-prompt line 22 on_black,bright_white foo.bar.baz:debug)========================================================(0 [1]§§ insert prompt-empty : +23 @@ -168,6 +177,38 @@ 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 31 on_black,bright_white <.. §§:§§:§§ PING :1 +line 32 on_black,bright_green >.. §§:§§:§§ PONG :1 +line 33 on_black,bright_white <.. §§:§§:§§ PING :2 +line 34 on_black,bright_green >.. §§:§§:§§ PONG :2 +line 35 on_black,bright_white <.. §§:§§:§§ PING :3 +line 36 on_black,bright_green >.. §§:§§:§§ PONG :3 +line 37 on_black,bright_white <.. §§:§§:§§ PING :4 +line 38 on_black,bright_green >.. §§:§§:§§ PONG :4 +line 39 on_black,bright_white <.. §§:§§:§§ PING :5 +line 40 on_black,bright_green >.. §§:§§:§§ PONG :5 +line 41 on_black,bright_white <.. §§:§§:§§ PING :6 +line 42 on_black,bright_green >.. §§:§§:§§ PONG :6 +line 43 on_black,bright_white <.. §§:§§:§§ PING :7 +line 44 on_black,bright_green >.. §§:§§:§§ PONG :7 +line 45 on_black,bright_white <.. §§:§§:§§ PING :8 +line 46 on_black,bright_green >.. §§:§§:§§ PONG :8 +line 47 on_black,bright_white <.. §§:§§:§§ PING :9 +line 48 on_black,bright_green >.. §§:§§:§§ PONG :9 +line 49 on_black,bright_white <.. §§:§§:§§ PING :10 +line 50 on_black,bright_green >.. §§:§§:§§ PONG :10 +line 51 on_black,bright_white <.. §§:§§:§§ PING :11 +line 52 on_black,bright_green >.. §§:§§:§§ PONG :11 +line 53 on_black,bright_white <.. §§:§§:§§ PING :12 +line 54 on_black,bright_green >.. §§:§§:§§ PONG :12 +line 55 on_black,bright_white <.. §§:§§:§§ PING :13 +line 56 on_black,bright_white <.. §§:§§:§§ PONG :13 +line 57 on_black,bright_white <.. §§:§§:§§ PING :14 +line 58 on_black,bright_white <.. §§:§§:§§ PONG :14 +line 59 on_black,bright_white <.. §§:§§:§§ PING :15 +line 60 on_black,bright_white <.. §§:§§:§§ PONG :15 × @@ -535,5 +576,27 @@ insert bookmark : +15 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 +insert history_1 12:25 +0 +insert bookmark : +13 +insert history_1 25:33 +14 +insert status-0-[1]-prompt : +22 +> /window.history.scroll up +insert history_1 2:23 +0 +insert scrolldown-9 : +21 +insert status-0-[1]-prompt : +22 +> /window.history.scroll up +insert lines-empty :10 +0 +insert history_1 1:12 +10 +insert scrolldown-19 : +21 +insert status-0-[1]-prompt : +22 +> /window.history.scroll up +insert lines-empty :20 +0 +insert history_1 1:2 +20 +insert scrolldown-29 : +21 +insert status-0-[1]-prompt : +22 + > /quit log 0 <.. -- 2.30.2