| 153 | |
| 154 | @dataclass |
| 155 | class TestResult(): |
| 156 | stdout: str |
| 157 | stderr: str |
| 158 | returncode: int |
| 159 | json: str |
| 160 | test_schedule: str |
| 161 | current_test_case: unittest.TestCase |
| 162 | |
| 163 | def __str__(self): |
| 164 | return f'\nReturncode: {self.returncode}\nStdout:\n{self.stdout}\nStderr:\n{self.stderr}\n' |
| 165 | |
| 166 | def has_returncode(self, code): |
| 167 | self.current_test_case.assertEqual(code, self.returncode, self) |
| 168 | |
| 169 | def stdout_includes(self, content): |
| 170 | self.current_test_case.assertIn(content, self.stdout, self) |
| 171 | |
| 172 | def stdout_excludes(self, content): |
| 173 | self.current_test_case.assertNotIn(content, self.stdout, self) |
| 174 | |
| 175 | def stderr_includes(self, content): |
| 176 | self.current_test_case.assertIn(content, self.stderr, self) |
| 177 | |
| 178 | def stderr_excludes(self, content): |
| 179 | self.current_test_case.assertNotIn(content, self.stderr, self) |
| 180 | |
| 181 | def json_content_equals(self, expected_results_file): |
| 182 | with open(TEST_DATA_ROOT / expected_results_file) as f: |
| 183 | expected_test_results = json.load(f) |
| 184 | |
| 185 | pretty_json = json.dumps(self.json, indent=2, sort_keys=True) |
| 186 | msg = None # Set to pretty_json for bootstrapping. |
| 187 | self.current_test_case.assertDictEqual(self.json, expected_test_results, msg) |
| 188 | |
| 189 | |
| 190 | class TestRunnerTest(unittest.TestCase): |