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