okami.mom/albedo

git clone https://git.nkp.pet/okami.mom/albedo

Aly Raffauffix(test): reject empty test selectionsf6dbf0b

main
1.1 KiB38 linesraw
1"""Load unittest files without letting an empty selection report success."""
2
3import importlib.util
4from pathlib import Path
5import sys
6import unittest
7
8
9def suite_for(path, test_name=None):
10    path = Path(path).resolve()
11    sys.path.insert(0, str(path.parent))
12    spec = importlib.util.spec_from_file_location(path.stem, path)
13    assert spec is not None and spec.loader is not None
14    module = importlib.util.module_from_spec(spec)
15    sys.modules[path.stem] = module
16    spec.loader.exec_module(module)
17    loader = unittest.TestLoader()
18    suite = (
19        loader.loadTestsFromName(test_name, module)
20        if test_name
21        else loader.loadTestsFromModule(module)
22    )
23    if suite.countTestCases() == 0:
24        raise ValueError(f"no tests collected from {path}")
25    return suite
26
27
28def main():
29    try:
30        suite = suite_for(sys.argv[1])
31    except ValueError as error:
32        print(error, file=sys.stderr)
33        return 1
34    return 0 if unittest.TextTestRunner(verbosity=2).run(suite).wasSuccessful() else 1
35
36
37if __name__ == "__main__":
38    sys.exit(main())