aboutsummaryrefslogtreecommitdiff
path: root/suite.py
diff options
context:
space:
mode:
Diffstat (limited to 'suite.py')
-rw-r--r--suite.py57
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