Rev 5391: Add tests for when we should and shouldn't get a 'log' in the details. in http://bazaar.launchpad.net/~jameinel/bzr/2.3-filter-tests

John Arbash Meinel john at arbash-meinel.com
Fri Sep 24 17:44:55 BST 2010


At http://bazaar.launchpad.net/~jameinel/bzr/2.3-filter-tests

------------------------------------------------------------
revno: 5391
revision-id: john at arbash-meinel.com-20100924164438-1kbgh1yp263r8jqo
parent: john at arbash-meinel.com-20100827173647-rdsyq8ue9vctspv7
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: 2.3-filter-tests
timestamp: Fri 2010-09-24 11:44:38 -0500
message:
  Add tests for when we should and shouldn't get a 'log' in the details.
  
  I'm not 100% happy, because sometimes we test the formatted stuff, and sometimes
  we test the raw test object. But that seems to be how the apis work.
-------------- next part --------------
=== modified file 'bzrlib/tests/__init__.py'
--- a/bzrlib/tests/__init__.py	2010-08-27 17:36:47 +0000
+++ b/bzrlib/tests/__init__.py	2010-09-24 16:44:38 +0000
@@ -1637,13 +1637,24 @@
             self._do_skip(result, reason)
 
     @staticmethod
-    def _report_skip(self, result, e):
-        # We override the default _report_skip, just so we can disable
-        # including the log details, and then thunk to the original code.
-        # We have to do it before that code runs, because the log gets turned
-        # into 'reason' otherwise.
-        self._suppress_log()
-        super(TestCase, self)._report_skip(self, result, e)
+    def _report_skip(self, result, err):
+        """Override the default _report_skip.
+
+        We want to strip the 'log' detail. If we waint until _do_skip, it has
+        already been formatted into the 'reason' string, and we can't pull it
+        out again.
+        """
+        self._suppress_log()
+        super(TestCase, self)._report_skip(self, result, err)
+
+    @staticmethod
+    def _report_expected_failure(self, result, err):
+        """Strip the log.
+
+        See _report_skip for motivation.
+        """
+        self._suppress_log()
+        super(TestCase, self)._report_expected_failure(self, result, err)
 
     @staticmethod
     def _do_unsupported_or_skip(self, result, e):

=== modified file 'bzrlib/tests/test_selftest.py'
--- a/bzrlib/tests/test_selftest.py	2010-08-07 16:42:09 +0000
+++ b/bzrlib/tests/test_selftest.py	2010-09-24 16:44:38 +0000
@@ -67,7 +67,7 @@
     test_sftp_transport,
     TestUtil,
     )
-from bzrlib.trace import note
+from bzrlib.trace import note, mutter
 from bzrlib.transport import memory
 from bzrlib.version import _get_bzr_source_tree
 
@@ -1656,6 +1656,101 @@
         self.assertEqual('original', obj.test_attr)
 
 
+class TestTestCaseLogDetails(tests.TestCase):
+
+    def _run_test(self, a_test):
+        result = testtools.TestResult()
+        a_test.run(result)
+        return result
+
+    def test_fail_has_log(self):
+        class Test(tests.TestCase):
+            def test_fail(self):
+                mutter('this was a failing test')
+                self.fail('this test will fail')
+        result = self._run_test(Test('test_fail'))
+        self.assertEqual(1, len(result.failures))
+        result_content = result.failures[0][1]
+        self.assertContainsRe(result_content, 'Text attachment: log')
+        self.assertContainsRe(result_content, 'this was a failing test')
+
+    def test_error_has_log(self):
+        class Test(tests.TestCase):
+            def test_error(self):
+                mutter('this test errored')
+                raise RuntimeError('gotcha')
+        result = self._run_test(Test('test_error'))
+        self.assertEqual(1, len(result.errors))
+        result_content = result.errors[0][1]
+        self.assertContainsRe(result_content, 'Text attachment: log')
+        self.assertContainsRe(result_content, 'this test errored')
+
+    def test_skip_has_no_log(self):
+        class Test(tests.TestCase):
+            def test_skip(self):
+                mutter('this test will be skipped')
+                raise tests.TestSkipped('reason')
+        result = self._run_test(Test('test_skip'))
+        self.assertEqual(['reason'], result.skip_reasons.keys())
+        skips = result.skip_reasons['reason']
+        self.assertEqual(1, len(skips))
+        test = skips[0]
+        self.assertFalse('log' in test.getDetails())
+
+    def test_missing_feature_has_no_log(self):
+        class MissingFeature(tests.Feature):
+            def _probe(self):
+                return False
+        feature = MissingFeature()
+        class Test(tests.TestCase):
+            def test_missing_feature(self):
+                mutter('missing the feature')
+                self.requireFeature(feature)
+        # testtools doesn't know about addNotSupported, so it just gets
+        # considered as a skip
+        result = self._run_test(Test('test_missing_feature'))
+        self.assertEqual([feature], result.skip_reasons.keys())
+        skips = result.skip_reasons[feature]
+        self.assertEqual(1, len(skips))
+        test = skips[0]
+        self.assertFalse('log' in test.getDetails())
+
+    def test_xfail_has_no_log(self):
+        class Test(tests.TestCase):
+            def test_xfail(self):
+                mutter('test with expected failure')
+                self.knownFailure('this_fails')
+        result = self._run_test(Test('test_xfail'))
+        self.assertEqual(1, len(result.expectedFailures))
+        result_content = result.expectedFailures[0][1]
+        self.assertNotContainsRe(result_content, 'Text attachment: log')
+        self.assertNotContainsRe(result_content, 'test with expected failure')
+
+    def test_unexpected_success_has_log(self):
+        class Test(tests.TestCase):
+            def test_unexpected_success(self):
+                mutter('test with unexpected success')
+                self.expectFailure('should_fail', lambda: None)
+        result = self._run_test(Test('test_unexpected_success'))
+        self.assertEqual(1, len(result.unexpectedSuccesses))
+        # Inconsistency, unexpectedSuccesses is a list of tests,
+        # expectedFailures is a list of reasons?
+        test = result.unexpectedSuccesses[0]
+        details = test.getDetails()
+        self.assertTrue('log' in details)
+
+    # def test_success_has_no_log(self):
+    #     # TODO: We need to test the Subunit implementation here
+    #     class Test(tests.TestCase):
+    #         def test_success(self):
+    #             mutter('this test succeeded')
+    #     result = self._run_test(Test('test_success'))
+    #     self.assertEqual(1, len(result.errors))
+    #     result_content = result.errors[0][1]
+    #     self.assertContainsRe(result_content, 'Text attachment: log')
+    #     self.assertContainsRe(result_content, 'this test errored')
+
+
 # NB: Don't delete this; it's not actually from 0.11!
 @deprecated_function(deprecated_in((0, 11, 0)))
 def sample_deprecated_function():



More information about the bazaar-commits mailing list