[py-svn] r40702 - in py/trunk/py/test: . testing

arigo at codespeak.net arigo at codespeak.net
Sun Mar 18 16:59:47 CET 2007


Author: arigo
Date: Sun Mar 18 16:59:45 2007
New Revision: 40702

Modified:
   py/trunk/py/test/collect.py
   py/trunk/py/test/item.py
   py/trunk/py/test/testing/test_setup_nested.py
Log:
(pedronis, arigo)

Add setup/teardown calls around generators, with the same semantics as
around functions and methods.


Modified: py/trunk/py/test/collect.py
==============================================================================
--- py/trunk/py/test/collect.py	(original)
+++ py/trunk/py/test/collect.py	Sun Mar 18 16:59:45 2007
@@ -442,7 +442,9 @@
                        Collector.Function.__get__(self)) # XXX for python 2.2 
     Function = property(Function)
 
-class Generator(PyCollectorMixin, Collector): 
+from py.__.test.item import FunctionMixin    # XXX import order issues :-(
+
+class Generator(FunctionMixin, PyCollectorMixin, Collector): 
     def run(self): 
         self._prepare()
         itemlist = self._name2items
@@ -468,13 +470,6 @@
             call, args = obj, ()
         return call, args 
 
-    def _getpathlineno(self): 
-        code = py.code.Code(self.obj) 
-        return code.path, code.firstlineno 
-
-    def _getsortvalue(self):  
-        return self._getpathlineno() 
-
 class DoctestFile(PyCollectorMixin, FSCollector): 
     def run(self):
         return [self.fspath.basename]

Modified: py/trunk/py/test/item.py
==============================================================================
--- py/trunk/py/test/item.py	(original)
+++ py/trunk/py/test/item.py	Sun Mar 18 16:59:45 2007
@@ -37,38 +37,15 @@
     def finishcapture(self): 
         self._config._finishcapture(self)
 
-class Function(Item): 
-    """ a Function Item is responsible for setting up  
-        and executing a Python callable test object.
+class FunctionMixin(object):
+    """ mixin for the code common to Function and Generator.
     """
-    _state = SetupState()
-    def __init__(self, name, parent, args=(), obj=_dummy, sort_value = None):
-        super(Function, self).__init__(name, parent) 
-        self._args = args
-        if obj is not _dummy: 
-            self._obj = obj 
-        self._sort_value = sort_value
-        
-    def __repr__(self): 
-        return "<%s %r>" %(self.__class__.__name__, self.name)
-
     def _getpathlineno(self):
         code = py.code.Code(self.obj) 
         return code.path, code.firstlineno 
 
     def _getsortvalue(self):  
-        if self._sort_value is None:
-            return self._getpathlineno()
-        return self._sort_value
-
-    def run(self):
-        """ setup and execute the underlying test function. """
-        self._state.prepare(self) 
-        self.execute(self.obj, *self._args)
-
-    def execute(self, target, *args):
-        """ execute the given test function. """
-        target(*args)
+        return self._getpathlineno() 
 
     def setup(self): 
         """ perform setup for this test function. """
@@ -92,6 +69,35 @@
         if meth is not None: 
             return meth(self.obj) 
 
+class Function(FunctionMixin, Item): 
+    """ a Function Item is responsible for setting up  
+        and executing a Python callable test object.
+    """
+    _state = SetupState()
+    def __init__(self, name, parent, args=(), obj=_dummy, sort_value = None):
+        super(Function, self).__init__(name, parent) 
+        self._args = args
+        if obj is not _dummy: 
+            self._obj = obj 
+        self._sort_value = sort_value
+        
+    def __repr__(self): 
+        return "<%s %r>" %(self.__class__.__name__, self.name)
+
+    def _getsortvalue(self):  
+        if self._sort_value is None:
+            return self._getpathlineno()
+        return self._sort_value
+
+    def run(self):
+        """ setup and execute the underlying test function. """
+        self._state.prepare(self) 
+        self.execute(self.obj, *self._args)
+
+    def execute(self, target, *args):
+        """ execute the given test function. """
+        target(*args)
+
 #
 # triggering specific outcomes while executing Items
 #

Modified: py/trunk/py/test/testing/test_setup_nested.py
==============================================================================
--- py/trunk/py/test/testing/test_setup_nested.py	(original)
+++ py/trunk/py/test/testing/test_setup_nested.py	Sun Mar 18 16:59:45 2007
@@ -42,14 +42,23 @@
 
 class TestSetupTeardownOnInstance(TestSimpleClassSetup):
     def setup_method(self, method):
-        self.clslevel.append(17)
+        self.clslevel.append(method.__name__)
 
     def teardown_method(self, method):
         x = self.clslevel.pop()
-        assert x == 17
+        assert x == method.__name__
 
     def test_setup(self):
-        assert self.clslevel[-1] == 17
+        assert self.clslevel[-1] == 'test_setup'
+
+    def test_generate(self):
+        assert self.clslevel[-1] == 'test_generate'
+        yield self.generated, 5
+        assert self.clslevel[-1] == 'test_generate'
+
+    def generated(self, value):
+        assert value == 5
+        assert self.clslevel[-1] == 'test_generate'
 
 def test_teardown_method_worked(): 
     assert not TestSetupTeardownOnInstance.clslevel 


More information about the py-svn mailing list