71 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
| 
 | |
| """ local-only operations
 | |
| """
 | |
| 
 | |
| import py
 | |
| from py.__.test.rsession.executor import BoxExecutor, RunExecutor,\
 | |
|      ApigenExecutor
 | |
| from py.__.test.rsession import repevent
 | |
| from py.__.test.rsession.outcome import ReprOutcome
 | |
| 
 | |
| # XXX copied from session.py
 | |
| def startcapture(session):
 | |
|     if not session.config.option.nocapture:
 | |
|         session._capture = py.io.StdCapture()
 | |
| 
 | |
| def finishcapture(session): 
 | |
|     if hasattr(session, '_capture'): 
 | |
|         capture = session._capture 
 | |
|         del session._capture
 | |
|         return capture.reset()
 | |
|     return "", ""
 | |
| 
 | |
| def box_runner(item, session, reporter):
 | |
|     r = BoxExecutor(item, config=session.config)
 | |
|     return ReprOutcome(r.execute())
 | |
| 
 | |
| def plain_runner(item, session, reporter):
 | |
|     r = RunExecutor(item, usepdb=session.config.option.usepdb, reporter=reporter, config=session.config)
 | |
|     outcome = r.execute()
 | |
|     outcome = ReprOutcome(outcome.make_repr(session.config.option.tbstyle))
 | |
|     return outcome
 | |
| 
 | |
| def benchmark_runner(item, session, reporter):
 | |
|     raise NotImplementedError()
 | |
| 
 | |
| def apigen_runner(item, session, reporter):
 | |
|     #retval = plain_runner(item, session, reporter)
 | |
|     startcapture(session)
 | |
|     r = ApigenExecutor(item, reporter=reporter, config=session.config)
 | |
|     outcome = r.execute(session.tracer)
 | |
|     outcome = ReprOutcome(outcome.make_repr(session.config.option.tbstyle))
 | |
|     outcome.stdout, outcome.stderr = finishcapture(session)
 | |
|     return outcome
 | |
| 
 | |
| def exec_runner(item, session, reporter):
 | |
|     raise NotImplementedError()
 | |
| 
 | |
| # runner interface is here to perform several different types of run
 | |
| #+1. box_runner - for running normal boxed tests
 | |
| #+2. plain_runner - for performing running without boxing (necessary for pdb)
 | |
| #    XXX: really?
 | |
| #-3. exec_runner - for running under different interpreter
 | |
| #-4. benchmark_runner - for running with benchmarking
 | |
| #-5. apigen_runner - for running under apigen to generate api out of it.
 | |
| def local_loop(session, reporter, itemgenerator, shouldstop, config, runner=None):
 | |
|     assert runner is not None
 | |
|     #if runner is None:
 | |
|     #    if session.config.option.apigen:
 | |
|     #        runner = apigen_runner
 | |
|     #    else:
 | |
|     #    runner = box_runner
 | |
|     while 1:
 | |
|         try:
 | |
|             item = itemgenerator.next()
 | |
|             if shouldstop():
 | |
|                 return
 | |
|             outcome = runner(item, session, reporter)
 | |
|             reporter(repevent.ReceivedItemOutcome(None, item, outcome))
 | |
|         except StopIteration:
 | |
|             break
 |