318
323
return self.workingtree_to_test_tree(tree)
321
class TreeTestProviderAdapter(WorkingTreeTestProviderAdapter):
326
def make_scenarios(transport_server, transport_readonly_server, formats):
322
327
"""Generate test suites for each Tree implementation in bzrlib.
324
329
Currently this covers all working tree formats, and RevisionTree and
325
330
DirStateRevisionTree by committing a working tree to create the revision
329
def __init__(self, transport_server, transport_readonly_server, formats):
330
"""Create a TreeTestProviderAdapter.
332
:param formats: [workingtree_format]
334
super(TreeTestProviderAdapter, self).__init__(transport_server,
335
transport_readonly_server, formats)
336
# now adjust the scenarios and add the non-working-tree tree scenarios.
337
for scenario in self.scenarios:
338
# for working tree adapted tests, preserve the tree
339
scenario[1]["_workingtree_to_test_tree"] = return_parameter
340
# add RevisionTree scenario
341
self.scenarios.append(self.create_tree_scenario(RevisionTree.__name__,
342
revision_tree_from_workingtree,))
344
# also test WorkingTree4's RevisionTree implementation which is
346
self.scenarios.append(self.create_tree_scenario(
347
DirStateRevisionTree.__name__, _dirstate_tree_from_workingtree,
348
WorkingTreeFormat4()))
349
self.scenarios.append(self.create_tree_scenario('PreviewTree',
351
self.scenarios.append(self.create_tree_scenario('PreviewTreePost',
354
def create_tree_scenario(self, name, converter, workingtree_format=None):
355
"""Create a scenario for the specified converter
357
:param name: The name to append to tests using this converter
358
:param converter: A function that converts a workingtree into the
360
:param workingtree_format: The particular workingtree format to
362
:return: a (name, options) tuple, where options is a dict of values
363
to be used as members of the TestCase.
365
if workingtree_format is None:
366
workingtree_format = WorkingTreeFormat._default_format
367
scenario_options = WorkingTreeTestProviderAdapter.create_scenario(self,
368
workingtree_format)[1]
369
scenario_options["_workingtree_to_test_tree"] = converter
370
return name, scenario_options
373
def load_tests(basic_tests, module, loader):
374
result = loader.suiteClass()
375
# add the tests for this module
376
result.addTests(basic_tests)
378
test_tree_implementations = [
379
'bzrlib.tests.tree_implementations.test_annotate_iter',
380
'bzrlib.tests.tree_implementations.test_get_file_mtime',
381
'bzrlib.tests.tree_implementations.test_get_root_id',
382
'bzrlib.tests.tree_implementations.test_get_symlink_target',
383
'bzrlib.tests.tree_implementations.test_inv',
384
'bzrlib.tests.tree_implementations.test_iter_search_rules',
385
'bzrlib.tests.tree_implementations.test_list_files',
386
'bzrlib.tests.tree_implementations.test_path_content_summary',
387
'bzrlib.tests.tree_implementations.test_revision_tree',
388
'bzrlib.tests.tree_implementations.test_test_trees',
389
'bzrlib.tests.tree_implementations.test_tree',
390
'bzrlib.tests.tree_implementations.test_walkdirs',
333
scenarios = wt_make_scenarios(transport_server, transport_readonly_server,
335
# now adjust the scenarios and add the non-working-tree tree scenarios.
336
for scenario in scenarios:
337
# for working tree format tests, preserve the tree
338
scenario[1]["_workingtree_to_test_tree"] = return_parameter
339
# add RevisionTree scenario
340
workingtree_format = WorkingTreeFormat._default_format
341
scenarios.append((RevisionTree.__name__,
342
create_tree_scenario(transport_server, transport_readonly_server,
343
workingtree_format, revision_tree_from_workingtree,)))
345
# also test WorkingTree4/5's RevisionTree implementation which is
347
# XXX: Ask igc if WT5 revision tree actually is different.
348
scenarios.append((DirStateRevisionTree.__name__ + ",WT4",
349
create_tree_scenario(transport_server, transport_readonly_server,
350
WorkingTreeFormat4(), _dirstate_tree_from_workingtree)))
351
scenarios.append((DirStateRevisionTree.__name__ + ",WT5",
352
create_tree_scenario(transport_server, transport_readonly_server,
353
WorkingTreeFormat5(), _dirstate_tree_from_workingtree)))
354
scenarios.append(("PreviewTree", create_tree_scenario(transport_server,
355
transport_readonly_server, workingtree_format, preview_tree_pre)))
356
scenarios.append(("PreviewTreePost", create_tree_scenario(transport_server,
357
transport_readonly_server, workingtree_format, preview_tree_post)))
361
def create_tree_scenario(transport_server, transport_readonly_server,
362
workingtree_format, converter):
363
"""Create a scenario for the specified converter
365
:param converter: A function that converts a workingtree into the
367
:param workingtree_format: The particular workingtree format to
369
:return: a (name, options) tuple, where options is a dict of values
370
to be used as members of the TestCase.
372
scenario_options = wt_make_scenario(transport_server,
373
transport_readonly_server,
375
scenario_options["_workingtree_to_test_tree"] = converter
376
return scenario_options
379
def load_tests(standard_tests, module, loader):
380
per_tree_mod_names = [
383
'get_file_with_stat',
385
'get_symlink_target',
389
'path_content_summary',
393
adapter = TreeTestProviderAdapter(
395
submod_tests = loader.loadTestsFromModuleNames(
396
['bzrlib.tests.per_tree.test_' + name
397
for name in per_tree_mod_names])
398
scenarios = make_scenarios(
399
tests.default_transport,
395
400
# None here will cause a readonly decorator to be created
396
401
# by the TestCaseWithTransport.get_readonly_transport method.
398
403
WorkingTreeFormat._formats.values() + _legacy_formats)
400
404
# add the tests for the sub modules
401
adapt_modules(test_tree_implementations, adapter, loader, result)
405
return tests.multiply_tests(submod_tests, scenarios, standard_tests)