24
24
rather than in tests/branch_implementations/*.py.
27
31
from bzrlib.branch import (BranchFormat,
28
BranchTestProviderAdapter,
31
from bzrlib.tests import (
34
from bzrlib.remote import RemoteBranchFormat, RemoteBzrDirFormat
35
from bzrlib.smart.server import (
36
SmartTCPServer_for_testing,
37
ReadonlySmartTCPServer_for_testing,
39
from bzrlib.tests.bzrdir_implementations.test_bzrdir import TestCaseWithBzrDir
40
from bzrlib.transport.memory import MemoryServer
43
class BranchTestProviderAdapter(tests.TestScenarioApplier):
44
"""A tool to generate a suite testing multiple branch formats at once.
46
This is done by copying the test once for each transport and injecting
47
the transport_server, transport_readonly_server, and branch_format
48
classes into each copy. Each copy is also given a new id() to make it
52
def __init__(self, transport_server, transport_readonly_server, formats,
53
vfs_transport_factory=None):
54
self._transport_server = transport_server
55
self._transport_readonly_server = transport_readonly_server
56
self.scenarios = self.formats_to_scenarios(formats)
58
def formats_to_scenarios(self, formats):
59
"""Transform the input formats to a list of scenarios.
61
:param formats: A list of (branch_format, bzrdir_format).
64
for branch_format, bzrdir_format in formats:
65
# some branches don't have separate format objects.
66
# so we have a conditional here to handle them.
67
scenario_name = getattr(branch_format, '__name__',
68
branch_format.__class__.__name__)
69
scenario = (scenario_name, {
70
"transport_server":self._transport_server,
71
"transport_readonly_server":self._transport_readonly_server,
72
"bzrdir_format":bzrdir_format,
73
"branch_format":branch_format,
75
result.append(scenario)
79
class TestCaseWithBranch(TestCaseWithBzrDir):
80
"""This helper will be adapted for each branch_implementation test."""
83
super(TestCaseWithBranch, self).setUp()
87
if self.branch is None:
88
self.branch = self.make_branch('')
91
def make_branch(self, relpath, format=None):
92
repo = self.make_repository(relpath, format=format)
93
# fixme RBC 20060210 this isnt necessarily a fixable thing,
94
# Skipped is the wrong exception to raise.
96
return self.branch_format.initialize(repo.bzrdir)
97
except errors.UninitializableFormat:
98
raise tests.TestSkipped('Uninitializable branch format')
100
def make_repository(self, relpath, shared=False, format=None):
101
made_control = self.make_bzrdir(relpath, format=format)
102
return made_control.create_repository(shared=shared)
104
def create_tree_with_merge(self):
105
"""Create a branch with a simple ancestry.
107
The graph should look like:
109
"rev-1" -> "rev-2" -> "rev-3";
110
"rev-1" -> "rev-1.1.1" -> "rev-3";
120
tree = self.make_branch_and_memory_tree('tree')
124
tree.commit('first', rev_id='rev-1')
125
tree.commit('second', rev_id='rev-1.1.1')
126
# Uncommit that last commit and switch to the other line
127
tree.branch.set_last_revision_info(1, 'rev-1')
128
tree.set_parent_ids(['rev-1'])
129
tree.commit('alt-second', rev_id='rev-2')
130
tree.set_parent_ids(['rev-2', 'rev-1.1.1'])
131
tree.commit('third', rev_id='rev-3')
139
result = tests.TestSuite()
41
140
test_branch_implementations = [
42
141
'bzrlib.tests.branch_implementations.test_bound_sftp',
43
142
'bzrlib.tests.branch_implementations.test_branch',
44
143
'bzrlib.tests.branch_implementations.test_break_lock',
144
'bzrlib.tests.branch_implementations.test_create_checkout',
145
'bzrlib.tests.branch_implementations.test_commit',
146
'bzrlib.tests.branch_implementations.test_get_revision_id_to_revno_map',
147
'bzrlib.tests.branch_implementations.test_hooks',
45
148
'bzrlib.tests.branch_implementations.test_http',
149
'bzrlib.tests.branch_implementations.test_last_revision_info',
46
150
'bzrlib.tests.branch_implementations.test_locking',
47
151
'bzrlib.tests.branch_implementations.test_parent',
48
152
'bzrlib.tests.branch_implementations.test_permissions',
49
153
'bzrlib.tests.branch_implementations.test_pull',
154
'bzrlib.tests.branch_implementations.test_push',
155
'bzrlib.tests.branch_implementations.test_revision_history',
156
'bzrlib.tests.branch_implementations.test_revision_id_to_revno',
157
'bzrlib.tests.branch_implementations.test_sprout',
158
'bzrlib.tests.branch_implementations.test_tags',
159
'bzrlib.tests.branch_implementations.test_uncommit',
50
160
'bzrlib.tests.branch_implementations.test_update',
162
# Generate a list of branch formats and their associated bzrdir formats to
164
combinations = [(format, format._matchingbzrdir) for format in
165
BranchFormat._formats.values() + _legacy_formats]
52
166
adapter = BranchTestProviderAdapter(
167
# None here will cause the default vfs transport server to be used.
54
169
# None here will cause a readonly decorator to be created
55
170
# by the TestCaseWithTransport.get_readonly_transport method.
57
[(format, format._matchingbzrdir) for format in
58
BranchFormat._formats.values() + _legacy_formats])
60
adapt_modules(test_branch_implementations, adapter, loader, result)
173
loader = tests.TestLoader()
174
tests.adapt_modules(test_branch_implementations, adapter, loader, result)
176
adapt_to_smart_server = BranchTestProviderAdapter(
177
SmartTCPServer_for_testing,
178
ReadonlySmartTCPServer_for_testing,
179
[(RemoteBranchFormat(), RemoteBzrDirFormat())],
182
tests.adapt_modules(test_branch_implementations,
183
adapt_to_smart_server,