Turn on the continue on failure only when the flag is given
This commit is contained in:
		
							parent
							
								
									7f2dd74ae9
								
							
						
					
					
						commit
						f4cc45bb41
					
				|  | @ -50,6 +50,10 @@ def pytest_addoption(parser): | |||
|                     action="store_true", default=False, | ||||
|                     help="ignore doctest ImportErrors", | ||||
|                     dest="doctest_ignore_import_errors") | ||||
|     group.addoption("--doctest-continue-on-failure", | ||||
|                     action="store_true", default=False, | ||||
|                     help="for a given doctest, continue to run after the first failure", | ||||
|                     dest="doctest_continue_on_failure") | ||||
| 
 | ||||
| 
 | ||||
| def pytest_collect_file(path, parent): | ||||
|  | @ -100,23 +104,17 @@ class MultipleDoctestFailures(Exception): | |||
| def _init_runner_class(): | ||||
|     import doctest | ||||
| 
 | ||||
|     class PytestDoctestRunner(doctest.DocTestRunner): | ||||
|     class PytestDoctestRunner(doctest.DebugRunner): | ||||
|         """ | ||||
|         Runner to collect failures.  Note that the out variable in this case is | ||||
|         a list instead of a stdout-like object | ||||
|         """ | ||||
|         def __init__(self, checker=None, verbose=None, optionflags=0, | ||||
|                      continue_on_failure=True): | ||||
|             doctest.DocTestRunner.__init__( | ||||
|             doctest.DebugRunner.__init__( | ||||
|                 self, checker=checker, verbose=verbose, optionflags=optionflags) | ||||
|             self.continue_on_failure = continue_on_failure | ||||
| 
 | ||||
|         def report_start(self, out, test, example): | ||||
|             pass | ||||
| 
 | ||||
|         def report_success(self, out, test, example, got): | ||||
|             pass | ||||
| 
 | ||||
|         def report_failure(self, out, test, example, got): | ||||
|             failure = doctest.DocTestFailure(test, example, got) | ||||
|             if self.continue_on_failure: | ||||
|  | @ -257,6 +255,16 @@ def get_optionflags(parent): | |||
|     return flag_acc | ||||
| 
 | ||||
| 
 | ||||
| def _get_continue_on_failure(config): | ||||
|     continue_on_failure = config.getvalue('doctest_continue_on_failure') | ||||
|     if continue_on_failure: | ||||
|         # We need to turn off this if we use pdb since we should stop at | ||||
|         # the first failure | ||||
|         if config.getvalue("usepdb"): | ||||
|             continue_on_failure = False | ||||
|     return continue_on_failure | ||||
| 
 | ||||
| 
 | ||||
| class DoctestTextfile(pytest.Module): | ||||
|     obj = None | ||||
| 
 | ||||
|  | @ -272,10 +280,11 @@ class DoctestTextfile(pytest.Module): | |||
|         globs = {'__name__': '__main__'} | ||||
| 
 | ||||
|         optionflags = get_optionflags(self) | ||||
|         continue_on_failure = not self.config.getvalue("usepdb") | ||||
|         runner = _get_runner(verbose=0, optionflags=optionflags, | ||||
| 
 | ||||
|         runner = _get_runner( | ||||
|             verbose=0, optionflags=optionflags, | ||||
|             checker=_get_checker(), | ||||
|                              continue_on_failure=continue_on_failure) | ||||
|             continue_on_failure=_get_continue_on_failure(self.config)) | ||||
|         _fix_spoof_python2(runner, encoding) | ||||
| 
 | ||||
|         parser = doctest.DocTestParser() | ||||
|  | @ -310,10 +319,10 @@ class DoctestModule(pytest.Module): | |||
|         # uses internal doctest module parsing mechanism | ||||
|         finder = doctest.DocTestFinder() | ||||
|         optionflags = get_optionflags(self) | ||||
|         continue_on_failure = not self.config.getvalue("usepdb") | ||||
|         runner = _get_runner(verbose=0, optionflags=optionflags, | ||||
|         runner = _get_runner( | ||||
|             verbose=0, optionflags=optionflags, | ||||
|             checker=_get_checker(), | ||||
|                              continue_on_failure=continue_on_failure) | ||||
|             continue_on_failure=_get_continue_on_failure(self.config)) | ||||
| 
 | ||||
|         for test in finder.find(module, module.__name__): | ||||
|             if test.examples:  # skip empty doctests | ||||
|  |  | |||
|  | @ -767,7 +767,7 @@ class TestDoctestSkips(object): | |||
|             7 | ||||
|             >>> i + 1 | ||||
|         """) | ||||
|         result = testdir.runpytest("--doctest-modules") | ||||
|         result = testdir.runpytest("--doctest-modules", "--doctest-continue-on-failure") | ||||
|         result.assert_outcomes(passed=0, failed=1) | ||||
|         # The lines that contains the failure are 4, 5, and 8.  The first one | ||||
|         # is a stack trace and the other two are mismatches. | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue