150
150
# This test used to know about all the possible transports and the
151
151
# order they were returned but that seems overly brittle (mbp
153
input_test = TestTransportProviderAdapter(
154
"test_adapter_sets_transport_class")
155
from bzrlib.transport import TransportTestProviderAdapter
156
suite = TransportTestProviderAdapter().adapt(input_test)
157
tests = list(iter(suite))
158
self.assertTrue(len(tests) > 6)
153
from bzrlib.tests.test_transport_implementations \
154
import TransportTestProviderAdapter
155
scenarios = TransportTestProviderAdapter().scenarios
159
156
# there are at least that many builtin transports
161
self.assertTrue(issubclass(one_test.transport_class,
157
self.assertTrue(len(scenarios) > 6)
158
one_scenario = scenarios[0]
159
self.assertIsInstance(one_scenario[0], str)
160
self.assertTrue(issubclass(one_scenario[1]["transport_class"],
162
161
bzrlib.transport.Transport))
163
self.assertTrue(issubclass(one_test.transport_server,
162
self.assertTrue(issubclass(one_scenario[1]["transport_server"],
164
163
bzrlib.transport.Server))
167
166
class TestBranchProviderAdapter(TestCase):
168
167
"""A group of tests that test the branch implementation test adapter."""
170
def test_adapted_tests(self):
169
def test_constructor(self):
171
170
# check that constructor parameters are passed through to the adapted
173
from bzrlib.branch import BranchTestProviderAdapter
174
input_test = TestBranchProviderAdapter(
175
"test_adapted_tests")
172
from bzrlib.tests.branch_implementations import BranchTestProviderAdapter
178
175
formats = [("c", "C"), ("d", "D")]
179
176
adapter = BranchTestProviderAdapter(server1, server2, formats)
180
suite = adapter.adapt(input_test)
181
tests = list(iter(suite))
182
self.assertEqual(2, len(tests))
183
self.assertEqual(tests[0].branch_format, formats[0][0])
184
self.assertEqual(tests[0].bzrdir_format, formats[0][1])
185
self.assertEqual(tests[0].transport_server, server1)
186
self.assertEqual(tests[0].transport_readonly_server, server2)
187
self.assertEqual(tests[1].branch_format, formats[1][0])
188
self.assertEqual(tests[1].bzrdir_format, formats[1][1])
189
self.assertEqual(tests[1].transport_server, server1)
190
self.assertEqual(tests[1].transport_readonly_server, server2)
177
self.assertEqual(2, len(adapter.scenarios))
180
{'branch_format': 'c',
181
'bzrdir_format': 'C',
182
'transport_readonly_server': 'b',
183
'transport_server': 'a'}),
185
{'branch_format': 'd',
186
'bzrdir_format': 'D',
187
'transport_readonly_server': 'b',
188
'transport_server': 'a'})],
193
192
class TestBzrDirProviderAdapter(TestCase):
196
195
def test_adapted_tests(self):
197
196
# check that constructor parameters are passed through to the adapted
199
from bzrlib.bzrdir import BzrDirTestProviderAdapter
200
input_test = TestBzrDirProviderAdapter(
201
"test_adapted_tests")
198
from bzrlib.tests.bzrdir_implementations import BzrDirTestProviderAdapter
202
199
vfs_factory = "v"
205
202
formats = ["c", "d"]
206
203
adapter = BzrDirTestProviderAdapter(vfs_factory,
207
204
server1, server2, formats)
208
suite = adapter.adapt(input_test)
209
tests = list(iter(suite))
210
self.assertEqual(2, len(tests))
211
self.assertEqual(tests[0].bzrdir_format, formats[0])
212
self.assertEqual(tests[0].vfs_transport_factory, vfs_factory)
213
self.assertEqual(tests[0].transport_server, server1)
214
self.assertEqual(tests[0].transport_readonly_server, server2)
215
self.assertEqual(tests[1].bzrdir_format, formats[1])
216
self.assertEqual(tests[1].vfs_transport_factory, vfs_factory)
217
self.assertEqual(tests[1].transport_server, server1)
218
self.assertEqual(tests[1].transport_readonly_server, server2)
207
{'bzrdir_format': 'c',
208
'transport_readonly_server': 'b',
209
'transport_server': 'a',
210
'vfs_transport_factory': 'v'}),
212
{'bzrdir_format': 'd',
213
'transport_readonly_server': 'b',
214
'transport_server': 'a',
215
'vfs_transport_factory': 'v'})],
221
219
class TestRepositoryProviderAdapter(TestCase):
222
220
"""A group of tests that test the repository implementation test adapter."""
224
def test_adapted_tests(self):
225
# check that constructor parameters are passed through to the adapted
227
from bzrlib.repository import RepositoryTestProviderAdapter
228
input_test = TestRepositoryProviderAdapter(
229
"test_adapted_tests")
222
def test_constructor(self):
223
# check that constructor parameters are passed through to the
225
from bzrlib.tests.repository_implementations import RepositoryTestProviderAdapter
232
228
formats = [("c", "C"), ("d", "D")]
233
229
adapter = RepositoryTestProviderAdapter(server1, server2, formats)
234
suite = adapter.adapt(input_test)
235
tests = list(iter(suite))
236
self.assertEqual(2, len(tests))
237
self.assertEqual(tests[0].bzrdir_format, formats[0][1])
238
self.assertEqual(tests[0].repository_format, formats[0][0])
239
self.assertEqual(tests[0].transport_server, server1)
240
self.assertEqual(tests[0].transport_readonly_server, server2)
241
self.assertEqual(tests[1].bzrdir_format, formats[1][1])
242
self.assertEqual(tests[1].repository_format, formats[1][0])
243
self.assertEqual(tests[1].transport_server, server1)
244
self.assertEqual(tests[1].transport_readonly_server, server2)
232
{'bzrdir_format': 'C',
233
'repository_format': 'c',
234
'transport_readonly_server': 'b',
235
'transport_server': 'a'}),
237
{'bzrdir_format': 'D',
238
'repository_format': 'd',
239
'transport_readonly_server': 'b',
240
'transport_server': 'a'})],
246
243
def test_setting_vfs_transport(self):
247
244
"""The vfs_transport_factory can be set optionally."""
248
from bzrlib.repository import RepositoryTestProviderAdapter
249
input_test = TestRepositoryProviderAdapter(
250
"test_adapted_tests")
251
formats = [("c", "C")]
245
from bzrlib.tests.repository_implementations import RepositoryTestProviderAdapter
246
formats = [("a", "b"), ("c", "d")]
252
247
adapter = RepositoryTestProviderAdapter(None, None, formats,
253
248
vfs_transport_factory="vfs")
254
suite = adapter.adapt(input_test)
255
tests = list(iter(suite))
256
self.assertEqual(1, len(tests))
257
self.assertEqual(tests[0].vfs_transport_factory, "vfs")
251
{'bzrdir_format': 'b',
252
'repository_format': 'a',
253
'transport_readonly_server': None,
254
'transport_server': None,
255
'vfs_transport_factory': 'vfs'}),
257
{'bzrdir_format': 'd',
258
'repository_format': 'c',
259
'transport_readonly_server': None,
260
'transport_server': None,
261
'vfs_transport_factory': 'vfs'})],
264
def test_formats_to_scenarios(self):
265
"""The adapter can generate all the scenarios needed."""
266
from bzrlib.tests.repository_implementations import RepositoryTestProviderAdapter
267
no_vfs_adapter = RepositoryTestProviderAdapter("server", "readonly",
269
vfs_adapter = RepositoryTestProviderAdapter("server", "readonly",
270
[], vfs_transport_factory="vfs")
271
# no_vfs generate scenarios without vfs_transport_factor
272
formats = [("c", "C"), (1, "D")]
275
{'bzrdir_format': 'C',
276
'repository_format': 'c',
277
'transport_readonly_server': 'readonly',
278
'transport_server': 'server'}),
280
{'bzrdir_format': 'D',
281
'repository_format': 1,
282
'transport_readonly_server': 'readonly',
283
'transport_server': 'server'})],
284
no_vfs_adapter.formats_to_scenarios(formats))
287
{'bzrdir_format': 'C',
288
'repository_format': 'c',
289
'transport_readonly_server': 'readonly',
290
'transport_server': 'server',
291
'vfs_transport_factory': 'vfs'}),
293
{'bzrdir_format': 'D',
294
'repository_format': 1,
295
'transport_readonly_server': 'readonly',
296
'transport_server': 'server',
297
'vfs_transport_factory': 'vfs'})],
298
vfs_adapter.formats_to_scenarios(formats))
301
class TestTestScenarioApplier(TestCase):
302
"""Tests for the test adaption facilities."""
304
def test_adapt_applies_scenarios(self):
305
from bzrlib.tests.repository_implementations import TestScenarioApplier
306
input_test = TestTestScenarioApplier("test_adapt_test_to_scenario")
307
adapter = TestScenarioApplier()
308
adapter.scenarios = [("1", "dict"), ("2", "settings")]
310
def capture_call(test, scenario):
311
calls.append((test, scenario))
313
adapter.adapt_test_to_scenario = capture_call
314
adapter.adapt(input_test)
315
self.assertEqual([(input_test, ("1", "dict")),
316
(input_test, ("2", "settings"))], calls)
318
def test_adapt_test_to_scenario(self):
319
from bzrlib.tests.repository_implementations import TestScenarioApplier
320
input_test = TestTestScenarioApplier("test_adapt_test_to_scenario")
321
adapter = TestScenarioApplier()
322
# setup two adapted tests
323
adapted_test1 = adapter.adapt_test_to_scenario(input_test,
325
{"bzrdir_format":"bzr_format",
326
"repository_format":"repo_fmt",
327
"transport_server":"transport_server",
328
"transport_readonly_server":"readonly-server"}))
329
adapted_test2 = adapter.adapt_test_to_scenario(input_test,
330
("new id 2", {"bzrdir_format":None}))
331
# input_test should have been altered.
332
self.assertRaises(AttributeError, getattr, input_test, "bzrdir_format")
333
# the new tests are mutually incompatible, ensuring it has
334
# made new ones, and unspecified elements in the scenario
335
# should not have been altered.
336
self.assertEqual("bzr_format", adapted_test1.bzrdir_format)
337
self.assertEqual("repo_fmt", adapted_test1.repository_format)
338
self.assertEqual("transport_server", adapted_test1.transport_server)
339
self.assertEqual("readonly-server",
340
adapted_test1.transport_readonly_server)
342
"bzrlib.tests.test_selftest.TestTestScenarioApplier."
343
"test_adapt_test_to_scenario(new id)",
345
self.assertEqual(None, adapted_test2.bzrdir_format)
347
"bzrlib.tests.test_selftest.TestTestScenarioApplier."
348
"test_adapt_test_to_scenario(new id 2)",
260
352
class TestInterRepositoryProviderAdapter(TestCase):
263
355
def test_adapted_tests(self):
264
356
# check that constructor parameters are passed through to the adapted
266
from bzrlib.repository import InterRepositoryTestProviderAdapter
267
input_test = TestInterRepositoryProviderAdapter(
268
"test_adapted_tests")
358
from bzrlib.tests.interrepository_implementations import \
359
InterRepositoryTestProviderAdapter
271
362
formats = [(str, "C1", "C2"), (int, "D1", "D2")]
272
363
adapter = InterRepositoryTestProviderAdapter(server1, server2, formats)
273
suite = adapter.adapt(input_test)
274
tests = list(iter(suite))
275
self.assertEqual(2, len(tests))
276
self.assertEqual(tests[0].interrepo_class, formats[0][0])
277
self.assertEqual(tests[0].repository_format, formats[0][1])
278
self.assertEqual(tests[0].repository_format_to, formats[0][2])
279
self.assertEqual(tests[0].transport_server, server1)
280
self.assertEqual(tests[0].transport_readonly_server, server2)
281
self.assertEqual(tests[1].interrepo_class, formats[1][0])
282
self.assertEqual(tests[1].repository_format, formats[1][1])
283
self.assertEqual(tests[1].repository_format_to, formats[1][2])
284
self.assertEqual(tests[1].transport_server, server1)
285
self.assertEqual(tests[1].transport_readonly_server, server2)
366
{'interrepo_class': str,
367
'repository_format': 'C1',
368
'repository_format_to': 'C2',
369
'transport_readonly_server': 'b',
370
'transport_server': 'a'}),
372
{'interrepo_class': int,
373
'repository_format': 'D1',
374
'repository_format_to': 'D2',
375
'transport_readonly_server': 'b',
376
'transport_server': 'a'})],
377
adapter.formats_to_scenarios(formats))
288
380
class TestInterVersionedFileProviderAdapter(TestCase):
289
381
"""A group of tests that test the InterVersionedFile test adapter."""
291
def test_adapted_tests(self):
383
def test_scenarios(self):
292
384
# check that constructor parameters are passed through to the adapted
294
from bzrlib.versionedfile import InterVersionedFileTestProviderAdapter
295
input_test = TestInterRepositoryProviderAdapter(
296
"test_adapted_tests")
386
from bzrlib.tests.interversionedfile_implementations \
387
import InterVersionedFileTestProviderAdapter
299
390
formats = [(str, "C1", "C2"), (int, "D1", "D2")]
300
391
adapter = InterVersionedFileTestProviderAdapter(server1, server2, formats)
301
suite = adapter.adapt(input_test)
302
tests = list(iter(suite))
303
self.assertEqual(2, len(tests))
304
self.assertEqual(tests[0].interversionedfile_class, formats[0][0])
305
self.assertEqual(tests[0].versionedfile_factory, formats[0][1])
306
self.assertEqual(tests[0].versionedfile_factory_to, formats[0][2])
307
self.assertEqual(tests[0].transport_server, server1)
308
self.assertEqual(tests[0].transport_readonly_server, server2)
309
self.assertEqual(tests[1].interversionedfile_class, formats[1][0])
310
self.assertEqual(tests[1].versionedfile_factory, formats[1][1])
311
self.assertEqual(tests[1].versionedfile_factory_to, formats[1][2])
312
self.assertEqual(tests[1].transport_server, server1)
313
self.assertEqual(tests[1].transport_readonly_server, server2)
394
{'interversionedfile_class':str,
395
'transport_readonly_server': 'b',
396
'transport_server': 'a',
397
'versionedfile_factory': 'C1',
398
'versionedfile_factory_to': 'C2'}),
400
{'interversionedfile_class': int,
401
'transport_readonly_server': 'b',
402
'transport_server': 'a',
403
'versionedfile_factory': 'D1',
404
'versionedfile_factory_to': 'D2'})],
316
408
class TestRevisionStoreProviderAdapter(TestCase):
317
409
"""A group of tests that test the RevisionStore test adapter."""
319
def test_adapted_tests(self):
411
def test_scenarios(self):
320
412
# check that constructor parameters are passed through to the adapted
322
from bzrlib.store.revision import RevisionStoreTestProviderAdapter
323
input_test = TestRevisionStoreProviderAdapter(
324
"test_adapted_tests")
414
from bzrlib.tests.revisionstore_implementations \
415
import RevisionStoreTestProviderAdapter
325
416
# revision stores need a store factory - i.e. RevisionKnit
326
417
#, a readonly and rw transport
327
418
# transport servers:
330
421
store_factories = ["c", "d"]
331
422
adapter = RevisionStoreTestProviderAdapter(server1, server2, store_factories)
332
suite = adapter.adapt(input_test)
333
tests = list(iter(suite))
334
self.assertEqual(2, len(tests))
335
self.assertEqual(tests[0].store_factory, store_factories[0][0])
336
self.assertEqual(tests[0].transport_server, server1)
337
self.assertEqual(tests[0].transport_readonly_server, server2)
338
self.assertEqual(tests[1].store_factory, store_factories[1][0])
339
self.assertEqual(tests[1].transport_server, server1)
340
self.assertEqual(tests[1].transport_readonly_server, server2)
425
{'store_factory': 'c',
426
'transport_readonly_server': 'b',
427
'transport_server': 'a'}),
429
{'store_factory': 'd',
430
'transport_readonly_server': 'b',
431
'transport_server': 'a'})],
343
435
class TestWorkingTreeProviderAdapter(TestCase):
344
436
"""A group of tests that test the workingtree implementation test adapter."""
346
def test_adapted_tests(self):
438
def test_scenarios(self):
347
439
# check that constructor parameters are passed through to the adapted
349
from bzrlib.workingtree import WorkingTreeTestProviderAdapter
350
input_test = TestWorkingTreeProviderAdapter(
351
"test_adapted_tests")
441
from bzrlib.tests.workingtree_implementations \
442
import WorkingTreeTestProviderAdapter
354
445
formats = [("c", "C"), ("d", "D")]
355
446
adapter = WorkingTreeTestProviderAdapter(server1, server2, formats)
356
suite = adapter.adapt(input_test)
357
tests = list(iter(suite))
358
self.assertEqual(2, len(tests))
359
self.assertEqual(tests[0].workingtree_format, formats[0][0])
360
self.assertEqual(tests[0].bzrdir_format, formats[0][1])
361
self.assertEqual(tests[0].transport_server, server1)
362
self.assertEqual(tests[0].transport_readonly_server, server2)
363
self.assertEqual(tests[1].workingtree_format, formats[1][0])
364
self.assertEqual(tests[1].bzrdir_format, formats[1][1])
365
self.assertEqual(tests[1].transport_server, server1)
366
self.assertEqual(tests[1].transport_readonly_server, server2)
449
{'bzrdir_format': 'C',
450
'transport_readonly_server': 'b',
451
'transport_server': 'a',
452
'workingtree_format': 'c'}),
454
{'bzrdir_format': 'D',
455
'transport_readonly_server': 'b',
456
'transport_server': 'a',
457
'workingtree_format': 'd'})],
369
461
class TestTreeProviderAdapter(TestCase):