home · contact · privacy
Restructure testing command syntax for greater flexibility and extensibility. master
authorChristian Heller <c.heller@plomlompom.de>
Fri, 17 Oct 2025 03:43:13 +0000 (05:43 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Fri, 17 Oct 2025 03:43:13 +0000 (05:43 +0200)
src/ircplom/testing.py
src/tests/_timeout_retries.test
src/tests/config.test
src/tests/connect_disconnect_legalities.test
src/tests/error_disconnects.test
src/tests/pingpong.test
src/tests/test.test
src/tests/tui_draw.test
src/tests/tui_prompt_basics.test

index ff7babb85bfd613db256b85552878f9dbe0fd486..bdc0ccee51e177abfe767f5113605475fb866fb6 100644 (file)
@@ -18,17 +18,29 @@ _FAKE_TIMEOUT_PORTS_BEYOND = 10000
 
 _MARK_ANCHOR = '|'
 _MARK_COMMENT = '#'
 
 _MARK_ANCHOR = '|'
 _MARK_COMMENT = '#'
-_MARK_LOG = 'log_'
-_MARK_LOGSRVRMSG = 'loggedservermsg_'
+_MARK_LOG = 'log'
+_MARK_LOGSRVRMSG = 'loggedservermsg'
 _MARK_PROMPT = '>'
 _MARK_REPEAT = 'repeat'
 _MARK_PROMPT = '>'
 _MARK_REPEAT = 'repeat'
-_MARK_SCREENLINE = 'line_'
-_MARK_SERVERMSG = 'servermsg_'
+_MARK_SCREENLINE = 'line'
+_MARK_SERVERMSG = 'servermsg'
 _MARK_WAIT = 'wait'
 _SEP_0 = ' '
 _SEP_1 = ','
 _SEP_2 = ':'
 
 _MARK_WAIT = 'wait'
 _SEP_0 = ' '
 _SEP_1 = ','
 _SEP_2 = ':'
 
+_N_ARGS_FOR_CMD = {
+    _MARK_ANCHOR: 1,
+    _MARK_COMMENT: 2,
+    _MARK_LOG: 2,
+    _MARK_LOGSRVRMSG: 3,
+    _MARK_PROMPT: 1,
+    _MARK_REPEAT: 3,
+    _MARK_SCREENLINE: 4,
+    _MARK_SERVERMSG: 2,
+    _MARK_WAIT: 1
+}
+
 
 class TestTerminal(QueueMixin, TerminalInterface):
     'Collects keypresses from string queue, otherwise mostly dummy.'
 
 class TestTerminal(QueueMixin, TerminalInterface):
     'Collects keypresses from string queue, otherwise mostly dummy.'
@@ -75,7 +87,7 @@ class TestTerminal(QueueMixin, TerminalInterface):
             yield TuiEvent.affector('handle_keyboard_event'
                                     ).kw(typed_in=to_yield)
 
             yield TuiEvent.affector('handle_keyboard_event'
                                     ).kw(typed_in=to_yield)
 
-    def assert_screen_line(self, y: int, x: int, text: str, attrs_str: str
+    def assert_screen_line(self, y: int, x: int, attrs_str: str, text: str
                            ) -> None:
         'Assert test screen at (y,x) shows text, with attrs of attrs_str set.'
         assert len(text) + x <= self.size.x
                            ) -> None:
         'Assert test screen at (y,x) shows text, with attrs of attrs_str set.'
         assert len(text) + x <= self.size.x
@@ -83,9 +95,10 @@ class TestTerminal(QueueMixin, TerminalInterface):
         for idx, cell_expected in enumerate(
                 (self._attrs_tuple_from_str(attrs_str), c) for c in text):
             cell_found = self._screen[y][x + idx]
         for idx, cell_expected in enumerate(
                 (self._attrs_tuple_from_str(attrs_str), c) for c in text):
             cell_found = self._screen[y][x + idx]
-            info = (x + idx, 'EXPECTED/FOUND',
-                    cell_expected, cell_found,
-                    text, ''.join(t[1] for t in self._screen[y][x:]))
+            info = ('AT_X', x + idx,
+                    'CHAR EXPECTED', cell_expected, 'FOUND', cell_found,
+                    'FULL LINE EXPECTED', text,
+                    'FOUND', ''.join(t[1] for t in self._screen[y][x:]))
             assert cell_expected == cell_found, info
 
 
             assert cell_expected == cell_found, info
 
 
@@ -138,20 +151,21 @@ class _TestClientKnowingTui(ClientKnowingTui):
         if self.db.port > _FAKE_TIMEOUT_PORTS_BEYOND:
             self.db.port = self.db.port - 1
 
         if self.db.port > _FAKE_TIMEOUT_PORTS_BEYOND:
             self.db.port = self.db.port - 1
 
-    def _test_before(self, context: str, msg: str, cmp_msg: str) -> None:
-        assert context.startswith(_MARK_SERVERMSG)
-        assert context[len(_MARK_SERVERMSG):] == str(self.idx)
-        assert msg == cmp_msg
+    def _test_before(self, cmd_name: str, args: tuple[str, ...], cmp_msg: str
+                     ) -> None:
+        assert cmd_name == _MARK_SERVERMSG
+        assert args[0] == str(self.idx)
+        assert args[1] == cmp_msg
 
     def on_handled_loop_exception(self, e: IrcConnException) -> None:
         self.playbook.test_wrap(
 
     def on_handled_loop_exception(self, e: IrcConnException) -> None:
         self.playbook.test_wrap(
-                lambda ctx, msg: self._test_before(ctx, msg, str(e)), None,
-                super().on_handled_loop_exception, e)
+            lambda cmd_name, args: self._test_before(cmd_name, args, str(e)),
+            None, super().on_handled_loop_exception, e)
 
     def handle_msg(self, msg: IrcMessage) -> None:
         self.playbook.test_wrap(
 
     def handle_msg(self, msg: IrcMessage) -> None:
         self.playbook.test_wrap(
-                lambda ctx, msg_: self._test_before(ctx, msg_, msg.raw), None,
-                super().handle_msg, msg)
+            lambda cmd_name, args: self._test_before(cmd_name, args, msg.raw),
+            None, super().handle_msg, msg)
 
 
 class _Playbook:
 
 
 class _Playbook:
@@ -170,46 +184,49 @@ class _Playbook:
         def expand_parsed(marker: str, parse_into: Callable, **kwargs) -> bool:
             inserts: list[tuple[str, str]] = []
             for idx, line_t in enumerate(self._lines_t):
         def expand_parsed(marker: str, parse_into: Callable, **kwargs) -> bool:
             inserts: list[tuple[str, str]] = []
             for idx, line_t in enumerate(self._lines_t):
-                if not line_t[1].startswith(marker):
+                if not line_t[1]:
+                    continue
+                cmd_name, remains = line_t[1].split(_SEP_0, maxsplit=1)
+                if not cmd_name == marker:
                     continue
                     continue
-                inserts = parse_into(line_t, **kwargs)
+                inserts = parse_into(line_t[0],
+                                     self._args_for_cmd(cmd_name, remains),
+                                     **kwargs)
                 self._lines_t = (self._lines_t[:idx]
                                  + inserts
                                  + self._lines_t[idx + 1:])
                 break
             return bool(inserts)
 
                 self._lines_t = (self._lines_t[:idx]
                                  + inserts
                                  + self._lines_t[idx + 1:])
                 break
             return bool(inserts)
 
-        def split_server_put_and_log(line_t: tuple[str, str], **_
+        def split_server_put_and_log(index_str: str,
+                                     args: tuple[str, ...],
+                                     **_
                                      ) -> list[tuple[str, str]]:
                                      ) -> list[tuple[str, str]]:
-            index_str = line_t[0]
-            context, msg = line_t[1].split(_SEP_0, maxsplit=1)
-            fmt, msg_no_fmt = msg.split(LOG_FMT_SEP, maxsplit=1)
+            fmt, msg_no_fmt = args[2].split(LOG_FMT_SEP, maxsplit=1)
             for c in fmt[:-1]:
                 assert c in LOG_FMT_ATTRS
             assert fmt[-1] == LOG_PREFIX_IN
             for c in fmt[:-1]:
                 assert c in LOG_FMT_ATTRS
             assert fmt[-1] == LOG_PREFIX_IN
-            c_id, win_ids = context[len(_MARK_LOGSRVRMSG):].split(_SEP_2,
-                                                                  maxsplit=1)
-            return [(f'{index_str}:s:0', _SEP_0.join((_MARK_SERVERMSG + c_id,
-                                                      msg_no_fmt))),
-                    (f'{index_str}:s:1', _SEP_0.join((_MARK_LOG + win_ids,
-                                                      msg)))]
-
-        def repeat(line_t: tuple[str, str], anchors: dict[str, int], **__
+            return [(f'{index_str}:s:0',
+                     _SEP_0.join((_MARK_SERVERMSG, args[0], msg_no_fmt))),
+                    (f'{index_str}:s:1',
+                     _SEP_0.join((_MARK_LOG, args[1], args[2])))]
+
+        def repeat(index_str: str,
+                   args: tuple[str, ...],
+                   anchors: dict[str, int],
+                   **__
                    ) -> list[tuple[str, str]]:
                    ) -> list[tuple[str, str]]:
-            index_str = line_t[0]
-            range_data = line_t[1].split(_SEP_0, maxsplit=1
-                                         )[1].split(_SEP_0, maxsplit=2)
-            start_key, end_key = range_data[:2]
-            start = anchors[start_key] + 1
-            end = anchors[end_key]
             inserts: list[tuple[str, str]] = []
             inserts: list[tuple[str, str]] = []
-            for inserted_t in self._lines_t[int(start):int(end)]:
+            for inserted_t in self._lines_t[int(anchors[args[0]] + 1
+                                                ):int(anchors[args[1]])]:
                 insert = inserted_t[1]
                 insert = inserted_t[1]
-                if len(range_data) == 3\
-                        and insert and not insert.startswith(_MARK_ANCHOR):
-                    insert = _SEP_0.join(
-                        [range_data[2]]
-                        + [insert.split(_SEP_0, maxsplit=1)[1]])
+                if len(args) == 3 and insert:
+                    cmd_name, remains = insert.split(_SEP_0, maxsplit=1)
+                    if cmd_name == _MARK_ANCHOR:
+                        continue
+                    args_ = list(self._args_for_cmd(cmd_name, remains))
+                    args_[0] = args[2]
+                    insert = _SEP_0.join([cmd_name] + args_)
                 inserts += [(index_str + ':r:' + inserted_t[0], insert)]
             return inserts
 
                 inserts += [(index_str + ':r:' + inserted_t[0], insert)]
             return inserts
 
@@ -227,19 +244,39 @@ class _Playbook:
                 if line_t[1] and not (line_t[1].startswith(_MARK_ANCHOR)
                                       or line_t[1].startswith(_MARK_COMMENT))]
         if self._verbose:
                 if line_t[1] and not (line_t[1].startswith(_MARK_ANCHOR)
                                       or line_t[1].startswith(_MARK_COMMENT))]
         if self._verbose:
+            title_idx = 'line number(s)'
+            title_cmdname = 'command'
             self._max_len_idx = max(len(line_t[0])
                                     for line_t in self._lines_t)
             self._max_len_idx = max(len(line_t[0])
                                     for line_t in self._lines_t)
-            self._max_len_ctx = max(len(line_t[1].split(_SEP_0)[0])
-                                    for line_t in self._lines_t)
-            title_idx = 'line number(s)'
-            title_ctx = 'context'
             self._max_len_idx = max(self._max_len_idx, len(title_idx))
             self._max_len_idx = max(self._max_len_idx, len(title_idx))
-            self._max_len_ctx = max(self._max_len_ctx, len(title_ctx))
+            self._max_len_cmdname = len(title_cmdname)
+            self._max_len_midargs = 0
+            for line_t in self._lines_t:
+                cmd_name, args = self._cmdname_and_args_from(line_t[1])
+                self._max_len_cmdname = max(len(cmd_name),
+                                            self._max_len_cmdname)
+                self._max_len_midargs = max(len(self._args_verbose(args[:-1])),
+                                            self._max_len_midargs)
             print(self._str_padded_to(title_idx, self._max_len_idx),
             print(self._str_padded_to(title_idx, self._max_len_idx),
-                  self._str_padded_to(title_ctx, self._max_len_ctx),
-                  'content')
+                  self._str_padded_to(title_cmdname, self._max_len_cmdname),
+                  'arguments')
         self._idx = 0
 
         self._idx = 0
 
+    @staticmethod
+    def _args_verbose(args: tuple[str, ...]) -> str:
+        return ' '.join(f'[{arg}]' for arg in args)
+
+    @staticmethod
+    def _args_for_cmd(cmd_name: str, remains: str) -> tuple[str, ...]:
+        n_args = _N_ARGS_FOR_CMD[cmd_name]
+        return ((remains,) if n_args == 1
+                else tuple(remains.split(_SEP_0, maxsplit=n_args - 1)))
+
+    @classmethod
+    def _cmdname_and_args_from(cls, line: str) -> tuple[str, tuple[str, ...]]:
+        cmd_name, remains = line.split(_SEP_0, maxsplit=1)
+        return cmd_name, cls._args_for_cmd(cmd_name, remains)
+
     @staticmethod
     def _str_padded_to(msg: str, length: int) -> str:
         return msg + ' ' * (length - len(msg))
     @staticmethod
     def _str_padded_to(msg: str, length: int) -> str:
         return msg + ' ' * (length - len(msg))
@@ -260,50 +297,47 @@ class _Playbook:
                   *f_args, **f_kwargs
                   ) -> None:
         'Call f with checks before and after against playbook, play it on.'
                   *f_args, **f_kwargs
                   ) -> None:
         'Call f with checks before and after against playbook, play it on.'
-        context, msg = self._current_line[1].split(_SEP_0, maxsplit=1)
+        cmd_name, args = self._cmdname_and_args_from(self._current_line[1])
         if test_before:
         if test_before:
-            test_before(context, msg)
+            test_before(cmd_name, args)
         self._idx += 1
         next_idx_before = self._idx
         ret = f(*f_args, **f_kwargs)
         if test_after:
         self._idx += 1
         next_idx_before = self._idx
         ret = f(*f_args, **f_kwargs)
         if test_after:
-            test_after(context, msg, ret)
+            test_after(cmd_name, args, ret)
         if self._idx == next_idx_before:  # f may have called ._play_till_test
             self._play_till_test()        # so we avoid jumping over next test
 
     def _play_till_test(self) -> None:
         while True:
             idx_info, line = self._current_line
         if self._idx == next_idx_before:  # f may have called ._play_till_test
             self._play_till_test()        # so we avoid jumping over next test
 
     def _play_till_test(self) -> None:
         while True:
             idx_info, line = self._current_line
-            context, msg = line.split(_SEP_0, maxsplit=1)
+            cmd_name, args = self._cmdname_and_args_from(line)
             if self._verbose:
                 print(self._str_padded_to(idx_info, self._max_len_idx),
             if self._verbose:
                 print(self._str_padded_to(idx_info, self._max_len_idx),
-                      self._str_padded_to(context, self._max_len_ctx),
-                      msg)
-            if context == _MARK_PROMPT:
+                      self._str_padded_to(cmd_name, self._max_len_cmdname),
+                      self._str_padded_to(self._args_verbose(args[:-1]),
+                                          self._max_len_midargs),
+                      self._args_verbose(args[-1:]))
+            if cmd_name == _MARK_PROMPT:
                 assert self.put_keypress is not None
                 assert self.put_keypress is not None
-                for c in msg:
+                for c in args[0]:
                     self.put_keypress(c)
                 self.put_keypress('KEY_ENTER')
                 break
                     self.put_keypress(c)
                 self.put_keypress('KEY_ENTER')
                 break
-            if context.startswith(_MARK_SERVERMSG):
-                client = self._get_client(int(context[len(_MARK_SERVERMSG):]))
+            if cmd_name == _MARK_SERVERMSG:
+                client = self._get_client(int(args[0]))
                 assert isinstance(client.conn, _FakeIrcConnection), client.conn
                 assert isinstance(client.conn, _FakeIrcConnection), client.conn
-                client.conn.put_server_msg(msg)
+                client.conn.put_server_msg(args[1])
                 break
                 break
-            if context.startswith(_MARK_SCREENLINE):
+            if cmd_name == _MARK_LOG:
+                break
+            if cmd_name == _MARK_SCREENLINE:
                 assert self.assert_screen_line is not None
                 assert self.redraw_affected is not None
                 assert self.assert_screen_line is not None
                 assert self.redraw_affected is not None
-                x_str, attrs_str, msg = msg.split('.', maxsplit=2)
                 self.redraw_affected()
                 self.redraw_affected()
-                self.assert_screen_line(int(context[len(_MARK_SCREENLINE):]),
-                                        int(x_str), msg, attrs_str)
-            elif context.startswith(_MARK_LOG):
-                break
-            elif context == _MARK_WAIT:
-                assert msg.isdigit()
-                sleep(int(msg))
-            else:
-                break
+                self.assert_screen_line(int(args[0]), int(args[1]), *args[2:])
+            elif cmd_name == _MARK_WAIT:
+                sleep(int(args[0]))
             self._idx += 1
 
 
             self._idx += 1
 
 
@@ -347,7 +381,8 @@ class TestingClientTui(ClientTui):
         return client
 
     def log(self, msg: str, **kwargs) -> None:
         return client
 
     def log(self, msg: str, **kwargs) -> None:
-        def test_after(context: str, expected_msg: str, ret) -> None:
+        def test_after(cmd_name: str, args: tuple[str, ...], ret) -> None:
+            assert cmd_name == _MARK_LOG
             win_ids, logged_msg = ret
             fmt, time_str, msg_sans_time = logged_msg.split(' ', maxsplit=2)
             msg_sans_time = fmt + ' ' + msg_sans_time
             win_ids, logged_msg = ret
             fmt, time_str, msg_sans_time = logged_msg.split(' ', maxsplit=2)
             msg_sans_time = fmt + ' ' + msg_sans_time
@@ -355,18 +390,17 @@ class TestingClientTui(ClientTui):
             for c in time_str[:2] + time_str[3:5] + time_str[6:]:
                 assert c.isdigit()
             assert time_str[2] == ':' and time_str[5] == ':'
             for c in time_str[:2] + time_str[3:5] + time_str[6:]:
                 assert c.isdigit()
             assert time_str[2] == ':' and time_str[5] == ':'
-            expected_win_ids = tuple(
-                    int(idx) for idx in context[len(_MARK_LOG):].split(_SEP_1)
-                    if idx)
-            info = ('WANTED:', expected_win_ids, expected_msg,
+            expected_win_ids = tuple(int(idx) for idx in args[0].split(_SEP_1)
+                                     if idx)
+            info = ('WANTED:', expected_win_ids, args[1],
                     'GOT:', win_ids, msg_sans_time)
                     'GOT:', win_ids, msg_sans_time)
-            assert expected_msg == msg_sans_time, info
+            assert args[1] == msg_sans_time, info
             assert expected_win_ids == win_ids, info
 
         self._playbook.test_wrap(None, test_after, super().log, msg, **kwargs)
 
     def cmd__prompt_enter(self) -> None:
             assert expected_win_ids == win_ids, info
 
         self._playbook.test_wrap(None, test_after, super().log, msg, **kwargs)
 
     def cmd__prompt_enter(self) -> None:
-        def test_before(context: str, msg: str) -> None:
-            assert context == _MARK_PROMPT
-            assert msg == self.window.prompt.input_buffer[:]
+        def test_before(cmd_name: str, args: tuple[str, ...]) -> None:
+            assert cmd_name == _MARK_PROMPT
+            assert args[0] == self.window.prompt.input_buffer[:]
         self._playbook.test_wrap(test_before, None, super().cmd__prompt_enter)
         self._playbook.test_wrap(test_before, None, super().cmd__prompt_enter)
index b08a3f70bb23274a8c97c902c0589db934a7260c..232ccdb39bdbebe9fc025ed44bd1a29a1d13a076 100644 (file)
@@ -5,81 +5,81 @@
 
 | clientwin-init-in
 | isupport-clear-in
 
 | clientwin-init-in
 | isupport-clear-in
-log_1 ..$ isupport cleared
-log_1 ..$ isupport:CHANTYPES set to: [#&]
-log_1 ..$ isupport:PREFIX set to: [(ov)@+]
-log_1 ..$ isupport:USERLEN set to: [10]
+log 1 ..$ isupport cleared
+log 1 ..$ isupport:CHANTYPES set to: [#&]
+log 1 ..$ isupport:PREFIX set to: [(ov)@+]
+log 1 ..$ isupport:USERLEN set to: [10]
 | isupport-clear-out
 | isupport-clear-out
-log_1 ..$ caps cleared
-log_1 ..$ users cleared
-log_1 ..$ channels cleared
+log 1 ..$ caps cleared
+log 1 ..$ users cleared
+log 1 ..$ channels cleared
 | clientwin-init-out
 | clientwin-init-out
-, ..$ DISCONNECTED
-log_1 ..$ hostname set to: [foo.bar.baz]
+log , ..$ DISCONNECTED
+log 1 ..$ hostname set to: [foo.bar.baz]
 | conn-init-retries-in
 | conn-init-retries-in
-log_1 ..$ port set to: [10003]
-log_1 ..$ nick_wanted set to: [foo]
-log_1 ..$ user_wanted set to: [foobarbazquux]
-log_1 ..$ realname set to: [baz]
-log_1 ..$ password set to: [bar]
+log 1 ..$ port set to: [10003]
+log 1 ..$ nick_wanted set to: [foo]
+log 1 ..$ user_wanted set to: [foobarbazquux]
+log 1 ..$ realname set to: [baz]
+log 1 ..$ password set to: [bar]
 
 
-log_1 ..$ connection_state set to: [connecting]
-log_1 ..$ port set to: [10002]
-log_1 ..$ connection_state set to: [failed to connect: FAKE TESTING TIMEOUT]
-log_1 .!$ will retry connecting in 1 seconds
+log 1 ..$ connection_state set to: [connecting]
+log 1 ..$ port set to: [10002]
+log 1 ..$ connection_state set to: [failed to connect: FAKE TESTING TIMEOUT]
+log 1 .!$ will retry connecting in 1 seconds
 
 
-log_1 ..$ connection_state set to: [connecting]
-log_1 ..$ port set to: [10001]
-log_1 ..$ connection_state set to: [failed to connect: FAKE TESTING TIMEOUT]
-log_1 .!$ will retry connecting in 2 seconds
+log 1 ..$ connection_state set to: [connecting]
+log 1 ..$ port set to: [10001]
+log 1 ..$ connection_state set to: [failed to connect: FAKE TESTING TIMEOUT]
+log 1 .!$ will retry connecting in 2 seconds
 
 
-log_1 ..$ connection_state set to: [connecting]
-log_1 ..$ port set to: [10000]
-log_1 ..$ connection_state set to: [failed to connect: FAKE TESTING TIMEOUT]
-log_1 .!$ will retry connecting in 4 seconds
+log 1 ..$ connection_state set to: [connecting]
+log 1 ..$ port set to: [10000]
+log 1 ..$ connection_state set to: [failed to connect: FAKE TESTING TIMEOUT]
+log 1 .!$ will retry connecting in 4 seconds
 | conn-init-retries-out
 
 # with TestingClient finally having reduced port to 10000, connecting works now
 | conn-full-in
 | conn0-in
 | conn-init-retries-out
 
 # with TestingClient finally having reduced port to 10000, connecting works now
 | conn-full-in
 | conn0-in
-log_1 ..$ connection_state set to: [connecting]
-log_1 ..$ connection_state set to: [connected]
+log 1 ..$ connection_state set to: [connecting]
+log 1 ..$ connection_state set to: [connected]
 | conn0-out
 | conn0-out
-, ..$ CONNECTED
+log , ..$ CONNECTED
 | conn1-in
 | conn1-in
-log_1 ..> CAP LS :302
-log_1 ..> USER foobarbazquux 0 * :baz
-log_1 ..> NICK :foo
+log 1 ..> CAP LS :302
+log 1 ..> USER foobarbazquux 0 * :baz
+log 1 ..> NICK :foo
 | conn1-out
 | conn-full-out
 
 # test retry chain also started by in-connection timeout
 | conn1-out
 | conn-full-out
 
 # test retry chain also started by in-connection timeout
-servermsg_0 timeout
-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]
+servermsg 0 timeout
+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]
 repeat isupport-clear-in isupport-clear-out
 repeat isupport-clear-in isupport-clear-out
-log_1 ..$ connection_state set to: []
-, ..$ DISCONNECTED
-log_1 .!$ will retry connecting in 1 seconds
+log 1 ..$ connection_state set to: []
+log , ..$ DISCONNECTED
+log 1 .!$ will retry connecting in 1 seconds
 repeat conn-full-in conn-full-out
 
 # on second server, check timed auto-retries don't activate after manual intervention
 > /connect baz.bar.foo:10003 foo:bar baz:foobarbazquux
 repeat conn-full-in conn-full-out
 
 # on second server, check timed auto-retries don't activate after manual intervention
 > /connect baz.bar.foo:10003 foo:bar baz:foobarbazquux
-repeat clientwin-init-in clientwin-init-out log_2
-, ..$ DISCONNECTED
-log_2 ..$ hostname set to: [baz.bar.foo]
-repeat conn-init-retries-in conn-init-retries-out log_2
+repeat clientwin-init-in clientwin-init-out 2
+log , ..$ DISCONNECTED
+log 2 ..$ hostname set to: [baz.bar.foo]
+repeat conn-init-retries-in conn-init-retries-out 2
 > /window 2
 > /reconnect
 > /window 2
 > /reconnect
-repeat conn0-in conn0-out log_2
-, ..$ CONNECTED
-repeat conn1-in conn1-out log_2
+repeat conn0-in conn0-out 2
+log , ..$ CONNECTED
+repeat conn1-in conn1-out 2
 wait 4
 > /disconnect
 wait 4
 > /disconnect
-log_2 ..> QUIT :ircplom says bye
+log 2 ..> QUIT :ircplom says bye
 wait 4
 
 > /quit
 wait 4
 
 > /quit
-log_0 ..<
+log 0 ..<
index 2f1f0a78a2baa33301cda39d192241174ba8a920..179a5dc4561b6df4189eb4efcac03569da8fdc24 100644 (file)
@@ -1,25 +1,25 @@
-log_0 ..# Found config at tests/config.toml, reading …
-log_0 ..# Connecting: {'hostname': 'irc.test0.net', 'nickname': 'foo', 'password': 'bar', 'username': 'baz', 'realname': 'quux', 'port': 1234, 'channels': ['#test', '##testtest']}
-log_1 ..$ isupport cleared
-log_1 ..$ isupport:CHANTYPES set to: [#&]
-log_1 ..$ isupport:PREFIX set to: [(ov)@+]
-log_1 ..$ isupport:USERLEN set to: [10]
-log_1 ..$ caps cleared
-log_1 ..$ users cleared
-log_1 ..$ channels cleared
-, ..$ 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]
-, ..$ CONNECTED
-log_1 ..> CAP LS :302
-log_1 *.> USER baz 0 * :quux
-log_1 ..> NICK :foo
+log 0 ..# Found config at tests/config.toml, reading …
+log 0 ..# Connecting: {'hostname': 'irc.test0.net', 'nickname': 'foo', 'password': 'bar', 'username': 'baz', 'realname': 'quux', 'port': 1234, 'channels': ['#test', '##testtest']}
+log 1 ..$ isupport cleared
+log 1 ..$ isupport:CHANTYPES set to: [#&]
+log 1 ..$ isupport:PREFIX set to: [(ov)@+]
+log 1 ..$ isupport:USERLEN set to: [10]
+log 1 ..$ caps cleared
+log 1 ..$ users cleared
+log 1 ..$ channels cleared
+log , ..$ DISCONNECTED
+log 1 ..$ hostname set to: [irc.test0.net]
+log 1 ..$ port set to: [1234]
+log 1 ..$ nick_wanted set to: [foo]
+log 1 ..$ user_wanted set to: [baz]
+log 1 *.$ realname set to: [quux]
+log 1 ..$ password set to: [bar]
+log 1 ..$ connection_state set to: [connecting]
+log 1 ..$ connection_state set to: [connected]
+log , ..$ CONNECTED
+log 1 ..> CAP LS :302
+log 1 *.> USER baz 0 * :quux
+log 1 ..> NICK :foo
 
 > /quit
 
 > /quit
-log_0 .< 
+log 0 .< 
index 6726fda17d76b11930f9cc7efa1210c6023694e3..c5dd1cbaa874410f8b0b8f653a3ea5f7c1f2a7f8 100644 (file)
@@ -1,51 +1,51 @@
 # to prepare, initiate connection
 > /connect foo.bar.baz foo bar:baz
 | isupport-clear-in
 # to prepare, initiate connection
 > /connect foo.bar.baz foo bar:baz
 | isupport-clear-in
-log_1 ..$ isupport cleared
-log_1 ..$ isupport:CHANTYPES set to: [#&]
-log_1 ..$ isupport:PREFIX set to: [(ov)@+]
-log_1 ..$ isupport:USERLEN set to: [10]
+log 1 ..$ isupport cleared
+log 1 ..$ isupport:CHANTYPES set to: [#&]
+log 1 ..$ isupport:PREFIX set to: [(ov)@+]
+log 1 ..$ isupport:USERLEN set to: [10]
 | isupport-clear-out
 | isupport-clear-out
-log_1 ..$ caps cleared
-log_1 ..$ users cleared
-log_1 ..$ channels cleared
-, ..$ DISCONNECTED
-log_1 ..$ hostname set to: [foo.bar.baz]
-log_1 ..$ port set to: [-1]
-log_1 ..$ nick_wanted set to: [foo]
-log_1 ..$ user_wanted set to: [baz]
-log_1 ..$ realname set to: [bar]
-log_1 ..$ port set to: [6697]
+log 1 ..$ caps cleared
+log 1 ..$ users cleared
+log 1 ..$ channels cleared
+log , ..$ DISCONNECTED
+log 1 ..$ hostname set to: [foo.bar.baz]
+log 1 ..$ port set to: [-1]
+log 1 ..$ nick_wanted set to: [foo]
+log 1 ..$ user_wanted set to: [baz]
+log 1 ..$ realname set to: [bar]
+log 1 ..$ port set to: [6697]
 | connecting-in
 | connecting-in
-log_1 ..$ connection_state set to: [connecting]
-log_1 ..$ connection_state set to: [connected]
-, ..$ CONNECTED
-log_1 ..> CAP LS :302
-log_1 ..> USER baz 0 * :bar
-log_1 ..> NICK :foo
+log 1 ..$ connection_state set to: [connecting]
+log 1 ..$ connection_state set to: [connected]
+log , ..$ CONNECTED
+log 1 ..> CAP LS :302
+log 1 ..> USER baz 0 * :bar
+log 1 ..> NICK :foo
 | connecting-out
 
 # fail to reconnect while connected
 > /window 1
 > /reconnect
 | connecting-out
 
 # fail to reconnect while connected
 > /window 1
 > /reconnect
-log_1 .!$ not re-connecting since already connected
+log 1 .!$ not re-connecting since already connected
 
 # handle /disconnect on being connected
 > /disconnect
 
 # handle /disconnect on being connected
 > /disconnect
-log_1 ..> QUIT :ircplom says bye
-loggedservermsg_0:1 ..< ERROR :Closing link: (whatever@whatever.com) [Quit: ircplom says bye]
-log_1 ..$ connection_state set to: [Closing link: (whatever@whatever.com) [Quit: ircplom says bye]]
+log 1 ..> QUIT :ircplom says bye
+loggedservermsg 0 1 ..< ERROR :Closing link: (whatever@whatever.com) [Quit: ircplom says bye]
+log 1 ..$ connection_state set to: [Closing link: (whatever@whatever.com) [Quit: ircplom says bye]]
 repeat isupport-clear-in isupport-clear-out
 repeat isupport-clear-in isupport-clear-out
-log_1 ..$ connection_state set to: []
-, ..$ DISCONNECTED
+log 1 ..$ connection_state set to: []
+log , ..$ DISCONNECTED
 
 # fail to disconnect when already disconnected
 > /disconnect
 
 # fail to disconnect when already disconnected
 > /disconnect
-log_1 .!$ cannot send, connection seems closed
+log 1 .!$ cannot send, connection seems closed
 
 # succeed to re-connect after disconnect
 > /reconnect
 repeat connecting-in connecting-out
 
 > /quit
 
 # succeed to re-connect after disconnect
 > /reconnect
 repeat connecting-in connecting-out
 
 > /quit
-log_0 ..< 
+log 0 ..< 
index e451ab492e138e80523e312945928902ff8e6ad7..4d96ff9f6f3ad97ca3a49128e747eb0703511c4e 100644 (file)
@@ -1,37 +1,37 @@
 # to prepare first test, initiate connected state
 > /connect foo.bar.baz foo bar:baz
 | isupport-clear-in
 # to prepare first test, initiate connected state
 > /connect foo.bar.baz foo bar:baz
 | isupport-clear-in
-log_1 ..$ isupport cleared
-log_1 ..$ isupport:CHANTYPES set to: [#&]
-log_1 ..$ isupport:PREFIX set to: [(ov)@+]
-log_1 ..$ isupport:USERLEN set to: [10]
+log 1 ..$ isupport cleared
+log 1 ..$ isupport:CHANTYPES set to: [#&]
+log 1 ..$ isupport:PREFIX set to: [(ov)@+]
+log 1 ..$ isupport:USERLEN set to: [10]
 | isupport-clear-out
 | isupport-clear-out
-log_1 ..$ caps cleared
-log_1 ..$ users cleared
-log_1 ..$ channels cleared
-, ..$ DISCONNECTED
-log_1 ..$ hostname set to: [foo.bar.baz]
-log_1 ..$ port set to: [-1]
-log_1 ..$ nick_wanted set to: [foo]
-log_1 ..$ user_wanted set to: [baz]
-log_1 ..$ realname set to: [bar]
-log_1 ..$ port set to: [6697]
+log 1 ..$ caps cleared
+log 1 ..$ users cleared
+log 1 ..$ channels cleared
+log , ..$ DISCONNECTED
+log 1 ..$ hostname set to: [foo.bar.baz]
+log 1 ..$ port set to: [-1]
+log 1 ..$ nick_wanted set to: [foo]
+log 1 ..$ user_wanted set to: [baz]
+log 1 ..$ realname set to: [bar]
+log 1 ..$ port set to: [6697]
 | connecting-in
 | connecting-in
-log_1 ..$ connection_state set to: [connecting]
-log_1 ..$ connection_state set to: [connected]
-, ..$ CONNECTED
-log_1 ..> CAP LS :302
-log_1 ..> USER baz 0 * :bar
-log_1 ..> NICK :foo
+log 1 ..$ connection_state set to: [connecting]
+log 1 ..$ connection_state set to: [connected]
+log , ..$ CONNECTED
+log 1 ..> CAP LS :302
+log 1 ..> USER baz 0 * :bar
+log 1 ..> NICK :foo
 | connecting-out
 
 # test default ERROR handling
 | connecting-out
 
 # test default ERROR handling
-loggedservermsg_0:1 ..< ERROR :abc def ghi
-log_1 ..$ connection_state set to: [abc def ghi]
+loggedservermsg 0 1 ..< ERROR :abc def ghi
+log 1 ..$ connection_state set to: [abc def ghi]
 | disconnecting-in
 repeat isupport-clear-in isupport-clear-out
 | disconnecting-in
 repeat isupport-clear-in isupport-clear-out
-log_1 ..$ connection_state set to: []
-, ..$ DISCONNECTED
+log 1 ..$ connection_state set to: []
+log , ..$ DISCONNECTED
 | disconnecting-out
 
 # to prepare next test, get back to connected state
 | disconnecting-out
 
 # to prepare next test, get back to connected state
@@ -40,11 +40,11 @@ log_1 ..$ connection_state set to: []
 repeat connecting-in connecting-out
 
 # test "timed out)" ERROR handling
 repeat connecting-in connecting-out
 
 # test "timed out)" ERROR handling
-loggedservermsg_0:1 ..< ERROR :Closing link: (Connection timed out)
-log_1 ..$ connection_state set to: [Closing link: (Connection timed out)]
+loggedservermsg 0 1 ..< ERROR :Closing link: (Connection timed out)
+log 1 ..$ connection_state set to: [Closing link: (Connection timed out)]
 repeat disconnecting-in disconnecting-out
 repeat disconnecting-in disconnecting-out
-log_1 .!$ will retry connecting in 1 seconds
+log 1 .!$ will retry connecting in 1 seconds
 
 # over and out
 > /quit
 
 # over and out
 > /quit
-log_0 ..<
+log 0 ..<
index d5615db8fe9d911aecaf7b1c35f025a9688164e9..33466a29464d8ed0d8a652eef5cae875dfce0da9 100644 (file)
@@ -1,64 +1,64 @@
 > /connect foo.bar.baz foo:bar baz:foobarbazquux
 | isupport-clear-in
 > /connect foo.bar.baz foo:bar baz:foobarbazquux
 | isupport-clear-in
-log_1 ..$ isupport cleared
-log_1 ..$ isupport:CHANTYPES set to: [#&]
-log_1 ..$ isupport:PREFIX set to: [(ov)@+]
-log_1 ..$ isupport:USERLEN set to: [10]
+log 1 ..$ isupport cleared
+log 1 ..$ isupport:CHANTYPES set to: [#&]
+log 1 ..$ isupport:PREFIX set to: [(ov)@+]
+log 1 ..$ isupport:USERLEN set to: [10]
 | isupport-clear-out
 | isupport-clear-out
-log_1 ..$ caps cleared
-log_1 ..$ users cleared
-log_1 ..$ channels cleared
-, ..$ DISCONNECTED
-log_1 ..$ hostname set to: [foo.bar.baz]
-log_1 ..$ port set to: [-1]
-log_1 ..$ nick_wanted set to: [foo]
-log_1 ..$ user_wanted set to: [foobarbazquux]
-log_1 ..$ realname set to: [baz]
-log_1 ..$ password set to: [bar]
-log_1 ..$ port set to: [6697]
+log 1 ..$ caps cleared
+log 1 ..$ users cleared
+log 1 ..$ channels cleared
+log , ..$ DISCONNECTED
+log 1 ..$ hostname set to: [foo.bar.baz]
+log 1 ..$ port set to: [-1]
+log 1 ..$ nick_wanted set to: [foo]
+log 1 ..$ user_wanted set to: [foobarbazquux]
+log 1 ..$ realname set to: [baz]
+log 1 ..$ password set to: [bar]
+log 1 ..$ port set to: [6697]
 | conn0-in
 | conn0-in
-log_1 ..$ connection_state set to: [connecting]
-log_1 ..$ connection_state set to: [connected]
+log 1 ..$ connection_state set to: [connecting]
+log 1 ..$ connection_state set to: [connected]
 | conn0-out
 | conn0-out
-, ..$ CONNECTED
+log , ..$ CONNECTED
 | conn1-in
 | conn1-in
-log_1 ..> CAP LS :302
-log_1 ..> USER foobarbazquux 0 * :baz
-log_1 ..> NICK :foo
+log 1 ..> CAP LS :302
+log 1 ..> USER foobarbazquux 0 * :baz
+log 1 ..> NICK :foo
 | conn1-out
 
 # ensure we PONG properly
 | conn1-out
 
 # ensure we PONG properly
-loggedservermsg_0:1 ..< PING :?
-log_1 ..> PONG :?
+loggedservermsg 0 1 ..< PING :?
+log 1 ..> PONG :?
 
 # ping on timeout, go on as normal if PONG received 
 | full-timeout-in
 | trigger-ping-in
 
 # ping on timeout, go on as normal if PONG received 
 | full-timeout-in
 | trigger-ping-in
-servermsg_0 timeout
-log_1 ..> PING :what's up?
+servermsg 0 timeout
+log 1 ..> PING :what's up?
 | trigger-ping-out
 | trigger-ping-out
-loggedservermsg_0:1 ..< :*.?.net PONG *.?.net :what's up?
-loggedservermsg_0:1 ..< :*.?.net NOTICE * :*** Looking up your ident...
-log_2 ..< (server) *** Looking up your ident...
+loggedservermsg 0 1 ..< :*.?.net PONG *.?.net :what's up?
+loggedservermsg 0 1 ..< :*.?.net NOTICE * :*** Looking up your ident...
+log 2 ..< (server) *** Looking up your ident...
 
 # another timeout instead of pong? disconnect
 repeat trigger-ping-in trigger-ping-out
 
 # another timeout instead of pong? disconnect
 repeat trigger-ping-in trigger-ping-out
-servermsg_0 timeout
-servermsg_0 no timely PONG from server
-log_1 ..$ connection_state set to: [broken: no timely PONG from server]
+servermsg 0 timeout
+servermsg 0 no timely PONG from server
+log 1 ..$ connection_state set to: [broken: no timely PONG from server]
 repeat isupport-clear-in isupport-clear-out
 repeat isupport-clear-in isupport-clear-out
-log_1 ..$ connection_state set to: []
-log_2 ..$ DISCONNECTED
-log_1 .!$ will retry connecting in 1 seconds
+log 1 ..$ connection_state set to: []
+log 2 ..$ DISCONNECTED
+log 1 .!$ will retry connecting in 1 seconds
 | full-timeout-out
 
 # on re-connect, ensure timer cleared, i.e. only 2nd time-out will disconnect
 > /window 1
 > /reconnect
 repeat conn0-in conn0-out
 | full-timeout-out
 
 # on re-connect, ensure timer cleared, i.e. only 2nd time-out will disconnect
 > /window 1
 > /reconnect
 repeat conn0-in conn0-out
-log_2 ..$ CONNECTED
+log 2 ..$ CONNECTED
 repeat conn1-in conn1-out
 repeat full-timeout-in full-timeout-out
 
 > /quit
 repeat conn1-in conn1-out
 repeat full-timeout-in full-timeout-out
 
 > /quit
-log_0 ..< 
+log 0 ..< 
index 7b940ce849293d2d428a3c7ed722e6f596cc67a5..531032172af2b2492dd9a18f141df16370c83339 100644 (file)
 > /connect foo.bar.baz foo:bar baz:foobarbazquux
 | standard-clears-in
 | isupport-clear-in
 > /connect foo.bar.baz foo:bar baz:foobarbazquux
 | standard-clears-in
 | isupport-clear-in
-log_1 ..$ isupport cleared
-log_1 ..$ isupport:CHANTYPES set to: [#&]
-log_1 ..$ isupport:PREFIX set to: [(ov)@+]
-log_1 ..$ isupport:USERLEN set to: [10]
+log 1 ..$ isupport cleared
+log 1 ..$ isupport:CHANTYPES set to: [#&]
+log 1 ..$ isupport:PREFIX set to: [(ov)@+]
+log 1 ..$ isupport:USERLEN set to: [10]
 | isupport-clear-out
 | isupport-clear-out
-log_1 ..$ caps cleared
-log_1 ..$ users cleared
-log_1 ..$ channels cleared
+log 1 ..$ caps cleared
+log 1 ..$ users cleared
+log 1 ..$ channels cleared
 | standard-clears-out
 | standard-clears-out
-, ..$ DISCONNECTED
+log , ..$ DISCONNECTED
 
 # connect with values set by /connect, init CAP negotation
 
 # 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 ..$ port set to: [6697]
+log 1 ..$ hostname set to: [foo.bar.baz]
+log 1 ..$ port set to: [-1]
+log 1 ..$ nick_wanted set to: [foo]
+log 1 ..$ user_wanted set to: [foobarbazquux]
+log 1 ..$ realname set to: [baz]
+log 1 ..$ password set to: [bar]
+log 1 ..$ port set to: [6697]
 | conn0
 | conn0
-log_1 ..$ connection_state set to: [connecting]
-log_1 ..$ connection_state set to: [connected]
+log 1 ..$ connection_state set to: [connecting]
+log 1 ..$ connection_state set to: [connected]
 | conn1
 | conn1
-, ..$ CONNECTED
+log , ..$ CONNECTED
 | conn2
 | conn2
-log_1 ..> CAP LS :302
-log_1 ..> USER foobarbazquux 0 * :baz
-log_1 ..> NICK :foo
+log 1 ..> CAP LS :302
+log 1 ..> USER foobarbazquux 0 * :baz
+log 1 ..> NICK :foo
 
 # expect some NOTICE and PING to process/reply during initiation
 
 # expect some NOTICE and PING to process/reply during initiation
-loggedservermsg_0:1 ..< :*.?.net NOTICE * :*** Looking up your ident...
-log_2 ..< (server) *** Looking up your ident...
-loggedservermsg_0:1 ..< :*.?.net NOTICE * :*** Looking up your hostname...
-log_2 ..< (server) *** Looking up your hostname...
-loggedservermsg_0:1 ..< :*.?.net NOTICE * :*** Found your hostname (baz.bar.foo)
-log_2 ..< (server) *** Found your hostname (baz.bar.foo)
-loggedservermsg_0:1 ..< PING :?
-log_1 ..> PONG :?
+loggedservermsg 0 1 ..< :*.?.net NOTICE * :*** Looking up your ident...
+log 2 ..< (server) *** Looking up your ident...
+loggedservermsg 0 1 ..< :*.?.net NOTICE * :*** Looking up your hostname...
+log 2 ..< (server) *** Looking up your hostname...
+loggedservermsg 0 1 ..< :*.?.net NOTICE * :*** Found your hostname (baz.bar.foo)
+log 2 ..< (server) *** Found your hostname (baz.bar.foo)
+loggedservermsg 0 1 ..< PING :?
+log 1 ..> PONG :?
 
 # handle 433
 
 # 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
 
 # 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
 
 # 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
 
 # finish CAP negotation, thus login procedure
-log_1 ..> CAP :END
+log 1 ..> CAP :END
 
 # of all pre-MOTD greeting messages, only process isupports
 
 # of all pre-MOTD greeting messages, only process isupports
-loggedservermsg_0:1 ..< :foo.bar.baz 001 foo1 :Welcome to the foo.bar.baz network
+loggedservermsg 0 1 ..< :foo.bar.baz 001 foo1 :Welcome to the foo.bar.baz network
 | conn3
 | conn3
-loggedservermsg_0:1 ..< :foo.bar.baz 002 foo1 :Your host is foo.bar.baz
-loggedservermsg_0:1 ..< :foo.bar.baz 003 foo1 :This server was created Jan 1 2020
-loggedservermsg_0:1 ..< :foo.bar.baz 004 foo1 foo.bar.baz ircserver-1.0 abc def ghi
-loggedservermsg_0:1 ..< :foo.bar.baz 005 foo1 ABC=DEF GHI=JKL :are supported by this server
-log_1 ..$ isupport:ABC set to: [DEF]
-log_1 ..$ isupport:GHI set to: [JKL]
-loggedservermsg_0:1 ..< :foo.bar.baz 005 foo1 MNO=PQR STU=VWX Y=Z :are supported by this server
-log_1 ..$ isupport:MNO set to: [PQR]
-log_1 ..$ isupport:STU set to: [VWX]
-log_1 ..$ isupport:Y set to: [Z]
-loggedservermsg_0:1 ..< :foo.bar.baz 251 foo1 :There are 10 users and 1000 invisible on 5 servers
-loggedservermsg_0:1 ..< :foo.bar.baz 252 foo1 7 :IRC Operators online
-loggedservermsg_0:1 ..< :foo.bar.baz 253 foo1 4 :unknown connection(s)
-loggedservermsg_0:1 ..< :foo.bar.baz 254 foo1 800 :channels formed
-loggedservermsg_0:1 ..< :foo.bar.baz 255 foo1 :I have 100 clients and 1 serveres
-loggedservermsg_0:1 ..< :foo.bar.baz 265 foo1 100 150 :Current local users 100, max 150
-loggedservermsg_0:1 ..< :foo.bar.baz 266 foo1 1010 1050 :Current global users 1010, max 1050
-loggedservermsg_0:1 ..< :foo.bar.baz 250 foo1 :Highest connection count: 151 (150 clients) (1080 connections received)
+loggedservermsg 0 1 ..< :foo.bar.baz 002 foo1 :Your host is foo.bar.baz
+loggedservermsg 0 1 ..< :foo.bar.baz 003 foo1 :This server was created Jan 1 2020
+loggedservermsg 0 1 ..< :foo.bar.baz 004 foo1 foo.bar.baz ircserver-1.0 abc def ghi
+loggedservermsg 0 1 ..< :foo.bar.baz 005 foo1 ABC=DEF GHI=JKL :are supported by this server
+log 1 ..$ isupport:ABC set to: [DEF]
+log 1 ..$ isupport:GHI set to: [JKL]
+loggedservermsg 0 1 ..< :foo.bar.baz 005 foo1 MNO=PQR STU=VWX Y=Z :are supported by this server
+log 1 ..$ isupport:MNO set to: [PQR]
+log 1 ..$ isupport:STU set to: [VWX]
+log 1 ..$ isupport:Y set to: [Z]
+loggedservermsg 0 1 ..< :foo.bar.baz 251 foo1 :There are 10 users and 1000 invisible on 5 servers
+loggedservermsg 0 1 ..< :foo.bar.baz 252 foo1 7 :IRC Operators online
+loggedservermsg 0 1 ..< :foo.bar.baz 253 foo1 4 :unknown connection(s)
+loggedservermsg 0 1 ..< :foo.bar.baz 254 foo1 800 :channels formed
+loggedservermsg 0 1 ..< :foo.bar.baz 255 foo1 :I have 100 clients and 1 serveres
+loggedservermsg 0 1 ..< :foo.bar.baz 265 foo1 100 150 :Current local users 100, max 150
+loggedservermsg 0 1 ..< :foo.bar.baz 266 foo1 1010 1050 :Current global users 1010, max 1050
+loggedservermsg 0 1 ..< :foo.bar.baz 250 foo1 :Highest connection count: 151 (150 clients) (1080 connections received)
 
 # collect MOTD into a single output (rather than line-by-line)
 
 # 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
 
 # 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
 
 # handle bot query NOTICE
-loggedservermsg_0:1 ..< :SaslServ!SaslServ@services.bar.baz NOTICE foo1 :Last login from ~foobarbaz@foo.bar.baz on Jan 1 22:00:00 2021 +0000.
-log_3 ..< (SaslServ) Last login from ~foobarbaz@foo.bar.baz on Jan 1 22:00:00 2021 +0000.
+loggedservermsg 0 1 ..< :SaslServ!SaslServ@services.bar.baz NOTICE foo1 :Last login from ~foobarbaz@foo.bar.baz on Jan 1 22:00:00 2021 +0000.
+log 3 ..< (SaslServ) Last login from ~foobarbaz@foo.bar.baz on Jan 1 22:00:00 2021 +0000.
 | conn4
 
 # check difference in available commands when switching to client window
 > /join #test
 | conn4
 
 # 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
 > /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
 | conn5
 > /window 1
 > /help
 | conn5
 > /window 1
 > /help
-log_1 ..# commands available in this window:
-log_1 ..#   /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]
-log_1 ..#   /disconnect [QUIT_MSG]
-log_1 ..#   /help
-log_1 ..#   /join CHANNEL
-log_1 ..#   /list
-log_1 ..#   /nick NEW_NICK
-log_1 ..#   /privmsg TARGET MSG
-log_1 ..#   /prompt_enter
-log_1 ..#   /quit
-log_1 ..#   /raw VERB [PARAMS_STR]
-log_1 ..#   /reconnect
-log_1 ..#   /window TOWARDS
-log_1 ..#   /window.disconnect [QUIT_MSG]
-log_1 ..#   /window.history.scroll DIRECTION
-log_1 ..#   /window.join CHANNEL
-log_1 ..#   /window.nick NEW_NICK
-log_1 ..#   /window.paste
-log_1 ..#   /window.privmsg TARGET MSG
-log_1 ..#   /window.prompt.backspace
-log_1 ..#   /window.prompt.move_cursor DIRECTION
-log_1 ..#   /window.prompt.scroll DIRECTION
-log_1 ..#   /window.raw VERB [PARAMS_STR]
-log_1 ..#   /window.reconnect
+log 1 ..# commands available in this window:
+log 1 ..#   /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]
+log 1 ..#   /disconnect [QUIT_MSG]
+log 1 ..#   /help
+log 1 ..#   /join CHANNEL
+log 1 ..#   /list
+log 1 ..#   /nick NEW_NICK
+log 1 ..#   /privmsg TARGET MSG
+log 1 ..#   /prompt_enter
+log 1 ..#   /quit
+log 1 ..#   /raw VERB [PARAMS_STR]
+log 1 ..#   /reconnect
+log 1 ..#   /window TOWARDS
+log 1 ..#   /window.disconnect [QUIT_MSG]
+log 1 ..#   /window.history.scroll DIRECTION
+log 1 ..#   /window.join CHANNEL
+log 1 ..#   /window.nick NEW_NICK
+log 1 ..#   /window.paste
+log 1 ..#   /window.privmsg TARGET MSG
+log 1 ..#   /window.prompt.backspace
+log 1 ..#   /window.prompt.move_cursor DIRECTION
+log 1 ..#   /window.prompt.scroll DIRECTION
+log 1 ..#   /window.raw VERB [PARAMS_STR]
+log 1 ..#   /window.reconnect
 
 # test recoverable 432
 > /nick @foo
 
 # 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
 
 # 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
 
 # deliver PRIVMSG to channel window, update sender's user+host from metadata
-loggedservermsg_0:1 ..< :bar!~bar@bar.bar PRIVMSG #test :hi there
-log_1 ..$ users:1:user set to: [~bar]
-log_1 ..$ users:1:host set to: [bar.bar]
-log_4 ..< [bar] hi there
+loggedservermsg 0 1 ..< :bar!~bar@bar.bar PRIVMSG #test :hi there
+log 1 ..$ users:1:user set to: [~bar]
+log 1 ..$ users:1:host set to: [bar.bar]
+log 4 ..< [bar] hi there
 
 # check _changing_ TOPIC message is communicated to channel window, as long as either content or who change
 
 # 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
 
 # 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
 
 # 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
 
 # handle query window with known user
-loggedservermsg_0:1 ..< :baz!~baz@baz.baz PRIVMSG foo1 :hi there
-log_6 ..< [baz] hi there
+loggedservermsg 0 1 ..< :baz!~baz@baz.baz PRIVMSG foo1 :hi there
+log 6 ..< [baz] hi there
 > /privmsg baz hello, how is it going
 > /privmsg baz hello, how is it going
-log_1 ..> PRIVMSG baz :hello, how is it going
-log_6 ..> [foo1] hello, how is it going
-loggedservermsg_0:1 ..< :baz!~baz@baz.baz PRIVMSG foo1 :fine!
-log_6 ..< [baz] fine!
+log 1 ..> PRIVMSG baz :hello, how is it going
+log 6 ..> [foo1] hello, how is it going
+loggedservermsg 0 1 ..< :baz!~baz@baz.baz PRIVMSG foo1 :fine!
+log 6 ..< [baz] fine!
 
 # handle failure to query absent user
 > /privmsg barbar hello!
 
 # handle failure to query absent user
 > /privmsg barbar hello!
-log_1 ..> PRIVMSG barbar :hello!
-log_7 ..> [foo1] hello!
-loggedservermsg_0:1 ..< :*.?.net 401 foo1 barbar :No such nick/channel
-log_7 .!$ barbar not online
+log 1 ..> PRIVMSG barbar :hello!
+log 7 ..> [foo1] hello!
+loggedservermsg 0 1 ..< :*.?.net 401 foo1 barbar :No such nick/channel
+log 7 .!$ barbar not online
 
 # handle non-self renaming
 
 # 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
 
 # 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
 
 # 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
 
 # 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
 
 # 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
 
 # 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
 
 # handle /disconnect, clear all
 > /disconnect
-log_1 ..> QUIT :ircplom says bye
-loggedservermsg_0:1 ..< :foo1!~foobarbaz@baz.bar.foo QUIT :Client Quit
-log_1 ..$ users:me:exit_msg set to: [QClient Quit]
-log_3,6,7 ..$ foo1!~foobarbaz@baz.bar.foo quits: Client Quit
-log_1 ..$ channels:#testtest:exits:me set to: [QClient Quit]
-log_1 ..$ channels:#testtest:user_ids set to:
-log_5 ..$ foo1!~foobarbaz@baz.bar.foo quits: Client Quit
-log_1 ..$ channels:#testtest:exits:me cleared
-loggedservermsg_0:1 ..< ERROR :Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye]
-log_1 ..$ connection_state set to: [Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye]]
+log 1 ..> QUIT :ircplom says bye
+loggedservermsg 0 1 ..< :foo1!~foobarbaz@baz.bar.foo QUIT :Client Quit
+log 1 ..$ users:me:exit_msg set to: [QClient Quit]
+log 3,6,7 ..$ foo1!~foobarbaz@baz.bar.foo quits: Client Quit
+log 1 ..$ channels:#testtest:exits:me set to: [QClient Quit]
+log 1 ..$ channels:#testtest:user_ids set to:
+log 5 ..$ foo1!~foobarbaz@baz.bar.foo quits: Client Quit
+log 1 ..$ channels:#testtest:exits:me cleared
+loggedservermsg 0 1 ..< ERROR :Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye]
+log 1 ..$ connection_state set to: [Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye]]
 repeat isupport-clear-in isupport-clear-out
 repeat isupport-clear-in isupport-clear-out
-log_1 ..$ caps cleared
-log_1 ..$ channels cleared
-log_1 ..$ connection_state set to: []
-log_2,3,4,5,6,7 ..$ DISCONNECTED
-log_1 ..$ motd set to:
-log_1 ..$ sasl_account set to: []
-log_1 ..$ sasl_auth_state set to: []
-log_1 ..$ users cleared
+log 1 ..$ caps cleared
+log 1 ..$ channels cleared
+log 1 ..$ connection_state set to: []
+log 2,3,4,5,6,7 ..$ DISCONNECTED
+log 1 ..$ motd set to:
+log 1 ..$ sasl_account set to: []
+log 1 ..$ sasl_auth_state set to: []
+log 1 ..$ users cleared
 
 # fail to send in disconnect, check alert window is command prompt window
 > /window 6
 > /privmsg barbar test
 
 # 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
 > /window 1
 > /privmsg barbar test
-log_1 .!$ cannot send, connection seems closed
+log 1 .!$ cannot send, connection seems closed
 > /privmsg #test test
 > /privmsg #test test
-log_1 .!$ not sending, since not in channel
+log 1 .!$ not sending, since not in channel
 | conn6
 
 # test setting up second client, but 432 irrecoverably
 > /connect baz.bar.foo ?foo foo:foo
 | conn6
 
 # test setting up second client, but 432 irrecoverably
 > /connect baz.bar.foo ?foo foo:foo
-repeat standard-clears-in standard-clears-out log_8
-, ..$ DISCONNECTED
-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 ..$ port set to: [6697]
-repeat conn0 conn1 log_8
-, ..$ CONNECTED
-log_8 ..> CAP LS :302
-log_8 ..> USER foo 0 * :foo
-log_8 ..> NICK :?foo
-loggedservermsg_1:8 ..< :*.?.net 432 * ?foo :Erroneous nickname
-repeat isupport-clear-in isupport-clear-out log_8
-log_8 ..$ connection_state set to: []
-, ..$ DISCONNECTED
-log_8 .!$ nickname refused for bad format, giving up
+repeat standard-clears-in standard-clears-out 8
+log , ..$ DISCONNECTED
+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 ..$ port set to: [6697]
+repeat conn0 conn1 8
+log , ..$ CONNECTED
+log 8 ..> CAP LS :302
+log 8 ..> USER foo 0 * :foo
+log 8 ..> NICK :?foo
+loggedservermsg 1 8 ..< :*.?.net 432 * ?foo :Erroneous nickname
+repeat isupport-clear-in isupport-clear-out 8
+log 8 ..$ connection_state set to: []
+log , ..$ DISCONNECTED
+log 8 .!$ nickname refused for bad format, giving up
 
 # test failing third connection
 > /connect baz.baz.baz baz baz:baz
 
 # test failing third connection
 > /connect baz.baz.baz baz baz:baz
-repeat standard-clears-in standard-clears-out log_9
-, ..$ DISCONNECTED
-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 ..$ port set to: [6697]
-repeat conn0 conn1 log_9
-, ..$ CONNECTED
-log_9 ..> CAP LS :302
-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]
-repeat isupport-clear-in isupport-clear-out log_9
-log_9 ..$ connection_state set to: []
-, ..$ DISCONNECTED
-log_9 .!$ will retry connecting in 1 seconds
+repeat standard-clears-in standard-clears-out 9
+log , ..$ DISCONNECTED
+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 ..$ port set to: [6697]
+repeat conn0 conn1 9
+log , ..$ CONNECTED
+log 9 ..> CAP LS :302
+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]
+repeat isupport-clear-in isupport-clear-out 9
+log 9 ..$ connection_state set to: []
+log , ..$ DISCONNECTED
+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
 
 # check that (save TUI tests assuming start on window 0, and no 4 yet) on reconnect, all the same effects can be expected
 > /reconnect
-log_1 ..$ connection_state set to: [connecting]
-log_1 ..$ connection_state set to: [connected]
-log_2,3,4,5,6,7 ..$ CONNECTED
+log 1 ..$ connection_state set to: [connecting]
+log 1 ..$ connection_state set to: [connected]
+log 2,3,4,5,6,7 ..$ CONNECTED
 repeat conn2 conn3
 repeat conn2 conn3
-log_1 ..> JOIN :#testtest
+log 1 ..> JOIN :#testtest
 repeat conn3 conn4
 repeat conn5 conn6
 
 > /quit
 repeat conn3 conn4
 repeat conn5 conn6
 
 > /quit
-log_0 ..< 
+log 0 ..< 
index 28fd39b689f15e93376eb2a2ab4945665b7b3b85..3f9d0679a3fae554d3c673d45216dbf290a042e9 100644 (file)
@@ -1,35 +1,35 @@
 | empty-init-in
 | lines-to-19-empty-in
 | line-0-empty-in
 | empty-init-in
 | lines-to-19-empty-in
 | line-0-empty-in
-line_0 0.on_black.                                                                                
+line 0 0 on_black                                                                                 
 | line-0-empty-out
 | line-0-empty-out
-repeat line-0-empty-in line-0-empty-out line_1
-repeat line-0-empty-in line-0-empty-out line_2
-repeat line-0-empty-in line-0-empty-out line_3
-repeat line-0-empty-in line-0-empty-out line_4
-repeat line-0-empty-in line-0-empty-out line_5
-repeat line-0-empty-in line-0-empty-out line_6
-repeat line-0-empty-in line-0-empty-out line_7
-repeat line-0-empty-in line-0-empty-out line_8
-repeat line-0-empty-in line-0-empty-out line_9
-repeat line-0-empty-in line-0-empty-out line_10
-repeat line-0-empty-in line-0-empty-out line_11
-repeat line-0-empty-in line-0-empty-out line_12
-repeat line-0-empty-in line-0-empty-out line_13
-repeat line-0-empty-in line-0-empty-out line_14
-repeat line-0-empty-in line-0-empty-out line_15
-repeat line-0-empty-in line-0-empty-out line_16
-repeat line-0-empty-in line-0-empty-out line_17
-repeat line-0-empty-in line-0-empty-out line_18
-repeat line-0-empty-in line-0-empty-out line_19
+repeat line-0-empty-in line-0-empty-out 1
+repeat line-0-empty-in line-0-empty-out 2
+repeat line-0-empty-in line-0-empty-out 3
+repeat line-0-empty-in line-0-empty-out 4
+repeat line-0-empty-in line-0-empty-out 5
+repeat line-0-empty-in line-0-empty-out 6
+repeat line-0-empty-in line-0-empty-out 7
+repeat line-0-empty-in line-0-empty-out 8
+repeat line-0-empty-in line-0-empty-out 9
+repeat line-0-empty-in line-0-empty-out 10
+repeat line-0-empty-in line-0-empty-out 11
+repeat line-0-empty-in line-0-empty-out 12
+repeat line-0-empty-in line-0-empty-out 13
+repeat line-0-empty-in line-0-empty-out 14
+repeat line-0-empty-in line-0-empty-out 15
+repeat line-0-empty-in line-0-empty-out 16
+repeat line-0-empty-in line-0-empty-out 17
+repeat line-0-empty-in line-0-empty-out 18
+repeat line-0-empty-in line-0-empty-out 19
 | lines-to-19-empty-out
 | lines-to-19-empty-out
-repeat line-0-empty-in line-0-empty-out line_20
-repeat line-0-empty-in line-0-empty-out line_21
+repeat line-0-empty-in line-0-empty-out 20
+repeat line-0-empty-in line-0-empty-out 21
 | status-prompt-empty-in
 | status-prompt-empty-in
-line_22 0..:start)=====================================================================([0]
-line_23 0..
-line_23 2.reverse. 
-line_23 3..                                                                             
+line 22 0  :start)=====================================================================([0]
+line 23 0  
+line 23 2 reverse  
+line 23 3                                                                               
 | status-prompt-empty-out
 | empty-init-out
 
 | status-prompt-empty-out
 | empty-init-out
 
@@ -40,53 +40,53 @@ repeat empty-init-in empty-init-out
 # non-empty command input starts log at bottom, with date above it
 | input-foo-in
 > foo
 # non-empty command input starts log at bottom, with date above it
 | input-foo-in
 > foo
-log_0 .!# invalid prompt command: not prefixed by /
+log 0 .!# invalid prompt command: not prefixed by /
 | input-foo-out
 repeat line-0-empty-in line-0-empty-out
 | input-foo-out
 repeat line-0-empty-in line-0-empty-out
-repeat line-0-empty-in line-0-empty-out line_19
+repeat line-0-empty-in line-0-empty-out 19
 | date-at-20-in
 | date-at-20-in
-line_20 0.on_black.20
-line_20 4.on_black.-
-line_20 7.on_black.-
-line_20 10.on_black.                                                                    
+line 20 0 on_black 20
+line 20 4 on_black -
+line 20 7 on_black -
+line 20 10 on_black                                                                     
 | date-at-20-out
 | date-at-20-out
-line_21 0.on_black,bold,bright_red,bright_cyan..!# 
-line_21 13.on_black,bold,bright_red,bright_cyan.invalid prompt command: not prefixed by /                          
+line 21 0 on_black,bold,bright_red,bright_cyan .!# 
+line 21 13 on_black,bold,bright_red,bright_cyan invalid prompt command: not prefixed by /                          
 
 repeat status-prompt-empty-in status-prompt-empty-out
 
 # further inputs grow log upwards
 | input-cmd-foo-in
 > /foo
 
 repeat status-prompt-empty-in status-prompt-empty-out
 
 # further inputs grow log upwards
 | input-cmd-foo-in
 > /foo
-log_0 .!# invalid prompt command: /foo unknown
+log 0 .!# invalid prompt command: /foo unknown
 | input-cmd-foo-out
 repeat input-cmd-foo-in input-cmd-foo-out
 repeat line-0-empty-in line-0-empty-out
 | input-cmd-foo-out
 repeat input-cmd-foo-in input-cmd-foo-out
 repeat line-0-empty-in line-0-empty-out
-repeat line-0-empty-in line-0-empty-out line_17
-repeat date-at-20-in date-at-20-out line_18
+repeat line-0-empty-in line-0-empty-out 17
+repeat date-at-20-in date-at-20-out 18
 | foo-unprefixed-line-19-in
 | foo-unprefixed-line-19-in
-line_19 13.on_black,bold,bright_red,bright_cyan.invalid prompt command: not prefixed by /                          
+line 19 13 on_black,bold,bright_red,bright_cyan invalid prompt command: not prefixed by /                          
 | foo-unprefixed-line-19-out
 | foo-unknown-line-20-in
 | foo-unprefixed-line-19-out
 | foo-unknown-line-20-in
-line_20 13.on_black,bold,bright_red,bright_cyan.invalid prompt command: /foo unknown       
+line 20 13 on_black,bold,bright_red,bright_cyan invalid prompt command: /foo unknown       
 | foo-unknown-line-20-out
 | foo-unknown-line-20-out
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_21
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 21
 
 # check wrapping
 > /foo_0123456789_0123456789_01234567
 
 # check wrapping
 > /foo_0123456789_0123456789_01234567
-log_0 .!# invalid prompt command: /foo_0123456789_0123456789_01234567 unknown
+log 0 .!# invalid prompt command: /foo_0123456789_0123456789_01234567 unknown
 | unwrapped-at-21-in
 | unwrapped-at-21-in
-line_21 13.on_black,bold,bright_red,bright_cyan.invalid prompt command: /foo_0123456789_0123456789_01234567 unknown
+line 21 13 on_black,bold,bright_red,bright_cyan invalid prompt command: /foo_0123456789_0123456789_01234567 unknown
 | unwrapped-at-21-out
 | input-wrapped-in
 > /foo_0123456789_0123456789_012345678
 | unwrapped-at-21-out
 | input-wrapped-in
 > /foo_0123456789_0123456789_012345678
-log_0 .!# invalid prompt command: /foo_0123456789_0123456789_012345678 unknown
+log 0 .!# invalid prompt command: /foo_0123456789_0123456789_012345678 unknown
 | input-wrapped-out
 | wrapped-first-at-20-in
 | input-wrapped-out
 | wrapped-first-at-20-in
-line_20 13.on_black,bold,bright_red,bright_cyan.invalid prompt command: /foo_0123456789_0123456789_012345678       
+line 20 13 on_black,bold,bright_red,bright_cyan invalid prompt command: /foo_0123456789_0123456789_012345678       
 | wrapped-first-at-20-out
 | wrapped-second-at-21-in
 | wrapped-first-at-20-out
 | wrapped-second-at-21-in
-line_21 0.on_black,bold,bright_red,bright_cyan.    unknown                                                                     
+line 21 0 on_black,bold,bright_red,bright_cyan     unknown                                                                     
 | wrapped-second-at-21-out
 
 # check scrolling up on short history
 | wrapped-second-at-21-out
 
 # check scrolling up on short history
@@ -95,18 +95,18 @@ line_21 0.on_black,bold,bright_red,bright_cyan.    unknown
 repeat lines-to-19-empty-in lines-to-19-empty-out
 repeat date-at-20-in date-at-20-out
 | topmost-scroll-out
 repeat lines-to-19-empty-in lines-to-19-empty-out
 repeat date-at-20-in date-at-20-out
 | topmost-scroll-out
-line_21 0.reverse.vvv [6] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+line 21 0 reverse vvv [6] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
 repeat status-prompt-empty-in status-prompt-empty-out
 
 # check scrolling down on short history
 > /window.history.scroll down
 repeat line-0-empty-in line-0-empty-out
 repeat status-prompt-empty-in status-prompt-empty-out
 
 # check scrolling down on short history
 > /window.history.scroll down
 repeat line-0-empty-in line-0-empty-out
-repeat line-0-empty-in line-0-empty-out line_14
-repeat date-at-20-in date-at-20-out line_15
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_16
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_17
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_18
-repeat unwrapped-at-21-in unwrapped-at-21-out line_19
+repeat line-0-empty-in line-0-empty-out 14
+repeat date-at-20-in date-at-20-out 15
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 16
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 17
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 18
+repeat unwrapped-at-21-in unwrapped-at-21-out 19
 repeat wrapped-first-at-20-in wrapped-first-at-20-out
 repeat wrapped-second-at-21-in wrapped-second-at-21-out
 repeat status-prompt-empty-in status-prompt-empty-out
 repeat wrapped-first-at-20-in wrapped-first-at-20-out
 repeat wrapped-second-at-21-in wrapped-second-at-21-out
 repeat status-prompt-empty-in status-prompt-empty-out
@@ -119,25 +119,25 @@ repeat input-foo-in input-foo-out
 repeat input-cmd-foo-in input-cmd-foo-out
 repeat input-foo-in input-foo-out
 repeat topmost-scroll-in topmost-scroll-out
 repeat input-cmd-foo-in input-cmd-foo-out
 repeat input-foo-in input-foo-out
 repeat topmost-scroll-in topmost-scroll-out
-line_21 0.reverse.vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+line 21 0 reverse vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
 repeat status-prompt-empty-in status-prompt-empty-out
 
 # check scroll-down on longer history
 > /window.history.scroll down
 repeat line-0-empty-in line-0-empty-out
 repeat status-prompt-empty-in status-prompt-empty-out
 
 # check scroll-down on longer history
 > /window.history.scroll down
 repeat line-0-empty-in line-0-empty-out
-repeat line-0-empty-in line-0-empty-out line_9
-repeat date-at-20-in date-at-20-out line_10
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_11
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_12
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_13
-repeat unwrapped-at-21-in unwrapped-at-21-out line_14
-repeat wrapped-first-at-20-in wrapped-first-at-20-out line_15
-repeat wrapped-second-at-21-in wrapped-second-at-21-out line_16
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_17
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_18
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_19
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_20
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_21
+repeat line-0-empty-in line-0-empty-out 9
+repeat date-at-20-in date-at-20-out 10
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 11
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 12
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 13
+repeat unwrapped-at-21-in unwrapped-at-21-out 14
+repeat wrapped-first-at-20-in wrapped-first-at-20-out 15
+repeat wrapped-second-at-21-in wrapped-second-at-21-out 16
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 17
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 18
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 19
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 20
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 21
 repeat status-prompt-empty-in status-prompt-empty-out
 
 # check history growing upwards if scrolled down
 repeat status-prompt-empty-in status-prompt-empty-out
 
 # check history growing upwards if scrolled down
@@ -160,28 +160,28 @@ repeat input-cmd-foo-in input-cmd-foo-out
 repeat input-foo-in input-foo-out
 repeat input-cmd-foo-in input-cmd-foo-out
 | bottom-longer-history-in
 repeat input-foo-in input-foo-out
 repeat input-cmd-foo-in input-cmd-foo-out
 | bottom-longer-history-in
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_0
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_1
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_2
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_3
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_4
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_5
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_6
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_7
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_8
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_9
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_10
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_11
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_12
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_13
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_14
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_15
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_16
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_17
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_18
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_19
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_20
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_21
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 0
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 1
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 2
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 3
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 4
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 5
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 6
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 7
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 8
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 9
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 10
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 11
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 12
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 13
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 14
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 15
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 16
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 17
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 18
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 19
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 20
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 21
 repeat status-prompt-empty-in status-prompt-empty-out
 | bottom-longer-history-out
 
 repeat status-prompt-empty-in status-prompt-empty-out
 | bottom-longer-history-out
 
@@ -189,28 +189,28 @@ repeat status-prompt-empty-in status-prompt-empty-out
 > /window.history.scroll up
 | scrolled-up-longer-history-in
 repeat line-0-empty-in line-0-empty-out
 > /window.history.scroll up
 | scrolled-up-longer-history-in
 repeat line-0-empty-in line-0-empty-out
-repeat line-0-empty-in line-0-empty-out line_1
-repeat date-at-20-in date-at-20-out line_2
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_3
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_4
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_5
-repeat unwrapped-at-21-in unwrapped-at-21-out line_6
-repeat wrapped-first-at-20-in wrapped-first-at-20-out line_7
-repeat wrapped-second-at-21-in wrapped-second-at-21-out line_8
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_9
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_10
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_11
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_12
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_13
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_14
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_15
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_16
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_17
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_18
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_19
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_20
+repeat line-0-empty-in line-0-empty-out 1
+repeat date-at-20-in date-at-20-out 2
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 3
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 4
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 5
+repeat unwrapped-at-21-in unwrapped-at-21-out 6
+repeat wrapped-first-at-20-in wrapped-first-at-20-out 7
+repeat wrapped-second-at-21-in wrapped-second-at-21-out 8
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 9
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 10
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 11
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 12
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 13
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 14
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 15
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 16
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 17
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 18
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 19
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 20
 | scrolled-up-longer-history-out
 | scrolled-up-longer-history-out
-line_21 0.reverse.vvv [12] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+line 21 0 reverse vvv [12] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
 repeat status-prompt-empty-in status-prompt-empty-out
 > /window.history.scroll down
 repeat bottom-longer-history-in bottom-longer-history-out
 repeat status-prompt-empty-in status-prompt-empty-out
 > /window.history.scroll down
 repeat bottom-longer-history-in bottom-longer-history-out
@@ -219,82 +219,82 @@ repeat bottom-longer-history-in bottom-longer-history-out
 > /window.history.scroll up
 repeat input-wrapped-in input-wrapped-out
 repeat scrolled-up-longer-history-in scrolled-up-longer-history-out
 > /window.history.scroll up
 repeat input-wrapped-in input-wrapped-out
 repeat scrolled-up-longer-history-in scrolled-up-longer-history-out
-line_21 0.reverse.vvv [13] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+line 21 0 reverse vvv [13] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
 > /window.history.scroll down
 > /window.history.scroll down
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_0
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_1
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_2
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_3
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_4
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_5
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_6
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_7
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_8
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_9
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_10
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_11
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_12
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_13
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_14
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_15
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_16
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_17
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_18
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_19
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_20
-line_21 0.reverse.vvv [2] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 0
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 1
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 2
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 3
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 4
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 5
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 6
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 7
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 8
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 9
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 10
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 11
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 12
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 13
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 14
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 15
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 16
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 17
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 18
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 19
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 20
+line 21 0 reverse vvv [2] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
 repeat status-prompt-empty-in status-prompt-empty-out
 
 # check scroll-up over wrapped increases visible below-lines count only by fused history lines
 > /window.history.scroll down
 repeat status-prompt-empty-in status-prompt-empty-out
 
 # check scroll-up over wrapped increases visible below-lines count only by fused history lines
 > /window.history.scroll down
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_0
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_1
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_2
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_3
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_4
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_5
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_6
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_7
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_8
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_9
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_10
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_11
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_12
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_13
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_14
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_15
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_16
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_17
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_18
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_19
-repeat wrapped-first-at-20-in wrapped-first-at-20-out line_20
-repeat wrapped-second-at-21-in wrapped-second-at-21-out line_21
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 0
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 1
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 2
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 3
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 4
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 5
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 6
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 7
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 8
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 9
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 10
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 11
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 12
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 13
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 14
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 15
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 16
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 17
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 18
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 19
+repeat wrapped-first-at-20-in wrapped-first-at-20-out 20
+repeat wrapped-second-at-21-in wrapped-second-at-21-out 21
 repeat status-prompt-empty-in status-prompt-empty-out
 > /window.history.scroll up
 repeat status-prompt-empty-in status-prompt-empty-out
 > /window.history.scroll up
-line_21 0.reverse.vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+line 21 0 reverse vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
 repeat status-prompt-empty-in status-prompt-empty-out
 
 # check scrolls-up over longer history until top
 > /window.history.scroll up
 repeat line-0-empty-in line-0-empty-out
 repeat status-prompt-empty-in status-prompt-empty-out
 
 # check scrolls-up over longer history until top
 > /window.history.scroll up
 repeat line-0-empty-in line-0-empty-out
-repeat line-0-empty-in line-0-empty-out line_5
-repeat line-0-empty-in line-0-empty-out line_10
-repeat date-at-20-in date-at-20-out line_11
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_12
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_13
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_14
-repeat unwrapped-at-21-in unwrapped-at-21-out line_15
-repeat wrapped-first-at-20-in wrapped-first-at-20-out line_16
-repeat wrapped-second-at-21-in wrapped-second-at-21-out line_17
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_18
-repeat foo-unknown-line-20-in foo-unknown-line-20-out line_19
-repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out line_20
-line_21 0.reverse.vvv [22] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+repeat line-0-empty-in line-0-empty-out 5
+repeat line-0-empty-in line-0-empty-out 10
+repeat date-at-20-in date-at-20-out 11
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 12
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 13
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 14
+repeat unwrapped-at-21-in unwrapped-at-21-out 15
+repeat wrapped-first-at-20-in wrapped-first-at-20-out 16
+repeat wrapped-second-at-21-in wrapped-second-at-21-out 17
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 18
+repeat foo-unknown-line-20-in foo-unknown-line-20-out 19
+repeat foo-unprefixed-line-19-in foo-unprefixed-line-19-out 20
+line 21 0 reverse vvv [22] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
 repeat status-prompt-empty-in status-prompt-empty-out
 > /window.history.scroll up
 repeat topmost-scroll-in topmost-scroll-out
 repeat status-prompt-empty-in status-prompt-empty-out
 > /window.history.scroll up
 repeat topmost-scroll-in topmost-scroll-out
-line_21 0.reverse.vvv [30] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+line 21 0 reverse vvv [30] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
 repeat status-prompt-empty-in status-prompt-empty-out
 
 > /quit
 repeat status-prompt-empty-in status-prompt-empty-out
 
 > /quit
-log_0 ..< 
+log 0 ..< 
index 28e1450e82635961203b9e28a1bfb52eacce59ac..cd6a05d8aa99b9a4c76cbc7d2483b6b279d1434a 100644 (file)
@@ -5,35 +5,35 @@
 
 # expected complaints on wrong command inputs
 > foo
 
 # expected complaints on wrong command inputs
 > foo
-log_0 .!# invalid prompt command: not prefixed by /
+log 0 .!# invalid prompt command: not prefixed by /
 > /foo
 > /foo
-log_0 .!# invalid prompt command: /foo unknown
+log 0 .!# invalid prompt command: /foo unknown
 > /help foo
 > /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
 > /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
 
 # 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
 > /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
 
 # 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
 > /window.history.scroll foo
 > /window.prompt.backspace
 > /window.prompt.move_cursor foo
@@ -41,4 +41,4 @@ log_0 .!# invalid prompt command: /prompt_enter would loop into ourselves
 > /window.paste
 
 > /quit
 > /window.paste
 
 > /quit
-log_0 ..< 
+log 0 ..<