Rev 2562: And overhaul RevisionStoreTestProviderAdapter too. in sftp://rookery/~/public_html/baz2.0/adapter-cleanup
Robert Collins
robertc at robertcollins.net
Thu Jun 28 07:44:39 BST 2007
At sftp://rookery/~/public_html/baz2.0/adapter-cleanup
------------------------------------------------------------
revno: 2562
revision-id: robertc at robertcollins.net-20070628064436-lyl4ygrlwe7xup2h
parent: robertc at robertcollins.net-20070628061619-mds81zx3hw1dpeqm
committer: Robert Collins <robertc at robertcollins.net>
branch nick: adapter-cleanup
timestamp: Thu 2007-06-28 16:44:36 +1000
message:
And overhaul RevisionStoreTestProviderAdapter too.
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/store/revision/__init__.py __init__.py-20060303014707-305238f06ae20dae
bzrlib/tests/revisionstore_implementations/__init__.py __init__.py-20060303020702-976c4186a0f99edb
bzrlib/tests/test_selftest.py test_selftest.py-20051202044319-c110a115d8c0456a
=== modified file 'NEWS'
--- a/NEWS 2007-06-28 06:16:19 +0000
+++ b/NEWS 2007-06-28 06:44:36 +0000
@@ -61,6 +61,8 @@
``bzrlib.tests.bzrdir_implementations``.
``bzrlib.versionedfile.InterVersionedFileTestProviderAdapter`` has moved
to ``bzrlib.tests.interversionedfile_implementations``.
+ ``bzrlib.store.revision.RevisionStoreTestProviderAdapter`` has moved to
+ ``bzrlib.tests.revisionstore_implementations``.
These changes are an API break in the testing infrastructure only.
(Robert Collins)
=== modified file 'bzrlib/store/revision/__init__.py'
--- a/bzrlib/store/revision/__init__.py 2007-02-10 02:48:43 +0000
+++ b/bzrlib/store/revision/__init__.py 2007-06-28 06:44:36 +0000
@@ -25,58 +25,14 @@
from bzrlib.lazy_import import lazy_import
lazy_import(globals(), """
-from copy import deepcopy
-import unittest
-
from bzrlib import (
errors,
osutils,
xml5,
)
+from bzrlib.trace import mutter
""")
-from bzrlib.trace import mutter
-
-
-class RevisionStoreTestProviderAdapter(object):
- """A tool to generate a suite testing multiple repository stores.
-
- This is done by copying the test once for each repository store
- and injecting the transport_server, transport_readonly_server,
- and revision-store-factory into each copy.
- Each copy is also given a new id() to make it easy to identify.
- """
-
- def __init__(self, transport_server, transport_readonly_server, factories):
- self._transport_server = transport_server
- self._transport_readonly_server = transport_readonly_server
- self._factories = factories
-
- def adapt(self, test):
- result = unittest.TestSuite()
- for factory in self._factories:
- new_test = deepcopy(test)
- new_test.transport_server = self._transport_server
- new_test.transport_readonly_server = self._transport_readonly_server
- new_test.store_factory = factory
- def make_new_test_id():
- new_id = "%s(%s)" % (new_test.id(), factory)
- return lambda: new_id
- new_test.id = make_new_test_id()
- result.addTest(new_test)
- return result
-
- @staticmethod
- def default_test_list():
- """Generate the default list of revision store permutations to test."""
- from bzrlib.store.revision.text import TextRevisionStoreTestFactory
- from bzrlib.store.revision.knit import KnitRevisionStoreFactory
- result = []
- # test the fallback InterVersionedFile from weave to annotated knits
- result.append(TextRevisionStoreTestFactory())
- result.append(KnitRevisionStoreFactory())
- return result
-
class RevisionStore(object):
"""A revision store stores revisions."""
=== modified file 'bzrlib/tests/revisionstore_implementations/__init__.py'
--- a/bzrlib/tests/revisionstore_implementations/__init__.py 2006-10-11 23:08:27 +0000
+++ b/bzrlib/tests/revisionstore_implementations/__init__.py 2007-06-28 06:44:36 +0000
@@ -24,16 +24,56 @@
rather than in tests/revisionstore_implementations/*.py.
"""
-from bzrlib.store.revision import RevisionStoreTestProviderAdapter
-
from bzrlib.tests import (
adapt_modules,
default_transport,
TestLoader,
+ TestScenarioApplier,
TestSuite,
)
+class RevisionStoreTestProviderAdapter(TestScenarioApplier):
+ """A tool to generate a suite testing multiple repository stores.
+
+ This is done by copying the test once for each repository store
+ and injecting the transport_server, transport_readonly_server,
+ and revision-store-factory into each copy.
+ Each copy is also given a new id() to make it easy to identify.
+ """
+
+ def __init__(self, transport_server, transport_readonly_server, factories):
+ self._transport_server = transport_server
+ self._transport_readonly_server = transport_readonly_server
+ self.scenarios = self.factories_to_scenarios(factories)
+
+ def factories_to_scenarios(self, factories):
+ """Transform the input factories to a list of scenarios.
+
+ :param factories: A list of factories.
+ """
+ result = []
+ for factory in factories:
+ scenario = (factory, {
+ "transport_server":self._transport_server,
+ "transport_readonly_server":self._transport_readonly_server,
+ "store_factory":factory,
+ })
+ result.append(scenario)
+ return result
+
+ @staticmethod
+ def default_test_list():
+ """Generate the default list of revision store permutations to test."""
+ from bzrlib.store.revision.text import TextRevisionStoreTestFactory
+ from bzrlib.store.revision.knit import KnitRevisionStoreFactory
+ result = []
+ # test the fallback InterVersionedFile from weave to annotated knits
+ result.append(TextRevisionStoreTestFactory())
+ result.append(KnitRevisionStoreFactory())
+ return result
+
+
def test_suite():
result = TestSuite()
test_revisionstore_implementations = [
=== modified file 'bzrlib/tests/test_selftest.py'
--- a/bzrlib/tests/test_selftest.py 2007-06-28 06:16:19 +0000
+++ b/bzrlib/tests/test_selftest.py 2007-06-28 06:44:36 +0000
@@ -381,7 +381,7 @@
class TestInterVersionedFileProviderAdapter(TestCase):
"""A group of tests that test the InterVersionedFile test adapter."""
- def test_adapted_tests(self):
+ def test_scenarios(self):
# check that constructor parameters are passed through to the adapted
# test.
from bzrlib.tests.interversionedfile_implementations \
@@ -409,12 +409,11 @@
class TestRevisionStoreProviderAdapter(TestCase):
"""A group of tests that test the RevisionStore test adapter."""
- def test_adapted_tests(self):
+ def test_scenarios(self):
# check that constructor parameters are passed through to the adapted
# test.
- from bzrlib.store.revision import RevisionStoreTestProviderAdapter
- input_test = TestRevisionStoreProviderAdapter(
- "test_adapted_tests")
+ from bzrlib.tests.revisionstore_implementations \
+ import RevisionStoreTestProviderAdapter
# revision stores need a store factory - i.e. RevisionKnit
#, a readonly and rw transport
# transport servers:
@@ -422,15 +421,16 @@
server2 = "b"
store_factories = ["c", "d"]
adapter = RevisionStoreTestProviderAdapter(server1, server2, store_factories)
- suite = adapter.adapt(input_test)
- tests = list(iter(suite))
- self.assertEqual(2, len(tests))
- self.assertEqual(tests[0].store_factory, store_factories[0][0])
- self.assertEqual(tests[0].transport_server, server1)
- self.assertEqual(tests[0].transport_readonly_server, server2)
- self.assertEqual(tests[1].store_factory, store_factories[1][0])
- self.assertEqual(tests[1].transport_server, server1)
- self.assertEqual(tests[1].transport_readonly_server, server2)
+ self.assertEqual([
+ ('c',
+ {'store_factory': 'c',
+ 'transport_readonly_server': 'b',
+ 'transport_server': 'a'}),
+ ('d',
+ {'store_factory': 'd',
+ 'transport_readonly_server': 'b',
+ 'transport_server': 'a'})],
+ adapter.scenarios)
class TestWorkingTreeProviderAdapter(TestCase):
More information about the bazaar-commits
mailing list