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