Rev 2373: Allow per-test-fixture feature requirements via 'requireFeature'.(Robert Collins) in file:///home/robertc/source/baz/test-prereqs/
Robert Collins
robertc at robertcollins.net
Thu Mar 22 21:43:45 GMT 2007
At file:///home/robertc/source/baz/test-prereqs/
------------------------------------------------------------
revno: 2373
revision-id: robertc at robertcollins.net-20070322214342-58nmsg7pvh6ghc8b
parent: robertc at robertcollins.net-20070322121903-8sqxzfr5eqvsx5yp
committer: Robert Collins <robertc at robertcollins.net>
branch nick: test-prereqs
timestamp: Fri 2007-03-23 08:43:42 +1100
message:
Allow per-test-fixture feature requirements via 'requireFeature'.(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 12:19:03 +0000
+++ b/bzrlib/tests/__init__.py 2007-03-22 21:43:42 +0000
@@ -231,11 +231,13 @@
setKeepLogfile()
def addError(self, test, err):
+ self.extractBenchmarkTime(test)
+ self._cleanupLogFile(test)
if isinstance(err[1], TestSkipped):
return self.addSkipped(test, err)
+ elif isinstance(err[1], UnavailableFeature):
+ return self.addNotSupported(test, err[1].args[0])
unittest.TestResult.addError(self, test, err)
- self._cleanupLogFile(test)
- self.extractBenchmarkTime(test)
self.error_count += 1
self.report_error(test, err)
if self.stop_early:
@@ -272,7 +274,6 @@
unittest.TestResult.addSuccess(self, test)
def addSkipped(self, test, skip_excinfo):
- self.extractBenchmarkTime(test)
self.report_skip(test, skip_excinfo)
# seems best to treat this as success from point-of-view of unittest
# -- it actually does nothing so it barely matters :)
@@ -323,14 +324,14 @@
ExtendedTestResult.__init__(self, stream, descriptions, verbosity,
bench_history, num_tests)
if pb is None:
- self.pb = ui.ui_factory.nested_progress_bar()
+ self.pb = self.ui.nested_progress_bar()
self._supplied_pb = False
else:
self.pb = pb
self._supplied_pb = True
self.pb.show_pct = False
self.pb.show_spinner = False
- self.pb.show_eta = False,
+ self.pb.show_eta = False,
self.pb.show_count = False
self.pb.show_bar = False
@@ -612,6 +613,13 @@
"""
+class UnavailableFeature(Exception):
+ """A feature required for this test was not available.
+
+ The feature should be used to construct the exception.
+ """
+
+
class CommandFailed(Exception):
pass
@@ -1129,6 +1137,14 @@
"""Shortcut that splits cmd into words, runs, and returns stdout"""
return self.run_bzr_captured(cmd.split(), retcode=retcode)[0]
+ def requireFeature(self, feature):
+ """This test requires a specific feature is available.
+
+ :raises UnavailableFeature: When feature is not available.
+ """
+ if not feature.available():
+ raise UnavailableFeature(feature)
+
def run_bzr_captured(self, argv, retcode=0, encoding=None, stdin=None,
working_dir=None):
"""Invoke bzr and return (stdout, stderr).
=== modified file 'bzrlib/tests/test_selftest.py'
--- a/bzrlib/tests/test_selftest.py 2007-03-22 12:19:03 +0000
+++ b/bzrlib/tests/test_selftest.py 2007-03-22 21:43:42 +0000
@@ -48,6 +48,7 @@
TestSkipped,
TestSuite,
TextTestRunner,
+ UnavailableFeature,
)
from bzrlib.tests.test_sftp_transport import TestCaseWithSFTPServer
from bzrlib.tests.TestUtil import _load_module_by_name
@@ -853,6 +854,26 @@
],
pb.calls[1:])
+ def test_unavailable_exception(self):
+ """An UnavailableFeature being raised should invoke addNotSupported."""
+ class InstrumentedTestResult(ExtendedTestResult):
+
+ def report_test_start(self, test): pass
+ def addNotSupported(self, test, feature):
+ self._call = test, feature
+ result = InstrumentedTestResult(None, None, None, None)
+ feature = Feature()
+ def test_function():
+ raise UnavailableFeature(feature)
+ test = unittest.FunctionTestCase(test_function)
+ test.run(result)
+ # it should invoke 'addNotSupported'.
+ self.assertEqual(2, len(result._call))
+ self.assertEqual(test, result._call[0])
+ self.assertEqual(feature, result._call[1])
+ # and not count as an error
+ self.assertEqual(0, result.error_count)
+
class TestRunner(TestCase):
@@ -991,15 +1012,11 @@
result = self.run_test_runner(runner, test)
lines = stream.getvalue().splitlines()
self.assertEqual([
- '',
- '----------------------------------------------------------------------',
- 'Ran 2 tests in 0.000s',
- '',
'OK',
"Missing feature 'Feature1' skipped 1 tests.",
"Missing feature 'Feature2' skipped 1 tests.",
],
- lines)
+ lines[-3:])
def test_bench_history(self):
# tests that the running the benchmark produces a history file
@@ -1170,6 +1187,20 @@
"""Self.knownFailure() should raise a KnownFailure exception."""
self.assertRaises(KnownFailure, self.knownFailure, "A Failure")
+ def test_requireFeature_available(self):
+ """self.requireFeature(available) is a no-op."""
+ class Available(Feature):
+ def _probe(self):return True
+ feature = Available()
+ self.requireFeature(feature)
+
+ def test_requireFeature_unavailable(self):
+ """self.requireFeature(unavailable) raises UnavailableFeature."""
+ class Unavailable(Feature):
+ def _probe(self):return False
+ feature = Unavailable()
+ self.assertRaises(UnavailableFeature, self.requireFeature, feature)
+
def test_run_no_parameters(self):
test = SampleTestCase('_test_pass')
test.run()
@@ -1430,3 +1461,11 @@
pass
feature = NamedFeature()
self.assertEqual('NamedFeature', str(feature))
+
+
+class TestUnavailableFeature(TestCase):
+
+ def test_access_feature(self):
+ feature = Feature()
+ exception = UnavailableFeature(feature)
+ self.assertIs(feature, exception.args[0])
More information about the bazaar-commits
mailing list