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