aboutsummaryrefslogtreecommitdiff
path: root/src/suite/suite.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/suite/suite.py')
-rw-r--r--src/suite/suite.py94
1 files changed, 94 insertions, 0 deletions
diff --git a/src/suite/suite.py b/src/suite/suite.py
new file mode 100644
index 0000000..fee4aa9
--- /dev/null
+++ b/src/suite/suite.py
@@ -0,0 +1,94 @@
+# ############################################################################ #
+# #
+# ::: :::::::: #
+# suite.py :+: :+: :+: #
+# +:+ +:+ +:+ #
+# By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ #
+# +#+#+#+#+#+ +#+ #
+# Created: 2020/07/15 18:24:29 by charles #+# #+# #
+# Updated: 2020/09/11 12:27:47 by charles ### ########.fr #
+# #
+# ############################################################################ #
+
+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]
+ cls.available = [s for s in cls.available if s.name in asked_names]
+ for s in cls.available:
+ s.generate()
+
+ @classmethod
+ def available_names(cls) -> [str]:
+ return [s.name for s in cls.available]
+
+ 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 total(self) -> (int, int):
+ passed_total = 0
+ for t in self.tests:
+ if t.result is None:
+ return (-1, -1)
+ if t.result.passed:
+ passed_total += 1
+ return (passed_total, len(self.tests) - passed_total)
+
+ @classmethod
+ def summarize(cls):
+ pass_sum = 0
+ fail_sum = 0
+ print("\nSummary:")
+ for s in cls.available:
+ (pass_total, fail_total) = s.total()
+ if pass_total == -1:
+ continue
+ pass_sum += pass_total
+ fail_sum += fail_total
+ print("{:<15} \033[32m{:3} [PASS]\033[0m \033[31m{:3} [FAIL]\033[0m"
+ .format(s.name, pass_total, fail_total))
+ print("{:<15} \033[32m{:3} [PASS]\033[0m \033[31m{:3} [FAIL]\033[0m"
+ .format("TOTAL", pass_sum, fail_sum))
+
+ @classmethod
+ def save_log(cls):
+ with open(config.LOG_PATH, "w") as log_file:
+ for s in cls.available:
+ for t in s.tests:
+ if t.result is not None and t.result.failed:
+ t.result.colored = False
+ t.result.set_colors()
+ log_file.write(t.result.full_diff() + '\n')