Rev 2561: And overhaul InterVersionedFileTestProviderAdapter too. in sftp://rookery/~/public_html/baz2.0/adapter-cleanup

Robert Collins robertc at robertcollins.net
Thu Jun 28 07:16:23 BST 2007


At sftp://rookery/~/public_html/baz2.0/adapter-cleanup

------------------------------------------------------------
revno: 2561
revision-id: robertc at robertcollins.net-20070628061619-mds81zx3hw1dpeqm
parent: robertc at robertcollins.net-20070628060118-wpuciqx1xrjesces
committer: Robert Collins <robertc at robertcollins.net>
branch nick: adapter-cleanup
timestamp: Thu 2007-06-28 16:16:19 +1000
message:
  And overhaul InterVersionedFileTestProviderAdapter too.
modified:
  NEWS                           NEWS-20050323055033-4e00b5db738777ff
  bzrlib/tests/interversionedfile_implementations/__init__.py __init__.py-20060302012326-981af525594d02ed
  bzrlib/tests/test_selftest.py  test_selftest.py-20051202044319-c110a115d8c0456a
  bzrlib/versionedfile.py        versionedfile.py-20060222045106-5039c71ee3b65490
=== modified file 'NEWS'
--- a/NEWS	2007-06-28 06:01:18 +0000
+++ b/NEWS	2007-06-28 06:16:19 +0000
@@ -59,6 +59,8 @@
       ``bzrlib.tests.branch_implementations``.
       ``bzrlib.bzrdir.BzrDirTestProviderAdapter`` has moved to 
       ``bzrlib.tests.bzrdir_implementations``.
+      ``bzrlib.versionedfile.InterVersionedFileTestProviderAdapter`` has moved
+      to ``bzrlib.tests.interversionedfile_implementations``.
       These changes are an API break in the testing infrastructure only.
       (Robert Collins)
 

=== modified file 'bzrlib/tests/interversionedfile_implementations/__init__.py'
--- a/bzrlib/tests/interversionedfile_implementations/__init__.py	2006-10-11 23:08:27 +0000
+++ b/bzrlib/tests/interversionedfile_implementations/__init__.py	2007-06-28 06:16:19 +0000
@@ -24,16 +24,71 @@
 rather than in tests/interversionedfile_implementations/*.py.
 """
 
-from bzrlib.versionedfile import InterVersionedFileTestProviderAdapter
-                            
 from bzrlib.tests import (
                           adapt_modules,
                           default_transport,
                           TestLoader,
+                          TestScenarioApplier,
                           TestSuite,
                           )
 
 
+class InterVersionedFileTestProviderAdapter(TestScenarioApplier):
+    """A tool to generate a suite testing multiple inter versioned-file classes.
+
+    This is done by copying the test once for each InterVersionedFile provider
+    and injecting the transport_server, transport_readonly_server,
+    versionedfile_factory and versionedfile_factory_to classes 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, formats):
+        self._transport_server = transport_server
+        self._transport_readonly_server = transport_readonly_server
+        self.scenarios = self.formats_to_scenarios(formats)
+    
+    def formats_to_scenarios(self, formats):
+        """Transform the input formats to a list of scenarios.
+
+        :param formats: A list of tuples:
+            (interversionedfile_class, versionedfile_factory,
+             versionedfile_factory_to).
+        """
+        result = []
+        for (interversionedfile_class,
+             versionedfile_factory,
+             versionedfile_factory_to) in formats:
+            scenario = (interversionedfile_class.__name__, {
+                "transport_server":self._transport_server,
+                "transport_readonly_server":self._transport_readonly_server,
+                "interversionedfile_class":interversionedfile_class,
+                "versionedfile_factory":versionedfile_factory,
+                "versionedfile_factory_to":versionedfile_factory_to,
+                })
+            result.append(scenario)
+        return result
+
+    @staticmethod
+    def default_test_list():
+        """Generate the default list of interversionedfile permutations to test."""
+        from bzrlib.versionedfile import InterVersionedFile
+        from bzrlib.weave import WeaveFile
+        from bzrlib.knit import KnitVersionedFile
+        result = []
+        # test the fallback InterVersionedFile from annotated knits to weave
+        result.append((InterVersionedFile,
+                       KnitVersionedFile,
+                       WeaveFile))
+        for optimiser in InterVersionedFile._optimisers:
+            result.append((optimiser,
+                           optimiser._matching_file_from_factory,
+                           optimiser._matching_file_to_factory
+                           ))
+        # if there are specific combinations we want to use, we can add them 
+        # here.
+        return result
+
+
 def test_suite():
     result = TestSuite()
     test_interversionedfile_implementations = [

=== modified file 'bzrlib/tests/test_selftest.py'
--- a/bzrlib/tests/test_selftest.py	2007-06-28 06:01:18 +0000
+++ b/bzrlib/tests/test_selftest.py	2007-06-28 06:16:19 +0000
@@ -384,26 +384,26 @@
     def test_adapted_tests(self):
         # check that constructor parameters are passed through to the adapted
         # test.
-        from bzrlib.versionedfile import InterVersionedFileTestProviderAdapter
-        input_test = TestInterRepositoryProviderAdapter(
-            "test_adapted_tests")
+        from bzrlib.tests.interversionedfile_implementations \
+            import InterVersionedFileTestProviderAdapter
         server1 = "a"
         server2 = "b"
         formats = [(str, "C1", "C2"), (int, "D1", "D2")]
         adapter = InterVersionedFileTestProviderAdapter(server1, server2, formats)
-        suite = adapter.adapt(input_test)
-        tests = list(iter(suite))
-        self.assertEqual(2, len(tests))
-        self.assertEqual(tests[0].interversionedfile_class, formats[0][0])
-        self.assertEqual(tests[0].versionedfile_factory, formats[0][1])
-        self.assertEqual(tests[0].versionedfile_factory_to, formats[0][2])
-        self.assertEqual(tests[0].transport_server, server1)
-        self.assertEqual(tests[0].transport_readonly_server, server2)
-        self.assertEqual(tests[1].interversionedfile_class, formats[1][0])
-        self.assertEqual(tests[1].versionedfile_factory, formats[1][1])
-        self.assertEqual(tests[1].versionedfile_factory_to, formats[1][2])
-        self.assertEqual(tests[1].transport_server, server1)
-        self.assertEqual(tests[1].transport_readonly_server, server2)
+        self.assertEqual([
+            ('str',
+             {'interversionedfile_class':str,
+              'transport_readonly_server': 'b',
+              'transport_server': 'a',
+              'versionedfile_factory': 'C1',
+              'versionedfile_factory_to': 'C2'}),
+            ('int',
+             {'interversionedfile_class': int,
+              'transport_readonly_server': 'b',
+              'transport_server': 'a',
+              'versionedfile_factory': 'D1',
+              'versionedfile_factory_to': 'D2'})],
+            adapter.scenarios)
 
 
 class TestRevisionStoreProviderAdapter(TestCase):

=== modified file 'bzrlib/versionedfile.py'
--- a/bzrlib/versionedfile.py	2007-06-21 02:33:43 +0000
+++ b/bzrlib/versionedfile.py	2007-06-28 06:16:19 +0000
@@ -21,8 +21,6 @@
 
 from bzrlib.lazy_import import lazy_import
 lazy_import(globals(), """
-from copy import deepcopy
-import unittest
 
 from bzrlib import (
     errors,
@@ -684,55 +682,3 @@
                     else:
                         new_version_ids.add(version)
                 return new_version_ids
-
-
-class InterVersionedFileTestProviderAdapter(object):
-    """A tool to generate a suite testing multiple inter versioned-file classes.
-
-    This is done by copying the test once for each InterVersionedFile provider
-    and injecting the transport_server, transport_readonly_server,
-    versionedfile_factory and versionedfile_factory_to classes 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, formats):
-        self._transport_server = transport_server
-        self._transport_readonly_server = transport_readonly_server
-        self._formats = formats
-    
-    def adapt(self, test):
-        result = unittest.TestSuite()
-        for (interversionedfile_class,
-             versionedfile_factory,
-             versionedfile_factory_to) in self._formats:
-            new_test = deepcopy(test)
-            new_test.transport_server = self._transport_server
-            new_test.transport_readonly_server = self._transport_readonly_server
-            new_test.interversionedfile_class = interversionedfile_class
-            new_test.versionedfile_factory = versionedfile_factory
-            new_test.versionedfile_factory_to = versionedfile_factory_to
-            def make_new_test_id():
-                new_id = "%s(%s)" % (new_test.id(), interversionedfile_class.__name__)
-                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 interversionedfile permutations to test."""
-        from bzrlib.weave import WeaveFile
-        from bzrlib.knit import KnitVersionedFile
-        result = []
-        # test the fallback InterVersionedFile from annotated knits to weave
-        result.append((InterVersionedFile, 
-                       KnitVersionedFile,
-                       WeaveFile))
-        for optimiser in InterVersionedFile._optimisers:
-            result.append((optimiser,
-                           optimiser._matching_file_from_factory,
-                           optimiser._matching_file_to_factory
-                           ))
-        # if there are specific combinations we want to use, we can add them 
-        # here.
-        return result



More information about the bazaar-commits mailing list