[py-svn] pytest commit 8ee073e2945d: fix some more trial/unittest related bits, particularly allow todo/skip items,

commits-noreply at bitbucket.org commits-noreply at bitbucket.org
Thu Nov 25 15:55:53 CET 2010


# HG changeset patch -- Bitbucket.org
# Project pytest
# URL http://bitbucket.org/hpk42/pytest/overview
# User holger krekel <holger at merlinux.eu>
# Date 1290696539 -3600
# Node ID 8ee073e2945d44af241148a947144965fcbbcda7
# Parent  4853ee1ad7d54469c45e9158b05d8320df0669b0
fix some more trial/unittest related bits, particularly allow todo/skip items,
now we can run a large fraction of twisted's own test suite, mostly not those
that depend on the exact Failure() semantics (e.g. frame objects not being around
after gc.collect() but py.test kills them only slightly later anyway)

--- a/_pytest/unittest.py
+++ b/_pytest/unittest.py
@@ -37,6 +37,12 @@ class UnitTestCase(pytest.Class):
 class TestCaseFunction(pytest.Function):
     _excinfo = None
 
+    def __init__(self, name, parent):
+        super(TestCaseFunction, self).__init__(name, parent)
+        if hasattr(self._obj, 'todo'):
+            getattr(self._obj, 'im_func', self._obj).xfail = \
+                pytest.mark.xfail(reason=str(self._obj.todo))
+
     def setup(self):
         self._testcase = self.parent.obj(self.name)
         self._obj = getattr(self._testcase, self.name)
@@ -77,6 +83,18 @@ class TestCaseFunction(pytest.Function):
         self._addexcinfo(rawexcinfo)
     def addFailure(self, testcase, rawexcinfo):
         self._addexcinfo(rawexcinfo)
+    def addSkip(self, testcase, reason):
+        try:
+            pytest.skip(reason)
+        except pytest.skip.Exception:
+            self._addexcinfo(sys.exc_info())
+    def addExpectedFailure(self, testcase, rawexcinfo, reason):
+        try:
+            pytest.xfail(str(reason))
+        except pytest.xfail.Exception:
+            self._addexcinfo(sys.exc_info())
+    def addUnexpectedSuccess(self, testcase, reason):
+        pass
     def addSuccess(self, testcase):
         pass
     def stopTest(self, testcase):

--- a/testing/test_unittest.py
+++ b/testing/test_unittest.py
@@ -251,6 +251,17 @@ class TestTrialUnittest:
                     assert 0
                 def test_hello4(self):
                     pytest.xfail("i2wanto")
+                def test_trial_skip(self):
+                    pass
+                test_trial_skip.skip = "trialselfskip"
+
+                def test_trial_todo(self):
+                    assert 0
+                test_trial_todo.todo = "mytodo"
+
+                def test_trial_todo_success(self):
+                    pass
+                test_trial_todo_success.todo = "mytodo"
 
             class TC2(unittest.TestCase):
                 def setup_class(cls):
@@ -261,15 +272,16 @@ class TestTrialUnittest:
         result = testdir.runpytest("-rxs")
         assert result.ret == 0
         result.stdout.fnmatch_lines_random([
+            "*XFAIL*test_trial_todo*",
+            "*trialselfskip*",
             "*skip_in_setup_class*",
             "*iwanto*",
             "*i2wanto*",
             "*sys.version_info*",
             "*skip_in_method*",
-            "*3 skipped*2 xfail*",
+            "*4 skipped*3 xfail*1 xpass*",
         ])
 
-    @pytest.mark.xfail(reason="fijal needs add checks")
     def test_trial_error(self, testdir):
         testdir.makepyfile("""
             from twisted.trial.unittest import TestCase
@@ -307,7 +319,18 @@ class TestTrialUnittest:
                 # will crash both at test time and at teardown
         """)
         result = testdir.runpytest()
-        assert 0
+        result.stdout.fnmatch_lines([
+            "*ERRORS*",
+            "*DelayedCalls*",
+            "*test_four*",
+            "*NameError*crash*",
+            "*test_one*",
+            "*NameError*crash*",
+            "*test_three*",
+            "*DelayedCalls*",
+            "*test_two*",
+            "*crash*",
+        ])
 
     def test_trial_pdb(self, testdir):
         p = testdir.makepyfile("""



More information about the pytest-commit mailing list