| 183 | |
| 184 | |
| 185 | class TestSuite: |
| 186 | def __init__(self, name: str): |
| 187 | self.name = name |
| 188 | self.tests: list[TestCase] = [] |
| 189 | |
| 190 | def add_result(self, test: TestCase): |
| 191 | self.tests.append(test) |
| 192 | |
| 193 | @property |
| 194 | def passed(self) -> int: |
| 195 | return sum(1 for t in self.tests if t.result == TestResult.PASSED) |
| 196 | |
| 197 | @property |
| 198 | def failed(self) -> int: |
| 199 | return sum(1 for t in self.tests if t.result == TestResult.FAILED) |
| 200 | |
| 201 | @property |
| 202 | def skipped(self) -> int: |
| 203 | return sum(1 for t in self.tests if t.result == TestResult.SKIPPED) |
| 204 | |
| 205 | def print_summary(self): |
| 206 | print(bold(f"\n{'=' * 60}")) |
| 207 | print(bold(f"Test Suite: {self.name}")) |
| 208 | print(bold(f"{'=' * 60}")) |
| 209 | |
| 210 | total = len(self.tests) |
| 211 | passed_str = ( |
| 212 | success(f"Passed: {self.passed}") |
| 213 | if self.passed > 0 |
| 214 | else dim(f"Passed: {self.passed}") |
| 215 | ) |
| 216 | failed_str = ( |
| 217 | error(f"Failed: {self.failed}") |
| 218 | if self.failed > 0 |
| 219 | else dim(f"Failed: {self.failed}") |
| 220 | ) |
| 221 | skipped_str = ( |
| 222 | warning(f"Skipped: {self.skipped}") |
| 223 | if self.skipped > 0 |
| 224 | else dim(f"Skipped: {self.skipped}") |
| 225 | ) |
| 226 | |
| 227 | print(f"Total: {total} | {passed_str} | {failed_str} | {skipped_str}") |
| 228 | print(bold(f"{'=' * 60}")) |
| 229 | |
| 230 | if self.failed > 0: |
| 231 | print(error("\nFailed Tests:")) |
| 232 | for test in self.tests: |
| 233 | if test.result == TestResult.FAILED: |
| 234 | print(f" {error(chr(10007))} {test.name}: {error(test.message)}") |
| 235 | |
| 236 | print() |
| 237 | |
| 238 | |
| 239 | # ============================================================================= |