Rev 2370: Add support for calling addNotSupported on TestResults to bzr TestCase's in file:///home/robertc/source/baz/test-prereqs/

Robert Collins robertc at robertcollins.net
Thu Mar 22 10:08:46 GMT 2007


At file:///home/robertc/source/baz/test-prereqs/

------------------------------------------------------------
revno: 2370
revision-id: robertc at robertcollins.net-20070322100744-96m81fcue8hgsfnd
parent: robertc at robertcollins.net-20070322090459-q0gjq21qgrj453hf
committer: Robert Collins <robertc at robertcollins.net>
branch nick: test-prereqs
timestamp: Thu 2007-03-22 21:07:44 +1100
message:
  Add support for calling addNotSupported on TestResults to bzr TestCase's
  when _test_needs_features contains unavailable features. (Robert Collins)
modified:
  bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
  bzrlib/tests/test_selftest.py  test_selftest.py-20051202044319-c110a115d8c0456a
=== modified file 'bzrlib/tests/__init__.py'
--- a/bzrlib/tests/__init__.py	2007-03-22 09:04:59 +0000
+++ b/bzrlib/tests/__init__.py	2007-03-22 10:07:44 +0000
@@ -1020,6 +1020,19 @@
         """This test has failed for some known reason."""
         raise KnownFailure(reason)
 
+    def run(self, result=None):
+        if result is None: result = self.defaultTestResult()
+        for feature in getattr(self, '_test_needs_features', []):
+            if not feature.available():
+                result.startTest(self)
+                if getattr(result, 'addNotSupported', None):
+                    result.addNotSupported(self, feature)
+                else:
+                    result.addSuccess(self)
+                result.stopTest(self)
+                return
+        return unittest.TestCase.run(self, result)
+
     def tearDown(self):
         self._runCleanups()
         unittest.TestCase.tearDown(self)

=== modified file 'bzrlib/tests/test_selftest.py'
--- a/bzrlib/tests/test_selftest.py	2007-03-22 09:04:59 +0000
+++ b/bzrlib/tests/test_selftest.py	2007-03-22 10:07:44 +0000
@@ -978,6 +978,12 @@
         self.assertEqual(log, test._log_contents)
 
 
+class SampleTestCase(TestCase):
+
+    def _test_pass(self):
+        pass
+
+
 class TestTestCase(TestCase):
     """Tests that test the core bzrlib TestCase."""
 
@@ -1063,6 +1069,63 @@
         """Self.knownFailure() should raise a KnownFailure exception."""
         self.assertRaises(KnownFailure, self.knownFailure, "A Failure")
 
+    def test_run_no_parameters(self):
+        test = SampleTestCase('_test_pass')
+        test.run()
+    
+    def test_run_enabled_unittest_result(self):
+        """Test we revert to regular behaviour when the test is enabled."""
+        test = SampleTestCase('_test_pass')
+        class EnabledFeature(object):
+            def available(self):
+                return True
+        test._test_needs_features = [EnabledFeature()]
+        result = unittest.TestResult()
+        test.run(result)
+        self.assertEqual(1, result.testsRun)
+        self.assertEqual([], result.errors)
+        self.assertEqual([], result.failures)
+
+    def test_run_disabled_unittest_result(self):
+        """Test our compatability for disabled tests with unittest results."""
+        test = SampleTestCase('_test_pass')
+        class DisabledFeature(object):
+            def available(self):
+                return False
+        test._test_needs_features = [DisabledFeature()]
+        result = unittest.TestResult()
+        test.run(result)
+        self.assertEqual(1, result.testsRun)
+        self.assertEqual([], result.errors)
+        self.assertEqual([], result.failures)
+
+    def test_run_disabled_supporting_result(self):
+        """Test disabled tests behaviour with support aware results."""
+        test = SampleTestCase('_test_pass')
+        class DisabledFeature(object):
+            def available(self):
+                return False
+        the_feature = DisabledFeature()
+        test._test_needs_features = [the_feature]
+        class InstrumentedTestResult(unittest.TestResult):
+            def __init__(self):
+                unittest.TestResult.__init__(self)
+                self.calls = []
+            def startTest(self, test):
+                self.calls.append(('startTest', test))
+            def stopTest(self, test):
+                self.calls.append(('stopTest', test))
+            def addNotSupported(self, test, feature):
+                self.calls.append(('addNotSupported', test, feature))
+        result = InstrumentedTestResult()
+        test.run(result)
+        self.assertEqual([
+            ('startTest', test),
+            ('addNotSupported', test, the_feature),
+            ('stopTest', test),
+            ],
+            result.calls)
+
 
 @symbol_versioning.deprecated_function(zero_eleven)
 def sample_deprecated_function():



More information about the bazaar-commits mailing list