/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/repository_implementations/__init__.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2007-07-02 07:06:39 UTC
  • mfrom: (2553.2.14 integration)
  • Revision ID: pqm@pqm.ubuntu.com-20070702070639-um9oyfoc2i6g8umv
(robertc) Reduce duplication in interface based testing by extracting a new class TestScenarioApplier.

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
from bzrlib import (
28
28
    repository,
29
29
    )
30
 
from bzrlib.repository import (
31
 
    RepositoryTestProviderAdapter,
32
 
    )
33
30
from bzrlib.repofmt import (
34
31
    weaverepo,
35
32
    )
36
33
from bzrlib.tests import (
37
34
                          adapt_modules,
38
35
                          default_transport,
 
36
                          TestScenarioApplier,
39
37
                          TestLoader,
40
38
                          TestSuite,
41
39
                          )
43
41
from bzrlib.transport.memory import MemoryServer
44
42
 
45
43
 
 
44
class RepositoryTestProviderAdapter(TestScenarioApplier):
 
45
    """A tool to generate a suite testing multiple repository formats at once.
 
46
 
 
47
    This is done by copying the test once for each transport and injecting
 
48
    the transport_server, transport_readonly_server, and bzrdir_format and
 
49
    repository_format classes into each copy. Each copy is also given a new id()
 
50
    to make it easy to identify.
 
51
    """
 
52
 
 
53
    def __init__(self, transport_server, transport_readonly_server, formats,
 
54
                 vfs_transport_factory=None):
 
55
        TestScenarioApplier.__init__(self)
 
56
        self._transport_server = transport_server
 
57
        self._transport_readonly_server = transport_readonly_server
 
58
        self._vfs_transport_factory = vfs_transport_factory
 
59
        self.scenarios = self.formats_to_scenarios(formats)
 
60
    
 
61
    def formats_to_scenarios(self, formats):
 
62
        """Transform the input formats to a list of scenarios.
 
63
 
 
64
        :param formats: A list of (repository_format, bzrdir_format).
 
65
        """
 
66
        result = []
 
67
        for repository_format, bzrdir_format in formats:
 
68
            scenario = (repository_format.__class__.__name__,
 
69
                {"transport_server":self._transport_server,
 
70
                 "transport_readonly_server":self._transport_readonly_server,
 
71
                 "bzrdir_format":bzrdir_format,
 
72
                 "repository_format":repository_format,
 
73
                 })
 
74
            # Only override the test's vfs_transport_factory if one was
 
75
            # specified, otherwise just leave the default in place.
 
76
            if self._vfs_transport_factory:
 
77
                scenario[1]['vfs_transport_factory'] = self._vfs_transport_factory
 
78
            result.append(scenario)
 
79
        return result
 
80
 
 
81
 
46
82
class TestCaseWithRepository(TestCaseWithBzrDir):
47
83
 
48
84
    def make_repository(self, relpath, format=None):
49
85
        if format is None:
50
86
            # Create a repository of the type we are trying to test.
51
87
            made_control = self.make_bzrdir(relpath)
52
 
            return self.repository_format.initialize(made_control)
 
88
            repo = self.repository_format.initialize(made_control)
 
89
            if getattr(self, "repository_to_test_repository", None):
 
90
                repo = self.repository_to_test_repository(repo)
 
91
            return repo
53
92
        else:
54
93
            return super(TestCaseWithRepository, self).make_repository(
55
94
                relpath, format)