Rev 2557: Treat InterRepositoryTestProviderAdapter like RepositoryTestProviderAdapter in sftp://rookery/~/public_html/baz2.0/adapter-cleanup

Robert Collins robertc at robertcollins.net
Thu Jun 28 05:25:19 BST 2007


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

------------------------------------------------------------
revno: 2557
revision-id: robertc at robertcollins.net-20070628042515-7uktaa31hsky2nw8
parent: robertc at robertcollins.net-20070628011643-ns42kcef2ymfxu28
committer: Robert Collins <robertc at robertcollins.net>
branch nick: adapter-cleanup
timestamp: Thu 2007-06-28 14:25:15 +1000
message:
  Treat InterRepositoryTestProviderAdapter like RepositoryTestProviderAdapter
modified:
  NEWS                           NEWS-20050323055033-4e00b5db738777ff
  bzrlib/repository.py           rev_storage.py-20051111201905-119e9401e46257e3
  bzrlib/tests/interrepository_implementations/__init__.py __init__.py-20060220054744-baf49a1f88f17b1a
  bzrlib/tests/repository_implementations/__init__.py __init__.py-20060131092037-9564957a7d4a841b
  bzrlib/tests/test_selftest.py  test_selftest.py-20051202044319-c110a115d8c0456a
=== modified file 'NEWS'
--- a/NEWS	2007-06-28 01:16:43 +0000
+++ b/NEWS	2007-06-28 04:25:15 +0000
@@ -49,8 +49,10 @@
   LIBRARY API BREAKS:
 
     * ``bzrlib.repository.RepositoryTestProviderAdapter`` has been moved
-      to ``bzrlib.tests.repository_implementations``. This is an API break
-      in the testing infrastructure only.
+      to ``bzrlib.tests.repository_implementations``. 
+      ``bzrlib.repository.InterRepositoryTestProviderAdapter`` has been moved
+      to ``bzrlib.tests.interrepository_implementations``.
+      These changes are an API break in the testing infrastructure only.
 
   INTERNALS:
 
@@ -63,7 +65,7 @@
       running the test suite and cuts the time by about half.
       (Andrew Bennetts, Martin Pool)
 
-    * Add scenarios as a public attribute on RepositoryTestAdapter to allow
+    * Add scenarios as a public attribute on the TestAdapter classes to allow
       modification of the generated scenarios before adaption and easier
       testing. (Robert Collins)
 

=== modified file 'bzrlib/repository.py'
--- a/bzrlib/repository.py	2007-06-27 22:27:09 +0000
+++ b/bzrlib/repository.py	2007-06-28 04:25:15 +0000
@@ -20,7 +20,6 @@
 lazy_import(globals(), """
 import re
 import time
-import unittest
 
 from bzrlib import (
     bzrdir,
@@ -1787,65 +1786,6 @@
 InterRepository.register_optimiser(InterRemoteRepository)
 
 
-class InterRepositoryTestProviderAdapter(object):
-    """A tool to generate a suite testing multiple inter repository formats.
-
-    This is done by copying the test once for each interrepo provider and injecting
-    the transport_server, transport_readonly_server, repository_format and 
-    repository_to_format 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 interrepo_class, repository_format, repository_format_to in self._formats:
-            from copy import deepcopy
-            new_test = deepcopy(test)
-            new_test.transport_server = self._transport_server
-            new_test.transport_readonly_server = self._transport_readonly_server
-            new_test.interrepo_class = interrepo_class
-            new_test.repository_format = repository_format
-            new_test.repository_format_to = repository_format_to
-            def make_new_test_id():
-                new_id = "%s(%s)" % (new_test.id(), interrepo_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 interrepo permutations to test."""
-        from bzrlib.repofmt import knitrepo, weaverepo
-        result = []
-        # test the default InterRepository between format 6 and the current 
-        # default format.
-        # XXX: robertc 20060220 reinstate this when there are two supported
-        # formats which do not have an optimal code path between them.
-        #result.append((InterRepository,
-        #               RepositoryFormat6(),
-        #               RepositoryFormatKnit1()))
-        for optimiser_class in InterRepository._optimisers:
-            format_to_test = optimiser_class._get_repo_format_to_test()
-            if format_to_test is not None:
-                result.append((optimiser_class,
-                               format_to_test, format_to_test))
-        # if there are specific combinations we want to use, we can add them 
-        # here.
-        result.append((InterModel1and2,
-                       weaverepo.RepositoryFormat5(),
-                       knitrepo.RepositoryFormatKnit3()))
-        result.append((InterKnit1and2,
-                       knitrepo.RepositoryFormatKnit1(),
-                       knitrepo.RepositoryFormatKnit3()))
-        return result
-
-
 class CopyConverter(object):
     """A repository conversion tool which just performs a copy of the content.
     

=== modified file 'bzrlib/tests/interrepository_implementations/__init__.py'
--- a/bzrlib/tests/interrepository_implementations/__init__.py	2007-02-06 06:27:24 +0000
+++ b/bzrlib/tests/interrepository_implementations/__init__.py	2007-06-28 04:25:15 +0000
@@ -26,17 +26,80 @@
 """
 
 from bzrlib.repository import (
-    InterRepositoryTestProviderAdapter,
-    )
-                            
+                               InterRepository,
+                               InterModel1and2,
+                               InterKnit1and2,
+                               )
 from bzrlib.tests import (
                           adapt_modules,
                           default_transport,
                           TestLoader,
+                          TestScenarioApplier,
                           TestSuite,
                           )
 
 
+class InterRepositoryTestProviderAdapter(TestScenarioApplier):
+    """A tool to generate a suite testing multiple inter repository formats.
+
+    This is done by copying the test once for each interrepo provider and injecting
+    the transport_server, transport_readonly_server, repository_format and 
+    repository_to_format 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):
+        TestScenarioApplier.__init__(self)
+        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:
+            (interrepo_class, repository_format, repository_format_to).
+        """
+        result = []
+        for interrepo_class, repository_format, repository_format_to in formats:
+            scenario = (interrepo_class.__name__,
+                {"transport_server":self._transport_server,
+                 "transport_readonly_server":self._transport_readonly_server,
+                 "repository_format":repository_format,
+                 "interrepo_class":interrepo_class,
+                 "repository_format_to":repository_format_to,
+                 })
+            result.append(scenario)
+        return result
+    
+    @staticmethod
+    def default_test_list():
+        """Generate the default list of interrepo permutations to test."""
+        from bzrlib.repofmt import knitrepo, weaverepo
+        result = []
+        # test the default InterRepository between format 6 and the current 
+        # default format.
+        # XXX: robertc 20060220 reinstate this when there are two supported
+        # formats which do not have an optimal code path between them.
+        #result.append((InterRepository,
+        #               RepositoryFormat6(),
+        #               RepositoryFormatKnit1()))
+        for optimiser_class in InterRepository._optimisers:
+            format_to_test = optimiser_class._get_repo_format_to_test()
+            if format_to_test is not None:
+                result.append((optimiser_class,
+                               format_to_test, format_to_test))
+        # if there are specific combinations we want to use, we can add them 
+        # here.
+        result.append((InterModel1and2,
+                       weaverepo.RepositoryFormat5(),
+                       knitrepo.RepositoryFormatKnit3()))
+        result.append((InterKnit1and2,
+                       knitrepo.RepositoryFormatKnit1(),
+                       knitrepo.RepositoryFormatKnit3()))
+        return result
+
+
 def test_suite():
     result = TestSuite()
     test_interrepository_implementations = [

=== modified file 'bzrlib/tests/repository_implementations/__init__.py'
--- a/bzrlib/tests/repository_implementations/__init__.py	2007-06-28 01:16:43 +0000
+++ b/bzrlib/tests/repository_implementations/__init__.py	2007-06-28 04:25:15 +0000
@@ -56,7 +56,6 @@
         self._transport_server = transport_server
         self._transport_readonly_server = transport_readonly_server
         self._vfs_transport_factory = vfs_transport_factory
-        self._formats = formats
         self.scenarios = self.formats_to_scenarios(formats)
     
     def formats_to_scenarios(self, formats):

=== modified file 'bzrlib/tests/test_selftest.py'
--- a/bzrlib/tests/test_selftest.py	2007-06-28 01:16:43 +0000
+++ b/bzrlib/tests/test_selftest.py	2007-06-28 04:25:15 +0000
@@ -357,26 +357,26 @@
     def test_adapted_tests(self):
         # check that constructor parameters are passed through to the adapted
         # test.
-        from bzrlib.repository import InterRepositoryTestProviderAdapter
-        input_test = TestInterRepositoryProviderAdapter(
-            "test_adapted_tests")
+        from bzrlib.tests.interrepository_implementations import \
+            InterRepositoryTestProviderAdapter
         server1 = "a"
         server2 = "b"
         formats = [(str, "C1", "C2"), (int, "D1", "D2")]
         adapter = InterRepositoryTestProviderAdapter(server1, server2, formats)
-        suite = adapter.adapt(input_test)
-        tests = list(iter(suite))
-        self.assertEqual(2, len(tests))
-        self.assertEqual(tests[0].interrepo_class, formats[0][0])
-        self.assertEqual(tests[0].repository_format, formats[0][1])
-        self.assertEqual(tests[0].repository_format_to, formats[0][2])
-        self.assertEqual(tests[0].transport_server, server1)
-        self.assertEqual(tests[0].transport_readonly_server, server2)
-        self.assertEqual(tests[1].interrepo_class, formats[1][0])
-        self.assertEqual(tests[1].repository_format, formats[1][1])
-        self.assertEqual(tests[1].repository_format_to, formats[1][2])
-        self.assertEqual(tests[1].transport_server, server1)
-        self.assertEqual(tests[1].transport_readonly_server, server2)
+        self.assertEqual([
+            ('str',
+             {'interrepo_class': str,
+              'repository_format': 'C1',
+              'repository_format_to': 'C2',
+              'transport_readonly_server': 'b',
+              'transport_server': 'a'}),
+            ('int',
+             {'interrepo_class': int,
+              'repository_format': 'D1',
+              'repository_format_to': 'D2',
+              'transport_readonly_server': 'b',
+              'transport_server': 'a'})],
+            adapter.formats_to_scenarios(formats))
 
 
 class TestInterVersionedFileProviderAdapter(TestCase):



More information about the bazaar-commits mailing list