import py import example1 from py.__.test.rsession.executor import RunExecutor, BoxExecutor,\ AsyncExecutor, ApigenExecutor from py.__.test.rsession.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.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 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"