[py-svn] r51525 - py/branch/event/py/test2/testing

hpk at codespeak.net hpk at codespeak.net
Fri Feb 15 14:00:42 CET 2008


Author: hpk
Date: Fri Feb 15 14:00:40 2008
New Revision: 51525

Modified:
   py/branch/event/py/test2/testing/suptest.py
   py/branch/event/py/test2/testing/test_outcome.py
   py/branch/event/py/test2/testing/test_session.py
   py/branch/event/py/test2/testing/test_setup_nested.py
Log:
* refactored setup tests 
* introduced some more helpers for testing examples 
* unskip generator setup test


Modified: py/branch/event/py/test2/testing/suptest.py
==============================================================================
--- py/branch/event/py/test2/testing/suptest.py	(original)
+++ py/branch/event/py/test2/testing/suptest.py	Fri Feb 15 14:00:40 2008
@@ -35,6 +35,11 @@
     sorter.session.main()
     return sorter 
 
+def events_from_runsource(source):
+    source = py.code.Source(source)
+    tfile = makeuniquepyfile(source) 
+    return events_from_cmdline([tfile])
+
 def events_from_session(session):
     sorter = EventSorter(session.config, session)
     session.main()
@@ -76,6 +81,12 @@
     def countoutcomes(self):
         return map(len, self.listoutcomes())
 
+    def assertoutcome(self, passed=0, skipped=0, failed=0):
+        realpassed, realskipped, realfailed = self.listoutcomes()
+        assert passed == len(realpassed)
+        assert skipped == len(realskipped)
+        assert failed == len(realfailed)
+
     def getfailedcollections(self):
         l = []
         for ev in self.get(repevent.CollectionFinish):
@@ -83,6 +94,19 @@
                l.append(ev) 
         return l
 
+    def getreport(self, inamepart): 
+        """ return a testreport whose dotted import path matches """
+        l = []
+        for rep in self.get(repevent.ItemTestReport):
+            dp = rep.dottedpath(self.config) 
+            if dp.find(inamepart) != -1:
+                l.append(rep)
+        if len(l) != 1:
+            raise ValueError("did not find exactly one testreport"
+                             "found" + str(l))
+        return l[0]
+            
+
 counter = py.std.itertools.count().next
 def makeuniquepyfile(source):
     dirname = "test_%d" %(counter(),)

Modified: py/branch/event/py/test2/testing/test_outcome.py
==============================================================================
--- py/branch/event/py/test2/testing/test_outcome.py	(original)
+++ py/branch/event/py/test2/testing/test_outcome.py	Fri Feb 15 14:00:40 2008
@@ -3,22 +3,6 @@
 import marshal
 import py
 
-def f1():
-    1
-    2
-    3
-    4
-    raise ValueError(42)
-
-def f2():
-    f1()
-
-def f3():
-    f2()
-
-def f4():
-    py.test.skip("argh!")
-
 class TestRaises:
     def test_raises(self):
         py.test2.raises(ValueError, "int('qwe')")

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 15 14:00:40 2008
@@ -79,11 +79,10 @@
         assert passed == skipped == 0
 
     def test_generator_yields_None(self): 
-        p = suptest.makeuniquepyfile("""
+        sorter = suptest.events_from_runsource(""" 
             def test_1():
                 yield None 
         """)
-        sorter = suptest.events_from_cmdline([p])
         failures = sorter.getfailedcollections()
         out = failures[0].excinfo.exconly()
         i = out.find('TypeError') 
@@ -120,12 +119,11 @@
             assert ev.item._testmycapture 
 
     def test_raises_output(self): 
-        p = suptest.makeuniquepyfile('''
+        sorter = suptest.events_from_runsource('''
             import py
             def test_raises_doesnt():
                 py.test2.raises(ValueError, int, "3")
         ''')
-        sorter = suptest.events_from_cmdline([p])
         passed, skipped, failed = sorter.listoutcomes()
         assert len(failed) == 1
         out = failed[0].exconly
@@ -134,7 +132,7 @@
             py.test2.fail("incorrect raises() output") 
 
     def test_order_of_execution(self): 
-        tfile = suptest.makeuniquepyfile("""
+        sorter = suptest.events_from_runsource("""
             l = []
             def test_1():
                 l.append(1)
@@ -153,7 +151,6 @@
                 def test_4(self):
                     assert self.reslist == [1,2,1,2,3]
         """)
-        sorter = suptest.events_from_cmdline([tfile])
         passed, skipped, failed = sorter.countoutcomes()
         assert failed == skipped == 0
         assert passed == 7
@@ -253,20 +250,18 @@
         assert failed[1].dottedpath(sorter.config).endswith("test_other")
         assert failed[2].dottedpath(sorter.config).endswith("test_two")
         
-    def test_capture_info_on_event(self):
-        tfile = suptest.makeuniquepyfile("""
+    def test_capture_on_function(self):
+        sorter = suptest.events_from_runsource("""
             def test_one():
-                print 1
-                print 2
-                print 3
+                print "passed" 
+            def test_two():
+                print "failed"
+                assert 0
         """)
-        sorter = suptest.events_from_cmdline([tfile]) 
-        passed, skipped, failed = sorter.listoutcomes()
-        assert len(skipped) == len(failed) == 0
-        assert len(passed) == 1
-        ev = passed[0]
-        py.test.skip("XXX get more info (e.g. capturing) available from events")
-        assert ev.outcome.passed
-        assert ev.outcome.stderr == ""
-        assert ev.outcome.stdout == "1\n2\n3\n"
-
+        testrep = sorter.getreport("test_one")
+        assert testrep.stdout.startswith("passed") 
+        assert not testrep.stderr
+
+        testrep = sorter.getreport("test_two")
+        assert testrep.stdout.startswith("failed") 
+        assert not testrep.stderr

Modified: py/branch/event/py/test2/testing/test_setup_nested.py
==============================================================================
--- py/branch/event/py/test2/testing/test_setup_nested.py	(original)
+++ py/branch/event/py/test2/testing/test_setup_nested.py	Fri Feb 15 14:00:40 2008
@@ -1,64 +1,93 @@
-
 #
 # test correct setup/teardowns at
 # module, class, and instance level
 
-modlevel = []
-def setup_module(module):
-    assert not modlevel
-    module.modlevel.append(42)
-
-def teardown_module(module):
-    modlevel.pop()
-
-def setup_function(function):
-    function.answer = 17
-
-def teardown_function(function):
-    del function.answer
-
-def test_modlevel():
-    assert modlevel[0] == 42
-    assert test_modlevel.answer == 17
-
-class TestSimpleClassSetup:
-    clslevel = []
-    def setup_class(cls):
-        cls.clslevel.append(23)
-
-    def teardown_class(cls):
-        cls.clslevel.pop()
-
-    def test_classlevel(self):
-        assert self.clslevel[0] == 23
-
-    def test_modulelevel(self):
-        print modlevel
-        assert modlevel == [42]
-
-class TestInheritedClassSetupStillWorks(TestSimpleClassSetup):
-    def test_classlevel_anothertime(self):
-        assert self.clslevel == [23]
-
-class TestSetupTeardownOnInstance(TestSimpleClassSetup):
-    def setup_method(self, method):
-        self.clslevel.append(method.__name__)
-
-    def teardown_method(self, method):
-        x = self.clslevel.pop()
-        assert x == method.__name__
-
-    def test_setup(self):
-        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'
+import suptest 
 
-def test_teardown_method_worked(): 
-    assert not TestSetupTeardownOnInstance.clslevel 
+def test_module_and_function_setup():
+    sorter = suptest.events_from_runsource(""" 
+        modlevel = []
+        def setup_module(module):
+            assert not modlevel
+            module.modlevel.append(42)
+
+        def teardown_module(module):
+            modlevel.pop()
+
+        def setup_function(function):
+            function.answer = 17
+
+        def teardown_function(function):
+            del function.answer
+
+        def test_modlevel():
+            assert modlevel[0] == 42
+            assert test_modlevel.answer == 17
+
+        class TestFromClass: 
+            def test_module(self):
+                assert modlevel[0] == 42
+                assert not hasattr(test_modlevel, 'answer') 
+    """)
+    sorter.assertoutcome(passed=2) 
+
+def test_class_setup():
+    sorter = suptest.events_from_runsource("""
+        class TestSimpleClassSetup:
+            clslevel = []
+            def setup_class(cls):
+                cls.clslevel.append(23)
+
+            def teardown_class(cls):
+                cls.clslevel.pop()
+
+            def test_classlevel(self):
+                assert self.clslevel[0] == 23
+
+        class TestInheritedClassSetupStillWorks(TestSimpleClassSetup):
+            def test_classlevel_anothertime(self):
+                assert self.clslevel == [23]
+
+        def test_cleanup():
+            assert not TestSimpleClassSetup.clslevel 
+            assert not TestInheritedClassSetupStillWorks.clslevel
+    """)
+    sorter.assertoutcome(passed=1+2+1)
+
+def test_method_setup():
+    sorter = suptest.events_from_runsource("""
+        class TestSetupMethod:
+            def setup_method(self, meth):
+                self.methsetup = meth 
+            def teardown_method(self, meth):
+                del self.methsetup 
+
+            def test_some(self):
+                assert self.methsetup == self.test_some 
+
+            def test_other(self):
+                assert self.methsetup == self.test_other
+    """)
+    sorter.assertoutcome(passed=2)
+       
+def test_generator_setup():
+    sorter = suptest.events_from_runsource("""
+        class TestSetupTeardownOnInstance: 
+            def setup_class(cls):
+                cls.classsetup = True 
+
+            def setup_method(self, method):
+                self.methsetup = method 
+
+            def test_generate(self):
+                assert self.classsetup 
+                assert self.methsetup == self.test_generate 
+                yield self.generated, 5
+                yield self.generated, 2
+
+            def generated(self, value):
+                assert self.classsetup 
+                assert self.methsetup == self.test_generate 
+                assert value == 5
+    """)
+    sorter.assertoutcome(passed=1, failed=1)



More information about the pytest-commit mailing list