[py-svn] r63785 - in py/trunk/py/test: . dist/testing plugin testing
hpk at codespeak.net
hpk at codespeak.net
Tue Apr 7 12:48:58 CEST 2009
Author: hpk
Date: Tue Apr 7 12:48:57 2009
New Revision: 63785
Modified:
py/trunk/py/test/dist/testing/test_dsession.py
py/trunk/py/test/dist/testing/test_nodemanage.py
py/trunk/py/test/plugin/api.py
py/trunk/py/test/plugin/pytest_doctest.py
py/trunk/py/test/plugin/pytest_iocapture.py
py/trunk/py/test/plugin/pytest_pytester.py
py/trunk/py/test/plugin/pytest_unittest.py
py/trunk/py/test/runner.py
py/trunk/py/test/testing/test_collect.py
py/trunk/py/test/testing/test_pytestplugin.py
py/trunk/py/test/testing/test_session.py
py/trunk/py/test/testing/test_setup_functional.py
Log:
further renaming, streamlining the testing machinery and helpers.
Modified: py/trunk/py/test/dist/testing/test_dsession.py
==============================================================================
--- py/trunk/py/test/dist/testing/test_dsession.py (original)
+++ py/trunk/py/test/dist/testing/test_dsession.py Tue Apr 7 12:48:57 2009
@@ -181,7 +181,7 @@
session.loop_once(loopstate)
assert loopstate.colitems == [item2] # do not reschedule crash item
- testrep = evrec.getfirstnamed("itemtestreport")
+ testrep = evrec.matchreport(names="itemtestreport")
assert testrep.failed
assert testrep.colitem == item1
assert str(testrep.longrepr).find("crashed") != -1
@@ -204,9 +204,9 @@
session = DSession(item.config)
evrec = EventRecorder(session.bus)
- session.queueevent("NOPevent", 42)
+ session.queueevent("NOP", 42)
session.loop_once(session._initloopstate([]))
- assert evrec.getfirstnamed('NOPevent')
+ assert evrec.getcall('NOP')
def runthrough(self, item):
session = DSession(item.config)
@@ -274,10 +274,10 @@
evrec = EventRecorder(session.bus)
session.queueevent("itemtestreport", run(item, node))
session.loop_once(loopstate)
- assert not evrec.getfirstnamed("testnodedown")
+ assert not evrec.getcalls("testnodedown")
session.queueevent("testnodedown", node, None)
session.loop_once(loopstate)
- assert evrec.getfirstnamed('testnodedown') == node
+ assert evrec.getcall('testnodedown').node == node
def test_filteritems(self, testdir, EventRecorder):
modcol = testdir.getmodulecol("""
Modified: py/trunk/py/test/dist/testing/test_nodemanage.py
==============================================================================
--- py/trunk/py/test/dist/testing/test_nodemanage.py (original)
+++ py/trunk/py/test/dist/testing/test_nodemanage.py Tue Apr 7 12:48:57 2009
@@ -104,11 +104,11 @@
config = py.test.config._reparse([source, '--debug'])
assert config.option.debug
nodemanager = NodeManager(config, specs)
- evrec = EventRecorder(config.bus, debug=True)
+ sorter = EventRecorder(config.bus, debug=True)
nodemanager.setup_nodes(putevent=[].append)
for spec in nodemanager.gwmanager.specs:
- l = evrec.getnamed("trace")
- print evrec.events
+ l = sorter.getcalls("trace")
+ print sorter.events
assert l
nodemanager.teardown_nodes()
Modified: py/trunk/py/test/plugin/api.py
==============================================================================
--- py/trunk/py/test/plugin/api.py (original)
+++ py/trunk/py/test/plugin/api.py Tue Apr 7 12:48:57 2009
@@ -61,6 +61,9 @@
def pyevent(self, eventname, args, kwargs):
""" generically called for each notification event. """
+ def pyevent__NOP(self, *args, **kwargs):
+ """ the no-operation call. """
+
def pyevent__gateway_init(self, gateway):
""" called after a gateway has been initialized. """
Modified: py/trunk/py/test/plugin/pytest_doctest.py
==============================================================================
--- py/trunk/py/test/plugin/pytest_doctest.py (original)
+++ py/trunk/py/test/plugin/pytest_doctest.py Tue Apr 7 12:48:57 2009
@@ -108,9 +108,8 @@
>>> x == 1
False
""")
- events = testdir.inline_run(p)
- ev, = events.getnamed("itemtestreport")
- assert ev.failed
+ sorter = testdir.inline_run(p)
+ sorter.assertoutcome(failed=1)
def test_doctest_unexpected_exception(self, testdir):
from py.__.test.outcome import Failed
@@ -123,11 +122,9 @@
2
""")
sorter = testdir.inline_run(p)
- events = sorter.getnamed("itemtestreport")
- assert len(events) == 1
- ev, = events
- assert ev.failed
- assert ev.longrepr
+ call = sorter.getcall("itemtestreport")
+ assert call.rep.failed
+ assert call.rep.longrepr
# XXX
#testitem, = items
#excinfo = py.test.raises(Failed, "testitem.runtest()")
@@ -144,9 +141,8 @@
'''
""")
- events = testdir.inline_run(p, "--doctest-modules")
- ev, = events.getnamed("itemtestreport")
- assert ev.failed
+ sorter = testdir.inline_run(p, "--doctest-modules")
+ sorter.assertoutcome(failed=1)
def test_txtfile_failing(self, testdir):
testdir.plugins.append('pytest_doctest')
Modified: py/trunk/py/test/plugin/pytest_iocapture.py
==============================================================================
--- py/trunk/py/test/plugin/pytest_iocapture.py (original)
+++ py/trunk/py/test/plugin/pytest_iocapture.py Tue Apr 7 12:48:57 2009
@@ -37,8 +37,7 @@
out, err = stdcapture.reset()
assert out.startswith("42")
""")
- ev, = evrec.getnamed("itemtestreport")
- assert ev.passed
+ evrec.assertoutcome(passed=1)
def test_stdfd_functional(self, testdir):
testdir.plugins.append(IocapturePlugin())
@@ -49,6 +48,4 @@
out, err = stdcapturefd.reset()
assert out.startswith("42")
""")
- ev, = evrec.getnamed("itemtestreport")
- assert ev.passed
-
+ evrec.assertoutcome(passed=1)
Modified: py/trunk/py/test/plugin/pytest_pytester.py
==============================================================================
--- py/trunk/py/test/plugin/pytest_pytester.py (original)
+++ py/trunk/py/test/plugin/pytest_pytester.py Tue Apr 7 12:48:57 2009
@@ -296,12 +296,19 @@
return eventparser(*event.args, **event.kwargs)
raise KeyError("popevent: %r not found in %r" %(name, self.events))
- def getcalls(self, eventname):
+ def getcall(self, name):
+ l = self.getcalls(name)
+ assert len(l) == 1, (name, l)
+ return l[0]
+
+ def getcalls(self, *names):
""" return list of ParsedCall instances matching the given eventname. """
- method = self._getcallparser(eventname)
+ if len(names) == 1 and isinstance(names, str):
+ names = names.split()
l = []
for event in self.events:
- if event.name == eventname:
+ if event.name in names:
+ method = self._getcallparser(event.name)
pevent = method(*event.args, **event.kwargs)
l.append(pevent)
return l
@@ -318,35 +325,34 @@
exec code
return locals()[mname]
- def get(self, cls):
- l = []
- for event in self.events:
- try:
- value = event.args[0]
- except IndexError:
- continue
- else:
- if isinstance(value, cls):
- l.append(value)
- return l
+ # functionality for test reports
- def getnamed(self, *names):
+ def getreports(self, names="itemtestreport collectionreport"):
+ names = names.split()
l = []
- for event in self.events:
- if event.name in names:
- l.append(event.args[0])
+ for call in self.getcalls(*names):
+ l.append(call.rep)
return l
- def getfirstnamed(self, name):
- for event in self.events:
- if event.name == name:
- return event.args[0]
+ def matchreport(self, inamepart="", names="itemtestreport collectionreport"):
+ """ return a testreport whose dotted import path matches """
+ l = []
+ for rep in self.getreports(names=names):
+ if not inamepart or inamepart in rep.colitem.listnames():
+ l.append(rep)
+ if not l:
+ raise ValueError("could not find test report matching %r: no test reports at all!" %
+ (inamepart,))
+ if len(l) > 1:
+ raise ValueError("found more than one testreport matching %r: %s" %(
+ inamepart, l))
+ return l[0]
def getfailures(self, names='itemtestreport collectionreport'):
l = []
- for ev in self.getnamed(*names.split()):
- if ev.failed:
- l.append(ev)
+ for call in self.getcalls(*names.split()):
+ if call.rep.failed:
+ l.append(call.rep)
return l
def getfailedcollections(self):
@@ -356,13 +362,13 @@
passed = []
skipped = []
failed = []
- for ev in self.getnamed('itemtestreport'): # , 'collectionreport'):
- if ev.passed:
- passed.append(ev)
- elif ev.skipped:
- skipped.append(ev)
- elif ev.failed:
- failed.append(ev)
+ for rep in self.getreports("itemtestreport"):
+ if rep.passed:
+ passed.append(rep)
+ elif rep.skipped:
+ skipped.append(rep)
+ elif rep.failed:
+ failed.append(rep)
return passed, skipped, failed
def countoutcomes(self):
@@ -374,21 +380,6 @@
assert skipped == len(realskipped)
assert failed == len(realfailed)
- def getreport(self, inamepart):
- """ return a testreport whose dotted import path matches """
- __tracebackhide__ = True
- l = []
- for rep in self.get(runner.ItemTestReport):
- if inamepart in rep.colitem.listnames():
- l.append(rep)
- if not l:
- raise ValueError("could not find test report matching %r: no test reports at all!" %
- (inamepart,))
- if len(l) > 1:
- raise ValueError("found more than one testreport matching %r: %s" %(
- inamepart, l))
- return l[0]
-
def clear(self):
self.events[:] = []
@@ -407,9 +398,7 @@
bus.notify("itemtestreport", rep)
failures = recorder.getfailures()
assert failures == [rep]
- failures = recorder.get(runner.ItemTestReport)
- assert failures == [rep]
- failures = recorder.getnamed("itemtestreport")
+ failures = recorder.getfailures()
assert failures == [rep]
rep = runner.ItemTestReport(None, None)
Modified: py/trunk/py/test/plugin/pytest_unittest.py
==============================================================================
--- py/trunk/py/test/plugin/pytest_unittest.py (original)
+++ py/trunk/py/test/plugin/pytest_unittest.py Tue Apr 7 12:48:57 2009
@@ -84,8 +84,8 @@
self.assertEquals('foo', 'bar')
""")
sorter = testdir.inline_run(testpath)
- assert sorter.getreport("testpassing").passed
- assert sorter.getreport("test_failing").failed
+ assert sorter.matchreport("testpassing").passed
+ assert sorter.matchreport("test_failing").failed
def test_setup(testdir):
testpath = testdir.makepyfile(test_two="""
@@ -98,7 +98,7 @@
self.assertEquals(1, self.foo)
""")
sorter = testdir.inline_run(testpath)
- rep = sorter.getreport("test_setUp")
+ rep = sorter.matchreport("test_setUp")
assert rep.passed
def test_teardown(testdir):
Modified: py/trunk/py/test/runner.py
==============================================================================
--- py/trunk/py/test/runner.py (original)
+++ py/trunk/py/test/runner.py Tue Apr 7 12:48:57 2009
@@ -98,6 +98,7 @@
else:
out.line(str(longrepr))
+# XXX rename to runtest() report ?
class ItemTestReport(BaseReport):
""" Test Execution Report. """
failed = passed = skipped = False
@@ -138,11 +139,13 @@
self.longrepr = longrepr
+# XXX rename to collectreport
class CollectionReport(BaseReport):
""" Collection Report. """
skipped = failed = passed = False
def __init__(self, colitem, result, excinfo=None, outerr=None):
+ # XXX rename to collector
self.colitem = colitem
if not excinfo:
self.passed = True
Modified: py/trunk/py/test/testing/test_collect.py
==============================================================================
--- py/trunk/py/test/testing/test_collect.py (original)
+++ py/trunk/py/test/testing/test_collect.py Tue Apr 7 12:48:57 2009
@@ -163,11 +163,11 @@
testdir.plugins.append(Plugin())
testdir.mkdir("hello")
testdir.mkdir("world")
- evrec = testdir.inline_run()
+ sorter = testdir.inline_run()
assert "hello" in wascalled
assert "world" in wascalled
# make sure the directories do not get double-appended
- colreports = evrec.getnamed("collectionreport")
+ colreports = sorter.getreports(names="collectionreport")
names = [rep.colitem.name for rep in colreports]
assert names.count("hello") == 1
@@ -206,11 +206,11 @@
return parent.config.getvalue("XX")
""")
testdir.mkdir("hello")
- evrec = testdir.inline_run(testdir.tmpdir)
- names = [rep.colitem.name for rep in evrec.getnamed("collectionreport")]
+ sorter = testdir.inline_run(testdir.tmpdir)
+ names = [rep.colitem.name for rep in sorter.getreports("collectionreport")]
assert 'hello' not in names
evrec = testdir.inline_run(testdir.tmpdir, "--XX")
- names = [rep.colitem.name for rep in evrec.getnamed("collectionreport")]
+ names = [rep.colitem.name for rep in evrec.getreports("collectionreport")]
assert 'hello' in names
class TestCollectorReprs:
Modified: py/trunk/py/test/testing/test_pytestplugin.py
==============================================================================
--- py/trunk/py/test/testing/test_pytestplugin.py (original)
+++ py/trunk/py/test/testing/test_pytestplugin.py Tue Apr 7 12:48:57 2009
@@ -74,18 +74,17 @@
mod.pytest_plugins = "pytest_a"
aplugin = testdir.makepyfile(pytest_a="""class APlugin: pass""")
plugins = PytestPlugins()
- evrec = EventRecorder(plugins)
+ sorter = EventRecorder(plugins)
#syspath.prepend(aplugin.dirpath())
py.std.sys.path.insert(0, str(aplugin.dirpath()))
plugins.consider_module(mod)
- evlist = evrec.getnamed("plugin_registered")
- assert len(evlist) == 1
- assert evlist[0].__class__.__name__ == "APlugin"
+ call = sorter.getcall("plugin_registered")
+ assert call.plugin.__class__.__name__ == "APlugin"
# check that it is not registered twice
plugins.consider_module(mod)
- evlist = evrec.getnamed("plugin_registered")
- assert len(evlist) == 1
+ l = sorter.getcalls("plugin_registered")
+ assert len(l) == 1
def test_consider_conftest(self, testdir):
pp = PytestPlugins()
Modified: py/trunk/py/test/testing/test_session.py
==============================================================================
--- py/trunk/py/test/testing/test_session.py (original)
+++ py/trunk/py/test/testing/test_session.py Tue Apr 7 12:48:57 2009
@@ -130,9 +130,9 @@
def test_one(): pass
""")
sorter = testdir.inline_run(testdir.tmpdir)
- skips = sorter.getnamed("collectionreport")
- assert len(skips) == 1
- assert skips[0].skipped
+ reports = sorter.getreports("collectionreport")
+ assert len(reports) == 1
+ assert reports[0].skipped
class TestNewSession(SessionTests):
def test_pdb_run(self, testdir, monkeypatch):
@@ -146,7 +146,7 @@
l.append(args)
monkeypatch.setattr(py.__.test.custompdb, 'post_mortem', mypdb)
sorter = testdir.inline_run('--pdb', tfile)
- rep = sorter.getreport("test_usepdb")
+ rep = sorter.matchreport("test_usepdb")
assert rep.failed
assert len(l) == 1
tb = py.code.Traceback(l[0][0])
@@ -199,11 +199,11 @@
)
sorter = testdir.inline_run('--collectonly', p.dirpath())
- itemstarted = sorter.getnamed("itemstart")
+ itemstarted = sorter.getcalls("itemstart")
assert len(itemstarted) == 3
- assert not sorter.getnamed("itemtestreport")
+ assert not sorter.getreports("itemtestreport")
started = sorter.getcalls("collectionstart")
- finished = sorter.getnamed("collectionreport")
+ finished = sorter.getreports("collectionreport")
assert len(started) == len(finished)
assert len(started) == 8
colfail = [x for x in finished if x.failed]
@@ -215,7 +215,7 @@
testdir.makepyfile(__init__="")
testdir.makepyfile(test_one="xxxx", test_two="yyyy")
sorter = testdir.inline_run("-x", testdir.tmpdir)
- finished = sorter.getnamed("collectionreport")
+ finished = sorter.getreports("collectionreport")
colfail = [x for x in finished if x.failed]
assert len(colfail) == 1
Modified: py/trunk/py/test/testing/test_setup_functional.py
==============================================================================
--- py/trunk/py/test/testing/test_setup_functional.py (original)
+++ py/trunk/py/test/testing/test_setup_functional.py Tue Apr 7 12:48:57 2009
@@ -27,9 +27,9 @@
assert modlevel[0] == 42
assert not hasattr(test_modlevel, 'answer')
""")
- rep = sorter.getreport("test_modlevel")
+ rep = sorter.matchreport("test_modlevel")
assert rep.passed
- rep = sorter.getreport("test_module")
+ rep = sorter.matchreport("test_module")
assert rep.passed
def test_class_setup(testdir):
@@ -118,7 +118,7 @@
yield check
assert x == [1]
""")
- rep = sorter.getreport("test_one")
+ rep = sorter.matchreport("test_one", names="itemtestreport")
assert rep.passed
def test_method_setup_uses_fresh_instances(testdir):
More information about the pytest-commit
mailing list