Rev 2371: Add operating system Feature model to bzrlib.tests to allow writing tests in file:///home/robertc/source/baz/test-prereqs/
Robert Collins
robertc at robertcollins.net
Thu Mar 22 10:54:55 GMT 2007
At file:///home/robertc/source/baz/test-prereqs/
------------------------------------------------------------
revno: 2371
revision-id: robertc at robertcollins.net-20070322105438-gt9qu83u9ml5aubo
parent: robertc at robertcollins.net-20070322100744-96m81fcue8hgsfnd
committer: Robert Collins <robertc at robertcollins.net>
branch nick: test-prereqs
timestamp: Thu 2007-03-22 21:54:38 +1100
message:
Add operating system Feature model to bzrlib.tests to allow writing tests
that can declare their needed dependencies and be cleanly disabled.
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 10:07:44 +0000
+++ b/bzrlib/tests/__init__.py 2007-03-22 10:54:38 +0000
@@ -2156,3 +2156,31 @@
if not quiet:
print 'delete directory:', i
shutil.rmtree(i)
+
+
+class Feature(object):
+ """An operating system Feature."""
+
+ def __init__(self):
+ self._available = None
+
+ def available(self):
+ """Is the feature available?
+
+ :return: True if the feature is available.
+ """
+ if self._available is None:
+ self._available = self._probe()
+ return self._available
+
+ def _probe(self):
+ """Implement this method in concrete features.
+
+ :return: True if the feature is available.
+ """
+ raise NotImplementedError
+
+ def __str__(self):
+ if getattr(self, 'feature_name', None):
+ return self.feature_name()
+ return self.__class__.__name__
=== modified file 'bzrlib/tests/test_selftest.py'
--- a/bzrlib/tests/test_selftest.py 2007-03-22 10:07:44 +0000
+++ b/bzrlib/tests/test_selftest.py 2007-03-22 10:54:38 +0000
@@ -39,6 +39,7 @@
from bzrlib.tests import (
ChrootedTestCase,
ExtendedTestResult,
+ Feature,
KnownFailure,
TestCase,
TestCaseInTempDir,
@@ -1296,3 +1297,36 @@
# a KnownFailure is an assertion error for compatability with unaware
# runners.
self.assertIsInstance(KnownFailure(""), AssertionError)
+
+
+class TestFeature(TestCase):
+
+ def test_caching(self):
+ """Feature._probe is called by the feature at most once."""
+ class InstrumentedFeature(Feature):
+ def __init__(self):
+ Feature.__init__(self)
+ self.calls = []
+ def _probe(self):
+ self.calls.append('_probe')
+ return False
+ feature = InstrumentedFeature()
+ feature.available()
+ self.assertEqual(['_probe'], feature.calls)
+ feature.available()
+ self.assertEqual(['_probe'], feature.calls)
+
+ def test_named_str(self):
+ """Feature.__str__ should thunk to feature_name()."""
+ class NamedFeature(Feature):
+ def feature_name(self):
+ return 'symlinks'
+ feature = NamedFeature()
+ self.assertEqual('symlinks', str(feature))
+
+ def test_default_str(self):
+ """Feature.__str__ should default to __class__.__name__."""
+ class NamedFeature(Feature):
+ pass
+ feature = NamedFeature()
+ self.assertEqual('NamedFeature', str(feature))
More information about the bazaar-commits
mailing list