home · contact · privacy
Reorganize test script expansions. master
authorChristian Heller <c.heller@plomlompom.de>
Mon, 20 Oct 2025 17:54:59 +0000 (19:54 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Mon, 20 Oct 2025 17:54:59 +0000 (19:54 +0200)
src/ircplom/testing.py
src/tests/_timeout_retries.test
src/tests/test.test

index 21251dabe95eabdbb15794a3502da4ea37e32f8b..f161c71e91a4577f56fcbb8786e018a1c07cf0ba 100644 (file)
@@ -31,16 +31,14 @@ _SEP_2 = ':'
 _SCREENLINE_IGNORE_CHAR = '§'
 _SCREENLINE_PADDING_SUFFIX = 2 * _SCREENLINE_IGNORE_CHAR
 
 _SCREENLINE_IGNORE_CHAR = '§'
 _SCREENLINE_PADDING_SUFFIX = 2 * _SCREENLINE_IGNORE_CHAR
 
-_N_ARGS_FOR_CMD = {
-    _MARK_ANCHOR: 1,
-    _MARK_COMMENT: 2,
-    _MARK_LOG: 2,
-    _MARK_LOGSRVRMSG: 3,
-    _MARK_PROMPT: 1,
-    _MARK_REPEAT: 2,
-    _MARK_SCREENLINE: 3,
-    _MARK_SERVERMSG: 2,
-    _MARK_WAIT: 1
+_SIGNATURE_FOR_CMD = {
+    _MARK_LOG: (2, 0),
+    _MARK_LOGSRVRMSG: (3, 0),
+    _MARK_PROMPT: (1, None),
+    _MARK_REPEAT: (2, 1),
+    _MARK_SCREENLINE: (3, 0),
+    _MARK_SERVERMSG: (2, 0),
+    _MARK_WAIT: (1, 0),
 }
 
 
 }
 
 
@@ -186,22 +184,18 @@ class _Playbook:
             self._lines_t = [(str(idx + 1), line.rstrip('\n'))
                              for idx, line in enumerate(f.readlines())]
 
             self._lines_t = [(str(idx + 1), line.rstrip('\n'))
                              for idx, line in enumerate(f.readlines())]
 
-        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]:
-                    continue
+        def expand_parsed(marker: str, parse_into: Callable, **kwargs) -> None:
+            new_lines_t: list[tuple[str, str]] = []
+            for line_t in reversed(self._lines_t):
                 cmd_name, remains = line_t[1].split(_SEP_0, maxsplit=1)
                 cmd_name, remains = line_t[1].split(_SEP_0, maxsplit=1)
-                if not cmd_name == marker:
-                    continue
-                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)
+                inserts = [line_t]
+                if cmd_name == marker:
+                    inserts = parse_into(
+                            line_t[0],
+                            self._args_for_cmd(cmd_name, remains),
+                            **kwargs)
+                new_lines_t[0:0] = inserts
+            self._lines_t = new_lines_t
 
         def split_server_put_and_log(index_str: str,
                                      args: tuple[str, ...],
 
         def split_server_put_and_log(index_str: str,
                                      args: tuple[str, ...],
@@ -222,39 +216,41 @@ class _Playbook:
                    **__
                    ) -> list[tuple[str, str]]:
             inserts: list[tuple[str, str]] = []
                    **__
                    ) -> list[tuple[str, str]]:
             inserts: list[tuple[str, str]] = []
-            for inserted_t in self._lines_t[
-                    int(anchors[args[0]+'-in'] + 1):
-                    int(anchors[args[0]+'-out'])]:
+            for inserted_t in self._lines_t[int(anchors[args[0]+'-in']):
+                                            int(anchors[args[0]+'-out'])]:
                 insert = inserted_t[1]
                 insert = inserted_t[1]
-                if len(args) == 2 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))
-                    if args[1][0] in '+-':
-                        args_[0] = _SEP_1.join(
-                                str(int(n) + int(args[1]))
-                                for n in args_[0].split(_SEP_1) if n
-                                ) or ','
-                    else:
-                        args_[0] = args[1]
+                cmd_name, remains = insert.split(_SEP_0, maxsplit=1)
+                if cmd_name == _MARK_ANCHOR:  # anchors should be unique,
+                    continue                  # so avoid their repittion
+                args_idx = _SIGNATURE_FOR_CMD[cmd_name][1]
+                args_ = list(self._args_for_cmd(cmd_name, remains))
+                if len(args) == 2\
+                        and args_idx is not None\
+                        and len(args_) > args_idx:
+                    args_[args_idx] = _SEP_1.join(
+                            str(int(n) + int(args[1]))
+                            for n in args_[args_idx].split(_SEP_1) if n
+                            ) or ','
                     insert = _SEP_0.join([cmd_name] + args_)
                 inserts += [(index_str + ':r:' + inserted_t[0], insert)]
             return inserts
 
                     insert = _SEP_0.join([cmd_name] + args_)
                 inserts += [(index_str + ':r:' + inserted_t[0], insert)]
             return inserts
 
-        while expand_parsed(_MARK_LOGSRVRMSG, split_server_put_and_log):
-            pass
+        self._lines_t = [line_t for line_t in self._lines_t
+                         if line_t[1]
+                         and not line_t[1].startswith(_MARK_COMMENT)]
+        expand_parsed(_MARK_LOGSRVRMSG, split_server_put_and_log)
         while True:
             anchors: dict[str, int] = {}
             for idx, line_t in enumerate(self._lines_t):
                 if line_t[1].startswith(_MARK_ANCHOR):
                     anchors[line_t[1].split(_SEP_0, maxsplit=1)[1]] = idx
         while True:
             anchors: dict[str, int] = {}
             for idx, line_t in enumerate(self._lines_t):
                 if line_t[1].startswith(_MARK_ANCHOR):
                     anchors[line_t[1].split(_SEP_0, maxsplit=1)[1]] = idx
-            if not expand_parsed(_MARK_REPEAT, repeat, anchors=anchors):
+            snapshot_before = self._lines_t[:]
+            expand_parsed(_MARK_REPEAT, repeat, anchors=anchors)
+            if self._lines_t == snapshot_before:
                 break
                 break
-        self._lines_t = [
-                line_t for line_t in self._lines_t
-                if line_t[1] and not (line_t[1].startswith(_MARK_ANCHOR)
-                                      or line_t[1].startswith(_MARK_COMMENT))]
+        self._lines_t = [line_t for line_t in self._lines_t
+                         if not line_t[1].startswith(_MARK_ANCHOR)]
+
         if self._verbose:
             title_idx = 'line number(s)'
             title_cmdname = 'command'
         if self._verbose:
             title_idx = 'line number(s)'
             title_cmdname = 'command'
@@ -280,7 +276,7 @@ class _Playbook:
 
     @staticmethod
     def _args_for_cmd(cmd_name: str, remains: str) -> tuple[str, ...]:
 
     @staticmethod
     def _args_for_cmd(cmd_name: str, remains: str) -> tuple[str, ...]:
-        n_args = _N_ARGS_FOR_CMD[cmd_name]
+        n_args = _SIGNATURE_FOR_CMD[cmd_name][0]
         return ((remains,) if n_args == 1
                 else tuple(remains.split(_SEP_0, maxsplit=n_args - 1)))
 
         return ((remains,) if n_args == 1
                 else tuple(remains.split(_SEP_0, maxsplit=n_args - 1)))
 
index 195aedd3e2a208063d3a8b883a1067fcf7bf9938..4af348eb27b7b69b6068b14d3329e8c13c7caf96 100644 (file)
@@ -67,15 +67,15 @@ repeat conn-full
 
 # on second server, check timed auto-retries don't activate after manual intervention
 > /connect baz.bar.foo:10003 foo:bar baz:foobarbazquux
 
 # 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 2
+repeat clientwin-init +1
 log , $.. DISCONNECTED
 log 2 $.. hostname set to: [baz.bar.foo]
 log , $.. DISCONNECTED
 log 2 $.. hostname set to: [baz.bar.foo]
-repeat conn-init-retries 2
+repeat conn-init-retries +1
 > /window 2
 > /reconnect
 > /window 2
 > /reconnect
-repeat conn0 2
+repeat conn0 +1
 log , $.. CONNECTED
 log , $.. CONNECTED
-repeat conn1 2
+repeat conn1 +1
 wait 4
 > /disconnect
 log 2 >.. QUIT :ircplom says bye
 wait 4
 > /disconnect
 log 2 >.. QUIT :ircplom says bye
index c5bacb353e28c3991c1ba998f0b60589265ec65f..d234057fbaf5cc4239dfe047fb104478b59785e2 100644 (file)
@@ -365,7 +365,7 @@ log 8 >.. USER foo 0 * :foo
 log 8 >.. NICK :?foo
 loggedservermsg 1 8 <.. :*.?.net 432 * ?foo :Erroneous nickname
 | disconnect-in
 log 8 >.. NICK :?foo
 loggedservermsg 1 8 <.. :*.?.net 432 * ?foo :Erroneous nickname
 | disconnect-in
-repeat isupport-clear 8
+repeat isupport-clear +7
 log 8 $.. connection_state set to: []
 log , $.. DISCONNECTED
 | disconnect-out
 log 8 $.. connection_state set to: []
 log , $.. DISCONNECTED
 | disconnect-out