simplify pdb disabling of capturing, also accomodate the new semantics
that capturing is always on during a test session.
This commit is contained in:
		
							parent
							
								
									9777703e03
								
							
						
					
					
						commit
						ac1d277225
					
				|  | @ -16,43 +16,30 @@ def pytest_configure(config): | ||||||
|     if config.getvalue("usepdb"): |     if config.getvalue("usepdb"): | ||||||
|         config.pluginmanager.register(PdbInvoke(), 'pdbinvoke') |         config.pluginmanager.register(PdbInvoke(), 'pdbinvoke') | ||||||
| 
 | 
 | ||||||
|     old_trace = py.std.pdb.set_trace |     old = (py.std.pdb.set_trace, pytestPDB._pluginmanager) | ||||||
|     def fin(): |     def fin(): | ||||||
|         py.std.pdb.set_trace = old_trace |         py.std.pdb.set_trace, pytestPDB._pluginmanager = old | ||||||
|     py.std.pdb.set_trace = pytest.set_trace |     py.std.pdb.set_trace = pytest.set_trace | ||||||
|  |     pytestPDB._pluginmanager = config.pluginmanager | ||||||
|     config._cleanup.append(fin) |     config._cleanup.append(fin) | ||||||
| 
 | 
 | ||||||
| class pytestPDB: | class pytestPDB: | ||||||
|     """ Pseudo PDB that defers to the real pdb. """ |     """ Pseudo PDB that defers to the real pdb. """ | ||||||
|     item = None |     _pluginmanager = None | ||||||
|     collector = None |  | ||||||
| 
 | 
 | ||||||
|     def set_trace(self): |     def set_trace(self): | ||||||
|         """ invoke PDB set_trace debugging, dropping any IO capturing. """ |         """ invoke PDB set_trace debugging, dropping any IO capturing. """ | ||||||
|         frame = sys._getframe().f_back |         frame = sys._getframe().f_back | ||||||
|         item = self.item or self.collector |         capman = None | ||||||
| 
 |         if self._pluginmanager is not None: | ||||||
|         if item is not None: |             capman = self._pluginmanager.getplugin("capturemanager") | ||||||
|             capman = item.config.pluginmanager.getplugin("capturemanager") |  | ||||||
|             if capman: |             if capman: | ||||||
|                 capman.reset_capturings() |                 capman.reset_capturings() | ||||||
|             tw = item.config.get_terminal_writer() |             tw = py.io.TerminalWriter() | ||||||
|             tw.line() |             tw.line() | ||||||
|             tw.sep(">", "PDB set_trace (IO-capturing turned off)") |             tw.sep(">", "PDB set_trace (IO-capturing turned off)") | ||||||
|         py.std.pdb.Pdb().set_trace(frame) |         py.std.pdb.Pdb().set_trace(frame) | ||||||
| 
 | 
 | ||||||
| def pdbitem(item): |  | ||||||
|     pytestPDB.item = item |  | ||||||
| pytest_runtest_setup = pytest_runtest_call = pytest_runtest_teardown = pdbitem |  | ||||||
| 
 |  | ||||||
| @pytest.mark.hookwrapper |  | ||||||
| def pytest_make_collect_report(collector): |  | ||||||
|     pytestPDB.collector = collector |  | ||||||
|     yield |  | ||||||
|     pytestPDB.collector = None |  | ||||||
| 
 |  | ||||||
| def pytest_runtest_makereport(): |  | ||||||
|     pytestPDB.item = None |  | ||||||
| 
 | 
 | ||||||
| class PdbInvoke: | class PdbInvoke: | ||||||
|     def pytest_exception_interact(self, node, call, report): |     def pytest_exception_interact(self, node, call, report): | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue