pdtest: add support for input format specs in test.conf files master
authorGerhard Sittig <gerhard.sittig@gmx.net>
Sat, 23 Apr 2022 06:32:30 +0000 (08:32 +0200)
committerGerhard Sittig <gerhard.sittig@gmx.net>
Sat, 23 Apr 2022 14:58:46 +0000 (16:58 +0200)
The pdtest(1) utility interprets test.conf files. Extend the syntax of
'input' lines. These used to accept one filename only. Add support for
'format' and 'option' keywords. These translate to runtc(1) -I options.

decoder/pdtest

index 59483253c86eab67bf6f5322c088827bb492e5cd..a2a33fc9b66260f609f32a98db067656c61231e2 100755 (executable)
@@ -146,9 +146,26 @@ def parse_testfile(path, pd, tc, op_type, op_class):
                     raise E_syntax
                 tclist[-1]['stack'] = f
             elif key == 'input':
-                if len(f) != 1:
+                if len(f) < 1:
                     raise E_syntax
-                tclist[-1]['input'] = f[0]
+                input_spec = {
+                    'name': f.pop(0),
+                    'format': None,
+                    'options': [],
+                }
+                while len(f):
+                    if len(f) < 2:
+                        # Always needs <key> <value>
+                        raise E_syntax
+                    a, b = f[:2]
+                    f = f[2:]
+                    if a == 'format':
+                        input_spec['format'] = b
+                    elif a == 'option':
+                        input_spec['options'].append(b)
+                    else:
+                        raise E_syntax
+                tclist[-1]['input'] = input_spec
             elif key == 'output':
                 op_spec = {
                     'pd': f.pop(0),
@@ -325,7 +342,15 @@ def run_tests(tests, fix=False):
                         args.extend(['-o', "%s=%s" % (option, value)])
                     for label, initial_pin in spd['initial_pins']:
                         args.extend(['-N', "%s=%d" % (label, initial_pin)])
-                args.extend(['-i', os.path.join(dumps_dir, tc['input'])])
+                # Setup input spec for this test (optional format spec).
+                in_spec = tc['input']
+                infile = os.path.join(dumps_dir, in_spec['name'])
+                args.extend(['-i', infile])
+                if in_spec['format']:
+                    args.extend(['-I', in_spec['format']])
+                    for opt in in_spec['options']:
+                        args.extend(['-I', opt])
+                # Setup output spec for this test.
                 for op in tc['output']:
                     name = "%s/%s/%s" % (pd, tc['name'], op['type'])
                     opargs = ['-O', "%s:%s" % (op['pd'], op['type'])]