[py-svn] r51166 - in py/branch/event/py/test2: . testing
hpk at codespeak.net
hpk at codespeak.net
Fri Feb 1 11:01:26 CET 2008
Author: hpk
Date: Fri Feb 1 11:01:25 2008
New Revision: 51166
Modified:
py/branch/event/py/test2/collect.py
py/branch/event/py/test2/repevent.py
py/branch/event/py/test2/session.py
py/branch/event/py/test2/testing/test_session.py
Log:
refactor itemgen to produce these events:
* CollectionStart
* CollectionFailure
* CollectionFinish
and DeselectedTest (previous 'SkippedTryiter' aka "Skipped by keyword")
Modified: py/branch/event/py/test2/collect.py
==============================================================================
--- py/branch/event/py/test2/collect.py (original)
+++ py/branch/event/py/test2/collect.py Fri Feb 1 11:01:25 2008
@@ -169,19 +169,19 @@
newl.append(x.name)
return ".".join(newl)
- def _skipbykeyword(self, keyword):
- """ raise Skipped() exception if the given keyword
- matches for this collector.
+ def _skipbykeyword(self, keywordexpr):
+ """ return True if they given keyword expression means to
+ skip this collector/item.
"""
- if not keyword:
+ if not keywordexpr:
return
chain = self.listchain()
- for key in filter(None, keyword.split()):
+ for key in filter(None, keywordexpr.split()):
eor = key[:1] == '-'
if eor:
key = key[1:]
if not (eor ^ self._matchonekeyword(key, chain)):
- py.test2.skip("test not selected by keyword %r" %(keyword,))
+ return True
def _matchonekeyword(self, key, chain):
elems = key.split(".")
Modified: py/branch/event/py/test2/repevent.py
==============================================================================
--- py/branch/event/py/test2/repevent.py (original)
+++ py/branch/event/py/test2/repevent.py Fri Feb 1 11:01:25 2008
@@ -60,20 +60,20 @@
def __init__(self):
self.timeend = time.time()
-class SkippedTryiter(ReportEvent):
- def __init__(self, excinfo, item):
- self.excinfo = excinfo
- self.item = item
-
-class FailedTryiter(ReportEvent):
- def __init__(self, excinfo, item):
- self.excinfo = excinfo
+class DeselectedTest(ReportEvent):
+ def __init__(self, item, keywordexpr):
self.item = item
+ self.keywordexpr = keywordexpr
class CollectionStart(ReportEvent):
def __init__(self, collector):
self.collector = collector
+class CollectionFailure(ReportEvent):
+ def __init__(self, collector, excinfo):
+ self.excinfo = excinfo
+ self.collector = collector
+
class CollectionFinish(ReportEvent):
def __init__(self, collector):
self.collector = collector
Modified: py/branch/event/py/test2/session.py
==============================================================================
--- py/branch/event/py/test2/session.py (original)
+++ py/branch/event/py/test2/session.py Fri Feb 1 11:01:25 2008
@@ -15,41 +15,31 @@
and tells reporter about that
"""
-try:
- GeneratorExit
-except NameError:
- GeneratorExit = StopIteration # I think
+GeneratorExit = py.builtin.GeneratorExit
-def itemgen(session, colitems, keyword=None):
+def itemgen(session, colitems, keywordexpr=None):
hub = session.config.hub
stopitems = py.test2.collect.Item # XXX should be generator here as well
- while 1:
- if not colitems:
- break
+ while colitems:
next = colitems.pop(0)
if isinstance(next, stopitems):
- try:
- next._skipbykeyword(keyword)
- yield next
- except Skipped:
+ if next._skipbykeyword(keywordexpr):
+ hub.notify(repevent.DeselectedTest(next, keywordexpr))
if session.config.option.keyword_oneshot:
- keyword = None
- excinfo = py.code.ExceptionInfo()
- hub.notify(repevent.SkippedTryiter(excinfo, next))
+ keywordexpr = None
+ else:
+ yield next
else:
hub.notify(repevent.CollectionStart(next))
try:
cols = [next.join(x) for x in next.run()]
- for x in itemgen(session, cols, keyword):
+ for x in itemgen(session, cols, keywordexpr):
yield x
except (KeyboardInterrupt, SystemExit, GeneratorExit):
raise
except:
excinfo = py.code.ExceptionInfo()
- if excinfo.type is Skipped:
- hub.notify(repevent.SkippedTryiter(excinfo, next))
- else:
- hub.notify(repevent.FailedTryiter(excinfo, next))
+ hub.notify(repevent.CollectionFailure(next, excinfo))
hub.notify(repevent.CollectionFinish(next))
class AbstractSession(object):
Modified: py/branch/event/py/test2/testing/test_session.py
==============================================================================
--- py/branch/event/py/test2/testing/test_session.py (original)
+++ py/branch/event/py/test2/testing/test_session.py Fri Feb 1 11:01:25 2008
@@ -2,8 +2,7 @@
from setupdata import setup_module # sets up global 'tmpdir'
from py.__.test2.outcome import Skipped, Failed, Passed, Outcome
from py.__.test2.terminal.out import getout
-from py.__.test2.repevent import ReceivedItemOutcome, SkippedTryiter,\
- FailedTryiter
+from py.__.test2 import repevent
from test_session2 import getevents_runmain
@@ -19,7 +18,7 @@
)
def getoutcomes(all):
- return [i.outcome for i in all if isinstance(i, ReceivedItemOutcome)]
+ return [i.outcome for i in all if isinstance(i, repevent.ReceivedItemOutcome)]
def getpassed(all):
@@ -27,11 +26,11 @@
def getskipped(all):
return [i for i in getoutcomes(all) if i.skipped] + \
- [i for i in all if isinstance(i, SkippedTryiter)]
+ [i for i in all if isinstance(i, repevent.DeselectedTest)]
def getfailed(all):
return [i for i in getoutcomes(all) if i.excinfo] + \
- [i for i in all if isinstance(i, FailedTryiter)]
+ [i for i in all if isinstance(i, repevent.CollectionFailure)]
def test_conflict_options():
for spec in conflict_options:
@@ -78,7 +77,7 @@
'-s', '-k', keyword])
session = config._getsessionclass()(config)
all = getevents_runmain(session)
- outcomes = [i for i in all if isinstance(i, ReceivedItemOutcome)]
+ outcomes = [i for i in all if isinstance(i, repevent.ReceivedItemOutcome)]
assert len(getfailed(all)) == 1
assert outcomes[0].item.name == name
l = getskipped(all)
@@ -110,7 +109,7 @@
all = getevents_runmain(session)
print "keyword", repr(keyword)
l = getpassed(all)
- outcomes = [i for i in all if isinstance(i, ReceivedItemOutcome)]
+ outcomes = [i for i in all if isinstance(i, repevent.ReceivedItemOutcome)]
assert len(l) == 1
assert outcomes[0].item.name == 'test_2'
l = getskipped(all)
More information about the py-svn
mailing list