diff options
Diffstat (limited to 'suite.py')
| -rw-r--r-- | suite.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/suite.py b/suite.py new file mode 100644 index 0000000..3da5f67 --- /dev/null +++ b/suite.py @@ -0,0 +1,57 @@ +import config +from test import Test + +class Suite: + available = [] + + @classmethod + def run_all(cls): + for s in cls.available: + s.run() + + @classmethod + def setup(cls, asked_names: [str]): + if len(asked_names) == 0: + asked_names = [s.name for s in cls.available] + for s in cls.available: + if s.name in asked_names: + s.generate() + cls.available = [s for s in cls.available if s.name in asked_names] + + def __init__(self, name: str): + self.name = name + self.generator_func = None + self.tests = [] + + def add(self, test): + self.tests.append(test) + + def add_generator(self, generator): + self.generator_func = generator + + def run(self): + if config.VERBOSE_LEVEL == 0: + print(self.name + ": ", end="") + else: + print("{} {:#<41}".format("#" * 39, self.name + " ")) + for t in self.tests: + t.run() + if config.VERBOSE_LEVEL == 0: + print() + + def generate(self): + self.generator_func() + + +def suite(origin): + """ decorator for a suite function (fmt: suite_[name]) """ + + name = origin.__name__[len("suite_"):] + s = Suite(name) + def test_generator(): + def test(cmd: str, setup: str = "", files: [str] = [], exports: {str, str} = {}): + s.add(Test(cmd, setup, files, exports)) + origin(test) + s.add_generator(test_generator) + Suite.available.append(s) + return test_generator |
