Test now fails if not testcases are run.
diff --git a/test/test.py b/test/test.py
index 9df75ff..896b9f5 100644
--- a/test/test.py
+++ b/test/test.py
@@ -1,4 +1,4 @@
-import os, json, sys, io, traceback
+import os, json, sys, io, traceback, argparse
import pytoml as toml
def _testbench_literal(type, text, value):
@@ -12,51 +12,63 @@
return {'type': _type_table.get(type, type), 'value': text}
def _main():
+ ap = argparse.ArgumentParser()
+ ap.add_argument('-d', '--dir', action='append')
+ ap.add_argument('testcase', nargs='*')
+ args = ap.parse_args()
+
+ if not args.dir:
+ args.dir = [os.path.join(os.path.split(__file__)[0], 'toml-test/tests')]
+
succeeded = []
failed = []
- for top, dirnames, fnames in os.walk('./toml-test/tests'):
- for fname in fnames:
- if not fname.endswith('.toml'):
- continue
-
- if sys.argv[1:] and not any(arg in fname for arg in sys.argv[1:]):
- continue
-
- parse_error = None
- try:
- with open(os.path.join(top, fname), 'rb') as fin:
- parsed = toml.load(fin)
- except toml.TomlError:
- parsed = None
- parse_error = sys.exc_info()
- else:
- dumped = toml.dumps(parsed)
- parsed2 = toml.loads(dumped)
- if parsed != parsed2:
- failed.append((fname, None))
+ for path in args.dir:
+ if not os.path.isdir(path):
+ print('error: not a dir: {}'.format(path))
+ return 2
+ for top, dirnames, fnames in os.walk(path):
+ for fname in fnames:
+ if not fname.endswith('.toml'):
continue
- with open(os.path.join(top, fname), 'rb') as fin:
- parsed = toml.load(fin, translate=_testbench_literal)
+ if args.testcase and not any(arg in fname for arg in args.testcase):
+ continue
- try:
- with io.open(os.path.join(top, fname[:-5] + '.json'), 'rt', encoding='utf-8') as fin:
- bench = json.load(fin)
- except IOError:
- bench = None
+ parse_error = None
+ try:
+ with open(os.path.join(top, fname), 'rb') as fin:
+ parsed = toml.load(fin)
+ except toml.TomlError:
+ parsed = None
+ parse_error = sys.exc_info()
+ else:
+ dumped = toml.dumps(parsed)
+ parsed2 = toml.loads(dumped)
+ if parsed != parsed2:
+ failed.append((fname, None))
+ continue
- if parsed != bench:
- failed.append((fname, parsed, bench, parse_error))
- else:
- succeeded.append(fname)
+ with open(os.path.join(top, fname), 'rb') as fin:
+ parsed = toml.load(fin, translate=_testbench_literal)
+
+ try:
+ with io.open(os.path.join(top, fname[:-5] + '.json'), 'rt', encoding='utf-8') as fin:
+ bench = json.load(fin)
+ except IOError:
+ bench = None
+
+ if parsed != bench:
+ failed.append((fname, parsed, bench, parse_error))
+ else:
+ succeeded.append(fname)
for f, parsed, bench, e in failed:
print('failed: {}\n{}\n{}'.format(f, json.dumps(parsed, indent=4), json.dumps(bench, indent=4)))
if e:
traceback.print_exception(*e)
print('succeeded: {}'.format(len(succeeded)))
- return 1 if failed else 0
+ return 1 if failed or not succeeded else 0
if __name__ == '__main__':
sys.exit(_main())