rename recorder functionality, unify interfaces
--HG-- branch : trunk
This commit is contained in:
		
							parent
							
								
									17762db128
								
							
						
					
					
						commit
						1973817f11
					
				|  | @ -4,7 +4,7 @@ from py.__.execnet.gateway import ExecnetAPI | ||||||
| 
 | 
 | ||||||
| class TestExecnetEvents: | class TestExecnetEvents: | ||||||
|     def test_popengateway(self, _pytest): |     def test_popengateway(self, _pytest): | ||||||
|         rec = _pytest.getcallrecorder(ExecnetAPI) |         rec = _pytest.gethookrecorder(ExecnetAPI) | ||||||
|         gw = py.execnet.PopenGateway() |         gw = py.execnet.PopenGateway() | ||||||
|         call = rec.popcall("pyexecnet_gateway_init")  |         call = rec.popcall("pyexecnet_gateway_init")  | ||||||
|         assert call.gateway == gw |         assert call.gateway == gw | ||||||
|  |  | ||||||
|  | @ -21,7 +21,7 @@ class TestGatewayManagerPopen: | ||||||
|             assert spec.chdir == "abc" |             assert spec.chdir == "abc" | ||||||
|          |          | ||||||
|     def test_popen_makegateway_events(self, _pytest): |     def test_popen_makegateway_events(self, _pytest): | ||||||
|         rec = _pytest.getcallrecorder(py.execnet._HookSpecs) |         rec = _pytest.gethookrecorder(py.execnet._HookSpecs) | ||||||
|         hm = GatewayManager(["popen"] * 2) |         hm = GatewayManager(["popen"] * 2) | ||||||
|         hm.makegateways() |         hm.makegateways() | ||||||
|         call = rec.popcall("pyexecnet_gwmanage_newgateway") |         call = rec.popcall("pyexecnet_gwmanage_newgateway") | ||||||
|  | @ -63,7 +63,7 @@ class TestGatewayManagerPopen: | ||||||
| 
 | 
 | ||||||
|     def test_hostmanage_rsync_same_popen_twice(self, mysetup, _pytest): |     def test_hostmanage_rsync_same_popen_twice(self, mysetup, _pytest): | ||||||
|         source, dest = mysetup.source, mysetup.dest  |         source, dest = mysetup.source, mysetup.dest  | ||||||
|         rec = _pytest.getcallrecorder(py.execnet._HookSpecs) |         rec = _pytest.gethookrecorder(py.execnet._HookSpecs) | ||||||
|         hm = GatewayManager(["popen//chdir=%s" %dest] * 2) |         hm = GatewayManager(["popen//chdir=%s" %dest] * 2) | ||||||
|         hm.makegateways() |         hm.makegateways() | ||||||
|         source.ensure("dir1", "dir2", "hello") |         source.ensure("dir1", "dir2", "hello") | ||||||
|  |  | ||||||
|  | @ -174,13 +174,13 @@ class TestDSession: | ||||||
|         session.senditems_load([item1, item2]) |         session.senditems_load([item1, item2]) | ||||||
|         node = session.item2nodes[item1] [0] |         node = session.item2nodes[item1] [0] | ||||||
|         session.queueevent("pytest_testnodedown", node=node, error=None) |         session.queueevent("pytest_testnodedown", node=node, error=None) | ||||||
|         evrec = testdir.geteventrecorder(session.pluginmanager) |         reprec = testdir.getreportrecorder(session.pluginmanager) | ||||||
|         print session.item2nodes |         print session.item2nodes | ||||||
|         loopstate = session._initloopstate([]) |         loopstate = session._initloopstate([]) | ||||||
|         session.loop_once(loopstate) |         session.loop_once(loopstate) | ||||||
| 
 | 
 | ||||||
|         assert loopstate.colitems == [item2] # do not reschedule crash item |         assert loopstate.colitems == [item2] # do not reschedule crash item | ||||||
|         testrep = evrec.matchreport(names="itemtestreport") |         testrep = reprec.matchreport(names="pytest_itemtestreport") | ||||||
|         assert testrep.failed |         assert testrep.failed | ||||||
|         assert testrep.colitem == item1 |         assert testrep.colitem == item1 | ||||||
|         assert str(testrep.longrepr).find("crashed") != -1 |         assert str(testrep.longrepr).find("crashed") != -1 | ||||||
|  | @ -261,13 +261,13 @@ class TestDSession: | ||||||
|         session.addnode(node) |         session.addnode(node) | ||||||
|         loopstate = session._initloopstate([]) |         loopstate = session._initloopstate([]) | ||||||
|         loopstate.shuttingdown = True |         loopstate.shuttingdown = True | ||||||
|         evrec = testdir.geteventrecorder(session.pluginmanager) |         reprec = testdir.getreportrecorder(session.pluginmanager) | ||||||
|         session.queueevent("pytest_itemtestreport", rep=run(item, node)) |         session.queueevent("pytest_itemtestreport", rep=run(item, node)) | ||||||
|         session.loop_once(loopstate) |         session.loop_once(loopstate) | ||||||
|         assert not evrec.getcalls("pytest_testnodedown") |         assert not reprec.getcalls("pytest_testnodedown") | ||||||
|         session.queueevent("pytest_testnodedown", node=node, error=None) |         session.queueevent("pytest_testnodedown", node=node, error=None) | ||||||
|         session.loop_once(loopstate) |         session.loop_once(loopstate) | ||||||
|         assert evrec.getcall('pytest_testnodedown').node == node |         assert reprec.getcall('pytest_testnodedown').node == node | ||||||
| 
 | 
 | ||||||
|     def test_filteritems(self, testdir): |     def test_filteritems(self, testdir): | ||||||
|         modcol = testdir.getmodulecol(""" |         modcol = testdir.getmodulecol(""" | ||||||
|  | @ -282,18 +282,18 @@ class TestDSession: | ||||||
|         dsel = session.filteritems([modcol]) |         dsel = session.filteritems([modcol]) | ||||||
|         assert dsel == [modcol]  |         assert dsel == [modcol]  | ||||||
|         items = modcol.collect() |         items = modcol.collect() | ||||||
|         callrecorder = testdir.geteventrecorder(session.pluginmanager).callrecorder |         hookrecorder = testdir.getreportrecorder(session.pluginmanager).hookrecorder | ||||||
|         remaining = session.filteritems(items) |         remaining = session.filteritems(items) | ||||||
|         assert remaining == [] |         assert remaining == [] | ||||||
|          |          | ||||||
|         event = callrecorder.getcalls("pytest_deselected")[-1] |         event = hookrecorder.getcalls("pytest_deselected")[-1] | ||||||
|         assert event.items == items  |         assert event.items == items  | ||||||
| 
 | 
 | ||||||
|         modcol.config.option.keyword = "test_fail" |         modcol.config.option.keyword = "test_fail" | ||||||
|         remaining = session.filteritems(items) |         remaining = session.filteritems(items) | ||||||
|         assert remaining == [items[0]] |         assert remaining == [items[0]] | ||||||
| 
 | 
 | ||||||
|         event = callrecorder.getcalls("pytest_deselected")[-1] |         event = hookrecorder.getcalls("pytest_deselected")[-1] | ||||||
|         assert event.items == [items[1]] |         assert event.items == [items[1]] | ||||||
| 
 | 
 | ||||||
|     def test_testnodedown_shutdown_after_completion(self, testdir): |     def test_testnodedown_shutdown_after_completion(self, testdir): | ||||||
|  | @ -355,16 +355,16 @@ class TestDSession: | ||||||
|         """) |         """) | ||||||
|         config = testdir.parseconfig('-d', p1, '--tx=popen') |         config = testdir.parseconfig('-d', p1, '--tx=popen') | ||||||
|         dsession = DSession(config) |         dsession = DSession(config) | ||||||
|         callrecorder = testdir.geteventrecorder(config.pluginmanager).callrecorder |         hookrecorder = testdir.getreportrecorder(config.pluginmanager).hookrecorder | ||||||
|         dsession.main([config.getfsnode(p1)]) |         dsession.main([config.getfsnode(p1)]) | ||||||
|         rep = callrecorder.popcall("pytest_itemtestreport").rep  |         rep = hookrecorder.popcall("pytest_itemtestreport").rep  | ||||||
|         assert rep.passed |         assert rep.passed | ||||||
|         rep = callrecorder.popcall("pytest_itemtestreport").rep |         rep = hookrecorder.popcall("pytest_itemtestreport").rep | ||||||
|         assert rep.skipped |         assert rep.skipped | ||||||
|         rep = callrecorder.popcall("pytest_itemtestreport").rep |         rep = hookrecorder.popcall("pytest_itemtestreport").rep | ||||||
|         assert rep.failed |         assert rep.failed | ||||||
|         # see that the node is really down  |         # see that the node is really down  | ||||||
|         node = callrecorder.popcall("pytest_testnodedown").node |         node = hookrecorder.popcall("pytest_testnodedown").node | ||||||
|         assert node.gateway.spec.popen |         assert node.gateway.spec.popen | ||||||
|         #XXX eq.geteventargs("pytest_testrunfinish") |         #XXX eq.geteventargs("pytest_testrunfinish") | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -107,7 +107,7 @@ class TestNodeManager: | ||||||
|         config = py.test.config._reparse([source, '--debug']) |         config = py.test.config._reparse([source, '--debug']) | ||||||
|         assert config.option.debug |         assert config.option.debug | ||||||
|         nodemanager = NodeManager(config, specs) |         nodemanager = NodeManager(config, specs) | ||||||
|         sorter = testdir.geteventrecorder(config.pluginmanager).callrecorder |         sorter = testdir.getreportrecorder(config.pluginmanager).hookrecorder | ||||||
|         nodemanager.setup_nodes(putevent=[].append) |         nodemanager.setup_nodes(putevent=[].append) | ||||||
|         for spec in nodemanager.gwmanager.specs: |         for spec in nodemanager.gwmanager.specs: | ||||||
|             l = sorter.getcalls("pytest_trace") |             l = sorter.getcalls("pytest_trace") | ||||||
|  |  | ||||||
|  | @ -7,14 +7,13 @@ class PytestArg: | ||||||
|     def __init__(self, request): |     def __init__(self, request): | ||||||
|         self.request = request  |         self.request = request  | ||||||
| 
 | 
 | ||||||
|     def getcallrecorder(self, hookspecs, comregistry=None): |     def gethookrecorder(self, hookspecs, comregistry=None): | ||||||
|         if comregistry is None: |         if comregistry is None: | ||||||
|             comregistry = self.request.config.pluginmanager.comregistry |             comregistry = self.request.config.pluginmanager.comregistry | ||||||
|         callrecorder = CallRecorder(comregistry) |         hookrecorder = HookRecorder(comregistry) | ||||||
|         callrecorder.start_recording(hookspecs) |         hookrecorder.start_recording(hookspecs) | ||||||
|         self.request.addfinalizer(callrecorder.finalize) |         self.request.addfinalizer(hookrecorder.finish_recording) | ||||||
|         return callrecorder  |         return hookrecorder  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| class ParsedCall: | class ParsedCall: | ||||||
|     def __init__(self, name, locals): |     def __init__(self, name, locals): | ||||||
|  | @ -28,7 +27,7 @@ class ParsedCall: | ||||||
|         del d['_name'] |         del d['_name'] | ||||||
|         return "<ParsedCall %r(**%r)>" %(self._name, d) |         return "<ParsedCall %r(**%r)>" %(self._name, d) | ||||||
| 
 | 
 | ||||||
| class CallRecorder: | class HookRecorder: | ||||||
|     def __init__(self, comregistry): |     def __init__(self, comregistry): | ||||||
|         self._comregistry = comregistry |         self._comregistry = comregistry | ||||||
|         self.calls = [] |         self.calls = [] | ||||||
|  | @ -40,23 +39,18 @@ class CallRecorder: | ||||||
|             _recorder = self  |             _recorder = self  | ||||||
|         for name, method in vars(hookspecs).items(): |         for name, method in vars(hookspecs).items(): | ||||||
|             if name[0] != "_": |             if name[0] != "_": | ||||||
|                 setattr(RecordCalls, name, self._getcallparser(method)) |                 setattr(RecordCalls, name, self._makecallparser(method)) | ||||||
|         recorder = RecordCalls() |         recorder = RecordCalls() | ||||||
|         self._recorders[hookspecs] = recorder |         self._recorders[hookspecs] = recorder | ||||||
|         self._comregistry.register(recorder) |         self._comregistry.register(recorder) | ||||||
|         self.hook = py._com.Hooks(hookspecs, registry=self._comregistry) |         self.hook = py._com.Hooks(hookspecs, registry=self._comregistry) | ||||||
| 
 | 
 | ||||||
|     def finalize(self): |     def finish_recording(self): | ||||||
|         for recorder in self._recorders.values(): |         for recorder in self._recorders.values(): | ||||||
|             self._comregistry.unregister(recorder) |             self._comregistry.unregister(recorder) | ||||||
|         self._recorders.clear() |         self._recorders.clear() | ||||||
| 
 | 
 | ||||||
|     def recordsmethod(self, name): |     def _makecallparser(self, method): | ||||||
|         for hookspecs in self._recorders: |  | ||||||
|             if hasattr(hookspecs, name): |  | ||||||
|                 return True |  | ||||||
| 
 |  | ||||||
|     def _getcallparser(self, method): |  | ||||||
|         name = method.__name__ |         name = method.__name__ | ||||||
|         args, varargs, varkw, default = py.std.inspect.getargspec(method) |         args, varargs, varkw, default = py.std.inspect.getargspec(method) | ||||||
|         assert args[0] == "self" |         assert args[0] == "self" | ||||||
|  | @ -72,13 +66,6 @@ class CallRecorder: | ||||||
|         """ % locals()) |         """ % locals()) | ||||||
|         return locals()[name] |         return locals()[name] | ||||||
| 
 | 
 | ||||||
|     def popcall(self, name): |  | ||||||
|         for i, call in py.builtin.enumerate(self.calls): |  | ||||||
|             if call._name == name: |  | ||||||
|                 del self.calls[i] |  | ||||||
|                 return call  |  | ||||||
|         raise ValueError("could not find call %r in %r" %(name, self.calls)) |  | ||||||
| 
 |  | ||||||
|     def getcalls(self, names): |     def getcalls(self, names): | ||||||
|         if isinstance(names, str): |         if isinstance(names, str): | ||||||
|             names = names.split() |             names = names.split() | ||||||
|  | @ -95,12 +82,25 @@ class CallRecorder: | ||||||
|                 l.append(call) |                 l.append(call) | ||||||
|         return l |         return l | ||||||
| 
 | 
 | ||||||
|  |     def popcall(self, name): | ||||||
|  |         for i, call in py.builtin.enumerate(self.calls): | ||||||
|  |             if call._name == name: | ||||||
|  |                 del self.calls[i] | ||||||
|  |                 return call  | ||||||
|  |         raise ValueError("could not find call %r in %r" %(name, self.calls)) | ||||||
|  | 
 | ||||||
|  |     def getcall(self, name): | ||||||
|  |         l = self.getcalls(name) | ||||||
|  |         assert len(l) == 1, (name, l) | ||||||
|  |         return l[0] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| def test_generic(plugintester): | def test_generic(plugintester): | ||||||
|     plugintester.hookcheck() |     plugintester.hookcheck() | ||||||
| 
 | 
 | ||||||
| def test_callrecorder_basic(): | def test_hookrecorder_basic(): | ||||||
|     comregistry = py._com.Registry()  |     comregistry = py._com.Registry()  | ||||||
|     rec = CallRecorder(comregistry) |     rec = HookRecorder(comregistry) | ||||||
|     class ApiClass: |     class ApiClass: | ||||||
|         def xyz(self, arg): |         def xyz(self, arg): | ||||||
|             pass |             pass | ||||||
|  | @ -118,7 +118,7 @@ def test_functional(testdir, linecomp): | ||||||
|         def test_func(_pytest): |         def test_func(_pytest): | ||||||
|             class ApiClass: |             class ApiClass: | ||||||
|                 def xyz(self, arg):  pass  |                 def xyz(self, arg):  pass  | ||||||
|             rec = _pytest.getcallrecorder(ApiClass) |             rec = _pytest.gethookrecorder(ApiClass) | ||||||
|             class Plugin: |             class Plugin: | ||||||
|                 def xyz(self, arg): |                 def xyz(self, arg): | ||||||
|                     return arg + 1 |                     return arg + 1 | ||||||
|  |  | ||||||
|  | @ -93,7 +93,7 @@ class TestDoctests: | ||||||
|     def test_collect_module(self, testdir): |     def test_collect_module(self, testdir): | ||||||
|         path = testdir.makepyfile(whatever="#") |         path = testdir.makepyfile(whatever="#") | ||||||
|         for p in (path, testdir.tmpdir):  |         for p in (path, testdir.tmpdir):  | ||||||
|             items, evrec = testdir.inline_genitems(p, '--doctest-modules') |             items, reprec = testdir.inline_genitems(p, '--doctest-modules') | ||||||
|             assert len(items) == 1 |             assert len(items) == 1 | ||||||
|             assert isinstance(items[0], DoctestModule) |             assert isinstance(items[0], DoctestModule) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -30,20 +30,20 @@ def test_generic(plugintester): | ||||||
| 
 | 
 | ||||||
| class TestCapture: | class TestCapture: | ||||||
|     def test_std_functional(self, testdir):         |     def test_std_functional(self, testdir):         | ||||||
|         evrec = testdir.inline_runsource(""" |         reprec = testdir.inline_runsource(""" | ||||||
|             def test_hello(stdcapture): |             def test_hello(stdcapture): | ||||||
|                 print 42 |                 print 42 | ||||||
|                 out, err = stdcapture.reset() |                 out, err = stdcapture.reset() | ||||||
|                 assert out.startswith("42") |                 assert out.startswith("42") | ||||||
|         """) |         """) | ||||||
|         evrec.assertoutcome(passed=1) |         reprec.assertoutcome(passed=1) | ||||||
|          |          | ||||||
|     def test_stdfd_functional(self, testdir):         |     def test_stdfd_functional(self, testdir):         | ||||||
|         evrec = testdir.inline_runsource(""" |         reprec = testdir.inline_runsource(""" | ||||||
|             def test_hello(stdcapturefd): |             def test_hello(stdcapturefd): | ||||||
|                 import os |                 import os | ||||||
|                 os.write(1, "42") |                 os.write(1, "42") | ||||||
|                 out, err = stdcapturefd.reset() |                 out, err = stdcapturefd.reset() | ||||||
|                 assert out.startswith("42") |                 assert out.startswith("42") | ||||||
|         """) |         """) | ||||||
|         evrec.assertoutcome(passed=1) |         reprec.assertoutcome(passed=1) | ||||||
|  |  | ||||||
|  | @ -57,10 +57,10 @@ def test_toproxy(testdir, monkeypatch): | ||||||
|         def test_skip(): |         def test_skip(): | ||||||
|             py.test.skip("") |             py.test.skip("") | ||||||
|     """) |     """) | ||||||
|     evrec = testdir.inline_run(testpath, "-P") |     reprec = testdir.inline_run(testpath, "-P") | ||||||
|     assert len(l) == 1 |     assert len(l) == 1 | ||||||
|     assert l[0][0] == "python" |     assert l[0][0] == "python" | ||||||
|     s = l[0][1] |     s = l[0][1] | ||||||
|     assert s.find("def test_fail") != -1 |     assert s.find("def test_fail") != -1 | ||||||
|     assert evrec.countoutcomes() == [1,1,1] |     assert reprec.countoutcomes() == [1,1,1] | ||||||
|       |       | ||||||
|  |  | ||||||
|  | @ -7,9 +7,10 @@ import os | ||||||
| import inspect | import inspect | ||||||
| from py.__.test import runner | from py.__.test import runner | ||||||
| from py.__.test.config import Config as pytestConfig | from py.__.test.config import Config as pytestConfig | ||||||
| from pytest__pytest import CallRecorder | from pytest__pytest import HookRecorder | ||||||
| import api | import api | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| def pytest_funcarg__linecomp(request): | def pytest_funcarg__linecomp(request): | ||||||
|     return LineComp() |     return LineComp() | ||||||
| 
 | 
 | ||||||
|  | @ -20,10 +21,10 @@ def pytest_funcarg__testdir(request): | ||||||
|     tmptestdir = TmpTestdir(request) |     tmptestdir = TmpTestdir(request) | ||||||
|     return tmptestdir |     return tmptestdir | ||||||
| 
 | 
 | ||||||
| def pytest_funcarg__eventrecorder(request): | def pytest_funcarg__reportrecorder(request): | ||||||
|     evrec = EventRecorder(py._com.comregistry) |     reprec = ReportRecorder(py._com.comregistry) | ||||||
|     request.addfinalizer(lambda: evrec.comregistry.unregister(evrec)) |     request.addfinalizer(lambda: reprec.comregistry.unregister(reprec)) | ||||||
|     return evrec |     return reprec | ||||||
| 
 | 
 | ||||||
| def test_generic(plugintester): | def test_generic(plugintester): | ||||||
|     plugintester.hookcheck() |     plugintester.hookcheck() | ||||||
|  | @ -72,12 +73,12 @@ class TmpTestdir: | ||||||
|         if hasattr(self, '_olddir'): |         if hasattr(self, '_olddir'): | ||||||
|             self._olddir.chdir() |             self._olddir.chdir() | ||||||
| 
 | 
 | ||||||
|     def geteventrecorder(self, registry): |     def getreportrecorder(self, registry): | ||||||
|         sorter = EventRecorder(registry) |         sorter = ReportRecorder(registry) | ||||||
|         sorter.callrecorder = CallRecorder(registry) |         sorter.hookrecorder = HookRecorder(registry) | ||||||
|         sorter.callrecorder.start_recording(api.PluginHooks) |         sorter.hookrecorder.start_recording(api.PluginHooks) | ||||||
|         sorter.hook = sorter.callrecorder.hook |         sorter.hook = sorter.hookrecorder.hook | ||||||
|         self.request.addfinalizer(sorter.callrecorder.finalize) |         self.request.addfinalizer(sorter.hookrecorder.finish_recording) | ||||||
|         return sorter |         return sorter | ||||||
| 
 | 
 | ||||||
|     def chdir(self): |     def chdir(self): | ||||||
|  | @ -129,7 +130,7 @@ class TmpTestdir: | ||||||
|         #config = self.parseconfig(*args) |         #config = self.parseconfig(*args) | ||||||
|         config = self.parseconfig(*args) |         config = self.parseconfig(*args) | ||||||
|         session = config.initsession() |         session = config.initsession() | ||||||
|         rec = self.geteventrecorder(config.pluginmanager) |         rec = self.getreportrecorder(config.pluginmanager) | ||||||
|         colitems = [config.getfsnode(arg) for arg in config.args] |         colitems = [config.getfsnode(arg) for arg in config.args] | ||||||
|         items = list(session.genitems(colitems)) |         items = list(session.genitems(colitems)) | ||||||
|         return items, rec  |         return items, rec  | ||||||
|  | @ -151,7 +152,7 @@ class TmpTestdir: | ||||||
|         config = self.parseconfig(*args) |         config = self.parseconfig(*args) | ||||||
|         config.pluginmanager.do_configure(config) |         config.pluginmanager.do_configure(config) | ||||||
|         session = config.initsession() |         session = config.initsession() | ||||||
|         sorter = self.geteventrecorder(config.pluginmanager) |         sorter = self.getreportrecorder(config.pluginmanager) | ||||||
|         session.main() |         session.main() | ||||||
|         config.pluginmanager.do_unconfigure(config) |         config.pluginmanager.do_unconfigure(config) | ||||||
|         return sorter  |         return sorter  | ||||||
|  | @ -161,10 +162,12 @@ class TmpTestdir: | ||||||
|         for plugin in self.plugins: |         for plugin in self.plugins: | ||||||
|             if isinstance(plugin, str): |             if isinstance(plugin, str): | ||||||
|                 config.pluginmanager.import_plugin(plugin) |                 config.pluginmanager.import_plugin(plugin) | ||||||
|             elif plugin: |             else: | ||||||
|                 if isinstance(plugin, dict): |                 if isinstance(plugin, dict): | ||||||
|                     plugin = PseudoPlugin(plugin)  |                     plugin = PseudoPlugin(plugin)  | ||||||
|  |                 if not config.pluginmanager.isregistered(plugin): | ||||||
|                     config.pluginmanager.register(plugin) |                     config.pluginmanager.register(plugin) | ||||||
|  |         #print "config.pluginmanager.impname2plugin", config.pluginmanager.impname2plugin | ||||||
|         return config |         return config | ||||||
| 
 | 
 | ||||||
|     def parseconfig(self, *args): |     def parseconfig(self, *args): | ||||||
|  | @ -284,55 +287,24 @@ class PseudoPlugin: | ||||||
|     def __init__(self, vars): |     def __init__(self, vars): | ||||||
|         self.__dict__.update(vars)  |         self.__dict__.update(vars)  | ||||||
| 
 | 
 | ||||||
| 
 | class ReportRecorder(object): | ||||||
| class Event: |     def __init__(self, comregistry): | ||||||
|     def __init__(self, name, args, kwargs): |  | ||||||
|         self.name = name |  | ||||||
|         self.args = args |  | ||||||
|         self.kwargs = kwargs |  | ||||||
|     def __repr__(self): |  | ||||||
|         return "<Event %r %r>" %(self.name, self.args) |  | ||||||
| 
 |  | ||||||
| class ParsedCall: |  | ||||||
|     def __init__(self, locals): |  | ||||||
|         self.__dict__ = locals.copy() |  | ||||||
| 
 |  | ||||||
|     def __repr__(self): |  | ||||||
|         return "<ParsedCall %r>" %(self.__dict__,) |  | ||||||
| 
 |  | ||||||
| class EventRecorder(object): |  | ||||||
|     def __init__(self, comregistry, debug=False): # True): |  | ||||||
|         self.comregistry = comregistry |         self.comregistry = comregistry | ||||||
|         self.debug = debug |  | ||||||
|         comregistry.register(self) |         comregistry.register(self) | ||||||
| 
 | 
 | ||||||
|     def getcall(self, name): |     def getcall(self, name): | ||||||
|         l = self.getcalls(name) |         return self.hookrecorder.getcall(name) | ||||||
|         assert len(l) == 1, (name, l) |  | ||||||
|         return l[0] |  | ||||||
| 
 | 
 | ||||||
|     def getcalls(self, *names): |     def getcalls(self, names): | ||||||
|         """ return list of ParsedCall instances matching the given eventname. """ |         """ return list of ParsedCall instances matching the given eventname. """ | ||||||
|         if len(names) == 1 and isinstance(names, str): |         return self.hookrecorder.getcalls(names) | ||||||
|             names = names.split() |  | ||||||
|         l = [] |  | ||||||
|         for name in names: |  | ||||||
|             if self.callrecorder.recordsmethod("pytest_" + name): |  | ||||||
|                 name = "pytest_" + name |  | ||||||
|             if self.callrecorder.recordsmethod(name): |  | ||||||
|                 l.extend(self.callrecorder.getcalls(name)) |  | ||||||
|         return l |  | ||||||
| 
 | 
 | ||||||
|     # functionality for test reports  |     # functionality for test reports  | ||||||
| 
 | 
 | ||||||
|     def getreports(self, names="itemtestreport collectreport"): |     def getreports(self, names="pytest_itemtestreport pytest_collectreport"): | ||||||
|         names = [("pytest_" + x) for x in names.split()] |         return [x.rep for x in self.getcalls(names)] | ||||||
|         l = [] |  | ||||||
|         for call in self.getcalls(*names): |  | ||||||
|             l.append(call.rep) |  | ||||||
|         return l  |  | ||||||
| 
 | 
 | ||||||
|     def matchreport(self, inamepart="", names="itemtestreport collectreport"): |     def matchreport(self, inamepart="", names="pytest_itemtestreport pytest_collectreport"): | ||||||
|         """ return a testreport whose dotted import path matches """ |         """ return a testreport whose dotted import path matches """ | ||||||
|         l = [] |         l = [] | ||||||
|         for rep in self.getreports(names=names): |         for rep in self.getreports(names=names): | ||||||
|  | @ -346,21 +318,17 @@ class EventRecorder(object): | ||||||
|                              inamepart, l)) |                              inamepart, l)) | ||||||
|         return l[0] |         return l[0] | ||||||
| 
 | 
 | ||||||
|     def getfailures(self, names='itemtestreport collectreport'): |     def getfailures(self, names='pytest_itemtestreport pytest_collectreport'): | ||||||
|         l = [] |         return [rep for rep in self.getreports(names) if rep.failed] | ||||||
|         for call in self.getcalls(*names.split()): |  | ||||||
|             if call.rep.failed: |  | ||||||
|                 l.append(call.rep) |  | ||||||
|         return l |  | ||||||
| 
 | 
 | ||||||
|     def getfailedcollections(self): |     def getfailedcollections(self): | ||||||
|         return self.getfailures('collectreport') |         return self.getfailures('pytest_collectreport') | ||||||
| 
 | 
 | ||||||
|     def listoutcomes(self): |     def listoutcomes(self): | ||||||
|         passed = [] |         passed = [] | ||||||
|         skipped = [] |         skipped = [] | ||||||
|         failed = [] |         failed = [] | ||||||
|         for rep in self.getreports("itemtestreport"): |         for rep in self.getreports("pytest_itemtestreport"): | ||||||
|             if rep.passed:  |             if rep.passed:  | ||||||
|                 passed.append(rep)  |                 passed.append(rep)  | ||||||
|             elif rep.skipped:  |             elif rep.skipped:  | ||||||
|  | @ -379,15 +347,15 @@ class EventRecorder(object): | ||||||
|         assert failed == len(realfailed) |         assert failed == len(realfailed) | ||||||
| 
 | 
 | ||||||
|     def clear(self): |     def clear(self): | ||||||
|         self.callrecorder.calls[:] = [] |         self.hookrecorder.calls[:] = [] | ||||||
| 
 | 
 | ||||||
|     def unregister(self): |     def unregister(self): | ||||||
|         self.comregistry.unregister(self) |         self.comregistry.unregister(self) | ||||||
|         self.callrecorder.finalize() |         self.hookrecorder.finish_recording() | ||||||
| 
 | 
 | ||||||
| def test_eventrecorder(testdir): | def test_reportrecorder(testdir): | ||||||
|     registry = py._com.Registry() |     registry = py._com.Registry() | ||||||
|     recorder = testdir.geteventrecorder(registry) |     recorder = testdir.getreportrecorder(registry) | ||||||
|     assert not recorder.getfailures() |     assert not recorder.getfailures() | ||||||
|     rep = runner.ItemTestReport(None, None) |     rep = runner.ItemTestReport(None, None) | ||||||
|     rep.passed = False |     rep.passed = False | ||||||
|  | @ -406,7 +374,7 @@ def test_eventrecorder(testdir): | ||||||
|     rep = runner.CollectReport(None, None) |     rep = runner.CollectReport(None, None) | ||||||
|     rep.passed = False |     rep.passed = False | ||||||
|     rep.failed = True |     rep.failed = True | ||||||
|     recorder.hook.pytest_itemtestreport(rep=rep) |     recorder.hook.pytest_collectreport(rep=rep) | ||||||
| 
 | 
 | ||||||
|     passed, skipped, failed = recorder.listoutcomes() |     passed, skipped, failed = recorder.listoutcomes() | ||||||
|     assert not passed and skipped and failed |     assert not passed and skipped and failed | ||||||
|  | @ -414,13 +382,13 @@ def test_eventrecorder(testdir): | ||||||
|     numpassed, numskipped, numfailed = recorder.countoutcomes() |     numpassed, numskipped, numfailed = recorder.countoutcomes() | ||||||
|     assert numpassed == 0 |     assert numpassed == 0 | ||||||
|     assert numskipped == 1 |     assert numskipped == 1 | ||||||
|     assert numfailed == 2 |     assert numfailed == 1 | ||||||
|  |     assert len(recorder.getfailedcollections()) == 1 | ||||||
| 
 | 
 | ||||||
|     recorder.unregister() |     recorder.unregister() | ||||||
|     recorder.clear()  |     recorder.clear()  | ||||||
|     assert not recorder.getfailures() |  | ||||||
|     recorder.hook.pytest_itemtestreport(rep=rep) |     recorder.hook.pytest_itemtestreport(rep=rep) | ||||||
|     assert not recorder.getfailures() |     py.test.raises(ValueError, "recorder.getfailures()") | ||||||
| 
 | 
 | ||||||
| class LineComp: | class LineComp: | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
|  |  | ||||||
|  | @ -208,7 +208,7 @@ class TestRunnerPlugin: | ||||||
|         item = testdir.getitem("""def test_func(): pass""") |         item = testdir.getitem("""def test_func(): pass""") | ||||||
|         plugin = RunnerPlugin() |         plugin = RunnerPlugin() | ||||||
|         plugin.pytest_configure(item.config) |         plugin.pytest_configure(item.config) | ||||||
|         sorter = testdir.geteventrecorder(item.config.pluginmanager) |         sorter = testdir.getreportrecorder(item.config.pluginmanager) | ||||||
|         plugin.pytest_item_setup_and_runtest(item) |         plugin.pytest_item_setup_and_runtest(item) | ||||||
|         rep = sorter.getcall("pytest_itemtestreport").rep |         rep = sorter.getcall("pytest_itemtestreport").rep | ||||||
|         assert rep.passed  |         assert rep.passed  | ||||||
|  | @ -248,7 +248,7 @@ class TestSetupEvents: | ||||||
|                 print "13" |                 print "13" | ||||||
|                 raise ValueError(25) |                 raise ValueError(25) | ||||||
|         """) |         """) | ||||||
|         rep = evrec.popcall(pytest_itemsetupreport).rep  |         rep = reprec.popcall(pytest_itemsetupreport).rep  | ||||||
|         assert rep.failed  |         assert rep.failed  | ||||||
|         assert rep.item == item  |         assert rep.item == item  | ||||||
|         assert not rep.passed |         assert not rep.passed | ||||||
|  |  | ||||||
|  | @ -20,10 +20,18 @@ class PluginManager(object): | ||||||
|             hookspecs=api.PluginHooks,  |             hookspecs=api.PluginHooks,  | ||||||
|             registry=self.comregistry)  |             registry=self.comregistry)  | ||||||
| 
 | 
 | ||||||
|     def register(self, plugin, name=None): |     def _getpluginname(self, plugin, name): | ||||||
|         if name is None: |         if name is None: | ||||||
|             name = getattr(plugin, '__name__', id(plugin)) |             if hasattr(plugin, '__name__'): | ||||||
|         if name not in self.impname2plugin: |                 name = plugin.__name__.split(".")[-1] | ||||||
|  |             else: | ||||||
|  |                 name = id(plugin)  | ||||||
|  |         return name  | ||||||
|  | 
 | ||||||
|  |     def register(self, plugin, name=None): | ||||||
|  |         assert not self.isregistered(plugin) | ||||||
|  |         name = self._getpluginname(plugin, name) | ||||||
|  |         assert name not in self.impname2plugin | ||||||
|         self.impname2plugin[name] = plugin |         self.impname2plugin[name] = plugin | ||||||
|         self.hook.pytest_plugin_registered(plugin=plugin) |         self.hook.pytest_plugin_registered(plugin=plugin) | ||||||
|         self.comregistry.register(plugin) |         self.comregistry.register(plugin) | ||||||
|  | @ -36,8 +44,8 @@ class PluginManager(object): | ||||||
|             if value == plugin: |             if value == plugin: | ||||||
|                 del self.impname2plugin[name] |                 del self.impname2plugin[name] | ||||||
| 
 | 
 | ||||||
|     def isregistered(self, plugin): |     def isregistered(self, plugin, name=None): | ||||||
|         return self.comregistry.isregistered(plugin) |         return self._getpluginname(plugin, name) in self.impname2plugin | ||||||
| 
 | 
 | ||||||
|     def getplugins(self): |     def getplugins(self): | ||||||
|         return list(self.comregistry) |         return list(self.comregistry) | ||||||
|  |  | ||||||
|  | @ -175,7 +175,7 @@ class TestCollectPluginHooks: | ||||||
|         assert "hello" in wascalled |         assert "hello" in wascalled | ||||||
|         assert "world" in wascalled |         assert "world" in wascalled | ||||||
|         # make sure the directories do not get double-appended  |         # make sure the directories do not get double-appended  | ||||||
|         colreports = sorter.getreports("collectreport") |         colreports = sorter.getreports("pytest_collectreport") | ||||||
|         names = [rep.colitem.name for rep in colreports] |         names = [rep.colitem.name for rep in colreports] | ||||||
|         assert names.count("hello") == 1 |         assert names.count("hello") == 1 | ||||||
| 
 | 
 | ||||||
|  | @ -214,8 +214,8 @@ class TestCustomConftests: | ||||||
|         """) |         """) | ||||||
|         testdir.mkdir("hello") |         testdir.mkdir("hello") | ||||||
|         sorter = testdir.inline_run(testdir.tmpdir) |         sorter = testdir.inline_run(testdir.tmpdir) | ||||||
|         names = [rep.colitem.name for rep in sorter.getreports("collectreport")] |         names = [rep.colitem.name for rep in sorter.getreports("pytest_collectreport")] | ||||||
|         assert 'hello' not in names  |         assert 'hello' not in names  | ||||||
|         evrec = testdir.inline_run(testdir.tmpdir, "--XX") |         reprec = testdir.inline_run(testdir.tmpdir, "--XX") | ||||||
|         names = [rep.colitem.name for rep in evrec.getreports("collectreport")] |         names = [rep.colitem.name for rep in reprec.getreports("pytest_collectreport")] | ||||||
|         assert 'hello' in names  |         assert 'hello' in names  | ||||||
|  |  | ||||||
|  | @ -74,7 +74,7 @@ class TestKeywordSelection: | ||||||
|             passed, skipped, failed = sorter.listoutcomes() |             passed, skipped, failed = sorter.listoutcomes() | ||||||
|             assert len(failed) == 1 |             assert len(failed) == 1 | ||||||
|             assert failed[0].colitem.name == name  |             assert failed[0].colitem.name == name  | ||||||
|             assert len(sorter.getcalls('deselected')) == 1 |             assert len(sorter.getcalls('pytest_deselected')) == 1 | ||||||
| 
 | 
 | ||||||
|         for keyword in ['test_one', 'est_on']: |         for keyword in ['test_one', 'est_on']: | ||||||
|             #yield check, keyword, 'test_one' |             #yield check, keyword, 'test_one' | ||||||
|  |  | ||||||
|  | @ -74,7 +74,7 @@ class TestBootstrapping: | ||||||
|         mod.pytest_plugins = "pytest_a" |         mod.pytest_plugins = "pytest_a" | ||||||
|         aplugin = testdir.makepyfile(pytest_a="#") |         aplugin = testdir.makepyfile(pytest_a="#") | ||||||
|         pluginmanager = PluginManager()  |         pluginmanager = PluginManager()  | ||||||
|         sorter = testdir.geteventrecorder(pluginmanager) |         sorter = testdir.getreportrecorder(pluginmanager) | ||||||
|         #syspath.prepend(aplugin.dirpath()) |         #syspath.prepend(aplugin.dirpath()) | ||||||
|         py.std.sys.path.insert(0, str(aplugin.dirpath())) |         py.std.sys.path.insert(0, str(aplugin.dirpath())) | ||||||
|         pluginmanager.consider_module(mod) |         pluginmanager.consider_module(mod) | ||||||
|  | @ -83,7 +83,7 @@ class TestBootstrapping: | ||||||
| 
 | 
 | ||||||
|         # check that it is not registered twice  |         # check that it is not registered twice  | ||||||
|         pluginmanager.consider_module(mod) |         pluginmanager.consider_module(mod) | ||||||
|         l = sorter.getcalls("plugin_registered") |         l = sorter.getcalls("pytest_plugin_registered") | ||||||
|         assert len(l) == 1 |         assert len(l) == 1 | ||||||
| 
 | 
 | ||||||
|     def test_consider_conftest_deprecated(self, testdir): |     def test_consider_conftest_deprecated(self, testdir): | ||||||
|  | @ -113,6 +113,19 @@ class TestBootstrapping: | ||||||
|         pp.unregister(a2) |         pp.unregister(a2) | ||||||
|         assert not pp.isregistered(a2) |         assert not pp.isregistered(a2) | ||||||
| 
 | 
 | ||||||
|  |     def test_register_imported_modules(self): | ||||||
|  |         pp = PluginManager() | ||||||
|  |         mod = py.std.new.module("x.y.pytest_hello") | ||||||
|  |         pp.register(mod) | ||||||
|  |         assert pp.isregistered(mod) | ||||||
|  |         assert pp.getplugins() == [mod] | ||||||
|  |         py.test.raises(AssertionError, "pp.register(mod)") | ||||||
|  |         mod2 = py.std.new.module("pytest_hello") | ||||||
|  |         #pp.register(mod2) # double registry  | ||||||
|  |         py.test.raises(AssertionError, "pp.register(mod)") | ||||||
|  |         #assert not pp.isregistered(mod2) | ||||||
|  |         assert pp.getplugins() == [mod] # does not actually modify plugins  | ||||||
|  | 
 | ||||||
|     def test_canonical_importname(self): |     def test_canonical_importname(self): | ||||||
|         for name in 'xyz', 'pytest_xyz', 'pytest_Xyz', 'Xyz': |         for name in 'xyz', 'pytest_xyz', 'pytest_Xyz', 'Xyz': | ||||||
|             impname = canonical_importname(name) |             impname = canonical_importname(name) | ||||||
|  |  | ||||||
|  | @ -19,7 +19,7 @@ class TestSetupStateFunctional: | ||||||
|             def test_func(): |             def test_func(): | ||||||
|                 pass |                 pass | ||||||
|         """) |         """) | ||||||
|         evrec = testdir.geteventrecorder(item.config) |         reprec = testdir.getreportrecorder(item.config) | ||||||
|         setup = SetupState() |         setup = SetupState() | ||||||
|         res = setup.do_setup(item) |         res = setup.do_setup(item) | ||||||
|         assert res |         assert res | ||||||
|  | @ -32,11 +32,11 @@ class TestSetupStateFunctional: | ||||||
|             def test_func(): |             def test_func(): | ||||||
|                 pass |                 pass | ||||||
|         """) |         """) | ||||||
|         evrec = testdir.geteventrecorder(item.config) |         reprec = testdir.getreportrecorder(item.config) | ||||||
|         setup = SetupState() |         setup = SetupState() | ||||||
|         res = setup.do_setup(item) |         res = setup.do_setup(item) | ||||||
|         assert not res |         assert not res | ||||||
|         rep = evrec.popcall(pytest_itemsetupreport).rep |         rep = reprec.popcall(pytest_itemsetupreport).rep | ||||||
|         assert rep.failed |         assert rep.failed | ||||||
|         assert not rep.skipped |         assert not rep.skipped | ||||||
|         assert rep.excrepr  |         assert rep.excrepr  | ||||||
|  | @ -51,14 +51,14 @@ class TestSetupStateFunctional: | ||||||
|                 print "13" |                 print "13" | ||||||
|                 raise ValueError(25) |                 raise ValueError(25) | ||||||
|         """) |         """) | ||||||
|         evrec = testdir.geteventrecorder(item.config) |         reprec = testdir.getreportrecorder(item.config) | ||||||
|         setup = SetupState() |         setup = SetupState() | ||||||
|         res = setup.do_setup(item) |         res = setup.do_setup(item) | ||||||
|         assert res  |         assert res  | ||||||
|         rep = evrec.popcall(pytest_itemsetupreport).rep |         rep = reprec.popcall(pytest_itemsetupreport).rep | ||||||
|         assert rep.passed |         assert rep.passed | ||||||
|         setup.do_teardown(item) |         setup.do_teardown(item) | ||||||
|         rep = evrec.popcall(pytest_itemsetupreport).rep |         rep = reprec.popcall(pytest_itemsetupreport).rep | ||||||
|         assert rep.item == item  |         assert rep.item == item  | ||||||
|         assert rep.failed  |         assert rep.failed  | ||||||
|         assert not rep.passed |         assert not rep.passed | ||||||
|  | @ -73,10 +73,10 @@ class TestSetupStateFunctional: | ||||||
|             def test_func(): |             def test_func(): | ||||||
|                 pass |                 pass | ||||||
|         """) |         """) | ||||||
|         evrec = testdir.geteventrecorder(item.config) |         reprec = testdir.getreportrecorder(item.config) | ||||||
|         setup = SetupState() |         setup = SetupState() | ||||||
|         setup.do_setup(item) |         setup.do_setup(item) | ||||||
|         rep = evrec.popcall(pytest_itemsetupreport).rep |         rep = reprec.popcall(pytest_itemsetupreport).rep | ||||||
|         assert not rep.failed |         assert not rep.failed | ||||||
|         assert rep.skipped |         assert rep.skipped | ||||||
|         assert rep.excrepr  |         assert rep.excrepr  | ||||||
|  | @ -84,18 +84,18 @@ class TestSetupStateFunctional: | ||||||
| 
 | 
 | ||||||
|     def test_runtest_ok(self, testdir): |     def test_runtest_ok(self, testdir): | ||||||
|         item = testdir.getitem("def test_func(): pass") |         item = testdir.getitem("def test_func(): pass") | ||||||
|         evrec = testdir.geteventrecorder(item.config) |         reprec = testdir.getreportrecorder(item.config) | ||||||
|         setup = SetupState() |         setup = SetupState() | ||||||
|         setup.do_fixture_and_runtest(item) |         setup.do_fixture_and_runtest(item) | ||||||
|         rep = evrec.popcall(pytest_itemtestreport).rep  |         rep = reprec.popcall(pytest_itemtestreport).rep  | ||||||
|         assert rep.passed  |         assert rep.passed  | ||||||
| 
 | 
 | ||||||
|     def test_runtest_fails(self, testdir): |     def test_runtest_fails(self, testdir): | ||||||
|         item = testdir.getitem("def test_func(): assert 0") |         item = testdir.getitem("def test_func(): assert 0") | ||||||
|         evrec = testdir.geteventrecorder(item.config) |         reprec = testdir.getreportrecorder(item.config) | ||||||
|         setup = SetupState() |         setup = SetupState() | ||||||
|         setup.do_fixture_and_runtest(item) |         setup.do_fixture_and_runtest(item) | ||||||
|         event = evrec.popcall(pytest_item_runtest_finished) |         event = reprec.popcall(pytest_item_runtest_finished) | ||||||
|         assert event.excinfo  |         assert event.excinfo  | ||||||
|          |          | ||||||
|      |      | ||||||
|  |  | ||||||
|  | @ -25,9 +25,9 @@ class SessionTests: | ||||||
|         assert failed[0].colitem.name == "test_one_one" |         assert failed[0].colitem.name == "test_one_one" | ||||||
|         assert failed[1].colitem.name == "test_other" |         assert failed[1].colitem.name == "test_other" | ||||||
|         assert failed[2].colitem.name == "test_two" |         assert failed[2].colitem.name == "test_two" | ||||||
|         itemstarted = sorter.getcalls("itemstart") |         itemstarted = sorter.getcalls("pytest_itemstart") | ||||||
|         assert len(itemstarted) == 4 |         assert len(itemstarted) == 4 | ||||||
|         colstarted = sorter.getcalls("collectstart") |         colstarted = sorter.getcalls("pytest_collectstart") | ||||||
|         assert len(colstarted) == 1 |         assert len(colstarted) == 1 | ||||||
|         col = colstarted[0].collector |         col = colstarted[0].collector | ||||||
|         assert isinstance(col, py.test.collect.Module) |         assert isinstance(col, py.test.collect.Module) | ||||||
|  | @ -130,7 +130,7 @@ class SessionTests: | ||||||
|             def test_one(): pass |             def test_one(): pass | ||||||
|         """) |         """) | ||||||
|         sorter = testdir.inline_run(testdir.tmpdir) |         sorter = testdir.inline_run(testdir.tmpdir) | ||||||
|         reports = sorter.getreports("collectreport") |         reports = sorter.getreports("pytest_collectreport") | ||||||
|         assert len(reports) == 1 |         assert len(reports) == 1 | ||||||
|         assert reports[0].skipped  |         assert reports[0].skipped  | ||||||
| 
 | 
 | ||||||
|  | @ -201,9 +201,9 @@ class TestNewSession(SessionTests): | ||||||
|         |         | ||||||
|         itemstarted = sorter.getcalls("pytest_itemstart") |         itemstarted = sorter.getcalls("pytest_itemstart") | ||||||
|         assert len(itemstarted) == 3 |         assert len(itemstarted) == 3 | ||||||
|         assert not sorter.getreports("itemtestreport")  |         assert not sorter.getreports("pytest_itemtestreport")  | ||||||
|         started = sorter.getcalls("pytest_collectstart") |         started = sorter.getcalls("pytest_collectstart") | ||||||
|         finished = sorter.getreports("collectreport") |         finished = sorter.getreports("pytest_collectreport") | ||||||
|         assert len(started) == len(finished)  |         assert len(started) == len(finished)  | ||||||
|         assert len(started) == 8  |         assert len(started) == 8  | ||||||
|         colfail = [x for x in finished if x.failed] |         colfail = [x for x in finished if x.failed] | ||||||
|  | @ -215,7 +215,7 @@ class TestNewSession(SessionTests): | ||||||
|         testdir.makepyfile(__init__="") |         testdir.makepyfile(__init__="") | ||||||
|         testdir.makepyfile(test_one="xxxx", test_two="yyyy") |         testdir.makepyfile(test_one="xxxx", test_two="yyyy") | ||||||
|         sorter = testdir.inline_run("-x", testdir.tmpdir) |         sorter = testdir.inline_run("-x", testdir.tmpdir) | ||||||
|         finished = sorter.getreports("collectreport") |         finished = sorter.getreports("pytest_collectreport") | ||||||
|         colfail = [x for x in finished if x.failed] |         colfail = [x for x in finished if x.failed] | ||||||
|         assert len(colfail) == 1 |         assert len(colfail) == 1 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -118,7 +118,7 @@ def test_func_generator_setup(testdir): | ||||||
|             yield check  |             yield check  | ||||||
|             assert x == [1] |             assert x == [1] | ||||||
|     """) |     """) | ||||||
|     rep = sorter.matchreport("test_one", names="itemtestreport")  |     rep = sorter.matchreport("test_one", names="pytest_itemtestreport")  | ||||||
|     assert rep.passed  |     assert rep.passed  | ||||||
|          |          | ||||||
| def test_method_setup_uses_fresh_instances(testdir): | def test_method_setup_uses_fresh_instances(testdir): | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue