172 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Python
		
	
	
	
| 
 | |
| import py
 | |
| import example1
 | |
| 
 | |
| from py.__.test.executor import RunExecutor, BoxExecutor,\
 | |
|     AsyncExecutor, ApigenExecutor
 | |
| from py.__.test.outcome import ReprOutcome
 | |
| from py.__.test.rsession.testing.basetest import BasicRsessionTest
 | |
| from py.__.test.outcome import Failed
 | |
| 
 | |
| def setup_module(mod):
 | |
|     if py.std.sys.platform == "win32":
 | |
|         py.test.skip("skipping executor tests (some require os.fork)")
 | |
| 
 | |
| class Item(py.test.collect.Item):
 | |
|     def __init__(self, name, config):
 | |
|         super(Item, self).__init__(name)
 | |
|         self._config = config
 | |
| 
 | |
| class ItemTestPassing(Item):    
 | |
|     def run(self):
 | |
|         return None
 | |
| 
 | |
| class ItemTestFailing(Item):
 | |
|     def run(self):
 | |
|         assert 0 == 1
 | |
| 
 | |
| class ItemTestSkipping(Item):
 | |
|     def run(self):
 | |
|         py.test.skip("hello")
 | |
| 
 | |
| class ItemTestPrinting(Item):
 | |
|     def run(self):
 | |
|         print "hello"
 | |
| 
 | |
| class ItemTestFailingExplicit(Item):
 | |
|     def run(self):
 | |
|         raise Failed(excinfo="3")
 | |
| 
 | |
| class ItemTestFailingExplicitEmpty(Item):
 | |
|     def run(self):
 | |
|         py.test.raises(ValueError, lambda : 123)
 | |
| 
 | |
| class TestExecutor(BasicRsessionTest):
 | |
|     def test_run_executor(self):
 | |
|         ex = RunExecutor(ItemTestPassing("pass", self.config), config=self.config)
 | |
|         outcome = ex.execute()
 | |
|         assert outcome.passed
 | |
|     
 | |
|         ex = RunExecutor(ItemTestFailing("fail", self.config), config=self.config)
 | |
|         outcome = ex.execute()
 | |
|         assert not outcome.passed
 | |
| 
 | |
|         ex = RunExecutor(ItemTestSkipping("skip", self.config), config=self.config)
 | |
|         outcome = ex.execute()
 | |
|         assert outcome.skipped 
 | |
|         assert not outcome.passed
 | |
|         assert not outcome.excinfo
 | |
| 
 | |
|     def test_run_executor_capture(self):
 | |
|         ex = RunExecutor(ItemTestPrinting("print", self.config), config=self.config)
 | |
|         outcome = ex.execute()
 | |
|         assert outcome.stdout == "hello\n"
 | |
| 
 | |
|     def test_box_executor(self):
 | |
|         ex = BoxExecutor(ItemTestPassing("pass", self.config), config=self.config)
 | |
|         outcome_repr = ex.execute()
 | |
|         outcome = ReprOutcome(outcome_repr)
 | |
|         assert outcome.passed
 | |
|     
 | |
|         ex = BoxExecutor(ItemTestFailing("fail", self.config), config=self.config)
 | |
|         outcome_repr = ex.execute()
 | |
|         outcome = ReprOutcome(outcome_repr)
 | |
|         assert not outcome.passed
 | |
| 
 | |
|         ex = BoxExecutor(ItemTestSkipping("skip", self.config), config=self.config)
 | |
|         outcome_repr = ex.execute()
 | |
|         outcome = ReprOutcome(outcome_repr)
 | |
|         assert outcome.skipped 
 | |
|         assert not outcome.passed
 | |
|         assert not outcome.excinfo 
 | |
| 
 | |
|     def test_box_executor_stdout(self):
 | |
|         item = self.getexample("print")
 | |
|         ex = BoxExecutor(item, config=self.config)
 | |
|         outcome_repr = ex.execute()
 | |
|         outcome = ReprOutcome(outcome_repr)
 | |
|         assert outcome.passed
 | |
|         assert outcome.stdout.find("samfing") != -1
 | |
| 
 | |
|     def test_box_executor_stdout_error(self):
 | |
|         item = self.getexample("printfail")
 | |
|         ex = BoxExecutor(item, config=self.config)
 | |
|         outcome_repr = ex.execute()
 | |
|         outcome = ReprOutcome(outcome_repr)
 | |
|         assert not outcome.passed
 | |
|         assert outcome.stdout.find("samfing elz") != -1 
 | |
| 
 | |
|     def test_cont_executor(self):
 | |
|         item = self.getexample("printfail")
 | |
|         ex = AsyncExecutor(item, config=self.config)
 | |
|         cont, pid = ex.execute()
 | |
|         assert pid
 | |
|         outcome_repr = cont()
 | |
|         outcome = ReprOutcome(outcome_repr)
 | |
|         assert not outcome.passed
 | |
|         assert outcome.stdout.find("samfing elz") != -1
 | |
| 
 | |
|     def test_apigen_executor(self):
 | |
|         class Tracer(object):
 | |
|             def __init__(self):
 | |
|                 self.starts = 0
 | |
|                 self.ends = 0
 | |
|         
 | |
|             def start_tracing(self):
 | |
|                 self.starts += 1
 | |
| 
 | |
|             def end_tracing(self):
 | |
|                 self.ends += 1
 | |
|     
 | |
|         tmpdir = py.test.ensuretemp("apigen_executor")
 | |
|         tmpdir.ensure("__init__.py")
 | |
|         tmpdir.ensure("test_one.py").write(py.code.Source("""
 | |
|         def g():
 | |
|             pass
 | |
|     
 | |
|         def test_1():
 | |
|             g()
 | |
| 
 | |
|         class TestX(object):
 | |
|             def setup_method(self, m):
 | |
|                 self.ttt = 1
 | |
| 
 | |
|             def test_one(self):
 | |
|                 self.ttt += 1
 | |
| 
 | |
|             def test_raise(self):
 | |
|                 1/0
 | |
|         """))
 | |
|         config = py.test.config._reparse([tmpdir])
 | |
|         rootcol = config._getcollector(tmpdir)
 | |
|         tracer = Tracer()
 | |
|         item = rootcol._getitembynames("test_one.py/test_1")
 | |
|         ex = ApigenExecutor(item, config=config)
 | |
|         out1 = ex.execute(tracer)
 | |
|         item = rootcol._getitembynames("test_one.py/TestX/()/test_one")
 | |
|         ex = ApigenExecutor(item, config=config)
 | |
|         out2 = ex.execute(tracer)
 | |
|         item = rootcol._getitembynames("test_one.py/TestX/()/test_raise")
 | |
|         ex = ApigenExecutor(item, config=config)
 | |
|         out3 = ex.execute(tracer)
 | |
|         assert tracer.starts == 3
 | |
|         assert tracer.ends == 3
 | |
|         assert out1.passed
 | |
|         assert out2.passed
 | |
|         assert not out3.passed
 | |
| 
 | |
|     def test_executor_explicit_Failed(self):
 | |
|         ex = RunExecutor(ItemTestFailingExplicit("failex", self.config),
 | |
|                          config=self.config)
 | |
|         
 | |
|         outcome = ex.execute()
 | |
|         assert not outcome.passed
 | |
|         assert outcome.excinfo == "3"
 | |
| 
 | |
|     def test_executor_explicit_Faile_no_excinfo(self):
 | |
|         ex = RunExecutor(ItemTestFailingExplicitEmpty("failexx", self.config),
 | |
|                          config=self.config)
 | |
|         outcome = ex.execute()
 | |
|         assert not outcome.passed
 | |
| 
 |