[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