|
17 | 17 |
|
18 | 18 |
|
19 | 19 | class XMLTestRunner(DiscoverRunner): |
| 20 | + test_runner = xmlrunner.XMLTestRunner |
20 | 21 |
|
21 | | - def run_suite(self, suite, **kwargs): |
22 | | - dummy = kwargs # unused |
| 22 | + def get_resultclass(self): |
| 23 | + # Django provides `DebugSQLTextTestResult` if `debug_sql` argument is True |
| 24 | + # To use `xmlrunner.result._XMLTestResult` we supress default behavior |
| 25 | + return None |
| 26 | + |
| 27 | + def get_test_runner_kwargs(self): |
| 28 | + # We use separate verbosity setting for our runner |
23 | 29 | verbosity = getattr(settings, 'TEST_OUTPUT_VERBOSE', 1) |
24 | | - # XXX: verbosity = self.verbosity |
25 | 30 | if isinstance(verbosity, bool): |
26 | 31 | verbosity = (1, 2)[verbosity] |
27 | | - descriptions = getattr(settings, 'TEST_OUTPUT_DESCRIPTIONS', False) |
| 32 | + verbosity = verbosity # not self.verbosity |
| 33 | + |
28 | 34 | output_dir = getattr(settings, 'TEST_OUTPUT_DIR', '.') |
29 | 35 | single_file = getattr(settings, 'TEST_OUTPUT_FILE_NAME', None) |
30 | 36 |
|
31 | | - kwargs = dict( |
32 | | - verbosity=verbosity, descriptions=descriptions, |
33 | | - failfast=self.failfast) |
34 | | - if single_file is not None: |
| 37 | + # For single file case we are able to create file here |
| 38 | + # But for multiple files case files will be created inside runner/results |
| 39 | + if single_file is None: # output will be a path (folder) |
| 40 | + output = output_dir |
| 41 | + else: # output will be a stream |
35 | 42 | if not os.path.exists(output_dir): |
36 | 43 | os.makedirs(output_dir) |
37 | 44 | file_path = os.path.join(output_dir, single_file) |
38 | | - with open(file_path, 'wb') as xml: |
39 | | - return xmlrunner.XMLTestRunner( |
40 | | - output=xml, **kwargs).run(suite) |
41 | | - else: |
42 | | - return xmlrunner.XMLTestRunner( |
43 | | - output=output_dir, **kwargs).run(suite) |
| 45 | + output = open(file_path, 'wb') |
| 46 | + |
| 47 | + return dict( |
| 48 | + verbosity=verbosity, |
| 49 | + descriptions=getattr(settings, 'TEST_OUTPUT_DESCRIPTIONS', False), |
| 50 | + failfast=self.failfast, |
| 51 | + resultclass=self.get_resultclass(), |
| 52 | + output=output, |
| 53 | + ) |
| 54 | + |
| 55 | + def run_suite(self, suite, **kwargs): |
| 56 | + runner_kwargs = self.get_test_runner_kwargs() |
| 57 | + runner = self.test_runner(**runner_kwargs) |
| 58 | + results = runner.run(suite) |
| 59 | + if hasattr(runner_kwargs['output'], 'close'): |
| 60 | + runner_kwargs['output'].close() |
| 61 | + return results |
0 commit comments