Rev 2563: And overhaul WorkingTreeTestProviderAdapter too. in sftp://rookery/~/public_html/baz2.0/adapter-cleanup
Robert Collins
robertc at robertcollins.net
Thu Jun 28 08:15:32 BST 2007
At sftp://rookery/~/public_html/baz2.0/adapter-cleanup
------------------------------------------------------------
revno: 2563
revision-id: robertc at robertcollins.net-20070628071528-muyk19rxv7z8dhiy
parent: robertc at robertcollins.net-20070628064436-lyl4ygrlwe7xup2h
committer: Robert Collins <robertc at robertcollins.net>
branch nick: adapter-cleanup
timestamp: Thu 2007-06-28 17:15:28 +1000
message:
And overhaul WorkingTreeTestProviderAdapter too.
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/tests/intertree_implementations/__init__.py __init__.py-20060724101752-09ysswo1a92uqyoz-3
bzrlib/tests/test_selftest.py test_selftest.py-20051202044319-c110a115d8c0456a
bzrlib/tests/tree_implementations/__init__.py __init__.py-20060717075546-420s7b0bj9hzeowi-2
bzrlib/tests/workingtree_implementations/__init__.py __init__.py-20060203003124-b2aa5aca21a8bfad
bzrlib/workingtree.py workingtree.py-20050511021032-29b6ec0a681e02e3
=== modified file 'NEWS'
--- a/NEWS 2007-06-28 06:44:36 +0000
+++ b/NEWS 2007-06-28 07:15:28 +0000
@@ -63,6 +63,8 @@
to ``bzrlib.tests.interversionedfile_implementations``.
``bzrlib.store.revision.RevisionStoreTestProviderAdapter`` has moved to
``bzrlib.tests.revisionstore_implementations``.
+ ``bzrlib.workingtree.WorkingTreeTestProviderAdapter`` has moved to
+ ``bzrlib.tests.workingtree_implementations``.
These changes are an API break in the testing infrastructure only.
(Robert Collins)
=== modified file 'bzrlib/tests/intertree_implementations/__init__.py'
--- a/bzrlib/tests/intertree_implementations/__init__.py 2007-03-02 09:44:41 +0000
+++ b/bzrlib/tests/intertree_implementations/__init__.py 2007-06-28 07:15:28 +0000
@@ -35,10 +35,12 @@
revision_tree_from_workingtree,
TestCaseWithTree,
)
+from bzrlib.tests.workingtree_implementations import (
+ WorkingTreeTestProviderAdapter,
+ )
from bzrlib.tree import InterTree
from bzrlib.workingtree import (
WorkingTreeFormat3,
- WorkingTreeTestProviderAdapter,
)
@@ -61,26 +63,35 @@
class InterTreeTestProviderAdapter(WorkingTreeTestProviderAdapter):
"""Generate test suites for each InterTree implementation in bzrlib."""
- def adapt(self, test):
- result = TestSuite()
+ def formats_to_scenarios(self, formats):
+ """Transform the input formats to a list of scenarios.
+
+ :param formats: A list of tuples:.
+ (intertree_class,
+ workingtree_format,
+ workingtree_format_to,
+ mutable_trees_to_test_trees)
+ """
+ result = []
for (intertree_class,
workingtree_format,
workingtree_format_to,
- mutable_trees_to_test_trees) in self._formats:
- new_test = self._clone_test(
- test,
- workingtree_format._matchingbzrdir,
- workingtree_format,
- intertree_class.__name__)
- new_test.intertree_class = intertree_class
- new_test.workingtree_format_to = workingtree_format_to
- # mutable_trees_to_test_trees takes two trees and converts them to
- # whatever relationship the optimiser under test requires.
- new_test.mutable_trees_to_test_trees = mutable_trees_to_test_trees
- # workingtree_to_test_tree is set to disable changing individual
- # trees: instead the mutable_trees_to_test_trees helper is used.
- new_test.workingtree_to_test_tree = return_parameter
- result.addTest(new_test)
+ mutable_trees_to_test_trees) in formats:
+ scenario = (intertree_class.__name__, {
+ "transport_server":self._transport_server,
+ "transport_readonly_server":self._transport_readonly_server,
+ "bzrdir_format":workingtree_format._matchingbzrdir,
+ "workingtree_format":workingtree_format,
+ "intertree_class":intertree_class,
+ "workingtree_format_to":workingtree_format_to,
+ # mutable_trees_to_test_trees takes two trees and converts them to,
+ # whatever relationship the optimiser under test requires.,
+ "mutable_trees_to_test_trees":mutable_trees_to_test_trees,
+ # workingtree_to_test_tree is set to disable changing individual,
+ # trees: instead the mutable_trees_to_test_trees helper is used.,
+ "workingtree_to_test_tree":return_parameter,
+ })
+ result.append(scenario)
return result
=== modified file 'bzrlib/tests/test_selftest.py'
--- a/bzrlib/tests/test_selftest.py 2007-06-28 06:44:36 +0000
+++ b/bzrlib/tests/test_selftest.py 2007-06-28 07:15:28 +0000
@@ -436,27 +436,27 @@
class TestWorkingTreeProviderAdapter(TestCase):
"""A group of tests that test the workingtree implementation test adapter."""
- def test_adapted_tests(self):
+ def test_scenarios(self):
# check that constructor parameters are passed through to the adapted
# test.
- from bzrlib.workingtree import WorkingTreeTestProviderAdapter
- input_test = TestWorkingTreeProviderAdapter(
- "test_adapted_tests")
+ from bzrlib.tests.workingtree_implementations \
+ import WorkingTreeTestProviderAdapter
server1 = "a"
server2 = "b"
formats = [("c", "C"), ("d", "D")]
adapter = WorkingTreeTestProviderAdapter(server1, server2, formats)
- suite = adapter.adapt(input_test)
- tests = list(iter(suite))
- self.assertEqual(2, len(tests))
- self.assertEqual(tests[0].workingtree_format, formats[0][0])
- self.assertEqual(tests[0].bzrdir_format, formats[0][1])
- self.assertEqual(tests[0].transport_server, server1)
- self.assertEqual(tests[0].transport_readonly_server, server2)
- self.assertEqual(tests[1].workingtree_format, formats[1][0])
- self.assertEqual(tests[1].bzrdir_format, formats[1][1])
- self.assertEqual(tests[1].transport_server, server1)
- self.assertEqual(tests[1].transport_readonly_server, server2)
+ self.assertEqual([
+ ('str',
+ {'bzrdir_format': 'C',
+ 'transport_readonly_server': 'b',
+ 'transport_server': 'a',
+ 'workingtree_format': 'c'}),
+ ('str',
+ {'bzrdir_format': 'D',
+ 'transport_readonly_server': 'b',
+ 'transport_server': 'a',
+ 'workingtree_format': 'd'})],
+ adapter.scenarios)
class TestTreeProviderAdapter(TestCase):
=== modified file 'bzrlib/tests/tree_implementations/__init__.py'
--- a/bzrlib/tests/tree_implementations/__init__.py 2007-04-16 20:42:59 +0000
+++ b/bzrlib/tests/tree_implementations/__init__.py 2007-06-28 07:15:28 +0000
@@ -41,11 +41,13 @@
TestSuite,
)
from bzrlib.tests.bzrdir_implementations.test_bzrdir import TestCaseWithBzrDir
+from bzrlib.tests.workingtree_implementations import (
+ WorkingTreeTestProviderAdapter,
+ )
from bzrlib.revisiontree import RevisionTree
from bzrlib.workingtree import (
WorkingTreeFormat,
WorkingTreeFormat3,
- WorkingTreeTestProviderAdapter,
_legacy_formats,
)
from bzrlib.workingtree_4 import (
@@ -289,35 +291,33 @@
class TreeTestProviderAdapter(WorkingTreeTestProviderAdapter):
"""Generate test suites for each Tree implementation in bzrlib.
- Currently this covers all working tree formats, and RevisionTree by
- committing a working tree to create the revision tree.
+ Currently this covers all working tree formats, and RevisionTree and
+ DirStateRevisionTree by committing a working tree to create the revision
+ tree.
"""
- def adapt(self, test):
- result = super(TreeTestProviderAdapter, self).adapt(test)
- for adapted_test in result:
+ def __init__(self, transport_server, transport_readonly_server, formats):
+ super(TreeTestProviderAdapter, self).__init__(transport_server,
+ transport_readonly_server, formats)
+ # now adjust the scenarios and add the non-working-tree tree scenarios.
+ for scenario in self.scenarios:
# for working tree adapted tests, preserve the tree
- adapted_test.workingtree_to_test_tree = return_parameter
- # this is the default in that it's used to test the generic InterTree
+ scenario[1]["workingtree_to_test_tree"] = return_parameter
+ # add RevisionTree scenario
+ # this is the 'default format' in that it's used to test the generic InterTree
# code.
default_format = WorkingTreeFormat3()
- revision_tree_test = self._clone_test(
- test,
- default_format._matchingbzrdir,
- default_format,
- RevisionTree.__name__)
- revision_tree_test.workingtree_to_test_tree = revision_tree_from_workingtree
- result.addTest(revision_tree_test)
- # also explicity test WorkingTree4 against everything
+ self.scenarios.append(self.formats_to_scenarios([
+ (default_format, default_format._matchingbzrdir)])[0])
+ self.scenarios[-1] = (RevisionTree.__name__, self.scenarios[-1][1])
+ self.scenarios[-1][1]["workingtree_to_test_tree"] = revision_tree_from_workingtree
+
+ # also test WorkingTree4's RevisionTree implementation which is specialised.
dirstate_format = WorkingTreeFormat4()
- dirstate_revision_tree_test = self._clone_test(
- test,
- dirstate_format._matchingbzrdir,
- dirstate_format,
- DirStateRevisionTree.__name__)
- dirstate_revision_tree_test.workingtree_to_test_tree = _dirstate_tree_from_workingtree
- result.addTest(dirstate_revision_tree_test)
- return result
+ self.scenarios.append(self.formats_to_scenarios([
+ (dirstate_format, dirstate_format._matchingbzrdir)])[0])
+ self.scenarios[-1] = (DirStateRevisionTree.__name__, self.scenarios[-1][1])
+ self.scenarios[-1][1]["workingtree_to_test_tree"] = _dirstate_tree_from_workingtree
def test_suite():
=== modified file 'bzrlib/tests/workingtree_implementations/__init__.py'
--- a/bzrlib/tests/workingtree_implementations/__init__.py 2007-04-18 20:12:15 +0000
+++ b/bzrlib/tests/workingtree_implementations/__init__.py 2007-06-28 07:15:28 +0000
@@ -28,15 +28,47 @@
adapt_modules,
default_transport,
TestLoader,
+ TestScenarioApplier,
TestSuite,
)
from bzrlib.tests.bzrdir_implementations.test_bzrdir import TestCaseWithBzrDir
from bzrlib.workingtree import (WorkingTreeFormat,
- WorkingTreeTestProviderAdapter,
_legacy_formats,
)
+class WorkingTreeTestProviderAdapter(TestScenarioApplier):
+ """A tool to generate a suite testing multiple workingtree formats at once.
+
+ This is done by copying the test once for each transport and injecting
+ the transport_server, transport_readonly_server, and workingtree_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.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 (workingtree_format, bzrdir_format).
+ """
+
+ result = []
+ for workingtree_format, bzrdir_format in formats:
+ scenario = (workingtree_format.__class__.__name__, {
+ "transport_server":self._transport_server,
+ "transport_readonly_server":self._transport_readonly_server,
+ "bzrdir_format":bzrdir_format,
+ "workingtree_format":workingtree_format,
+ })
+ result.append(scenario)
+ return result
+
+
class TestCaseWithWorkingTree(TestCaseWithBzrDir):
def make_branch_and_tree(self, relpath, format=None):
=== modified file 'bzrlib/workingtree.py'
--- a/bzrlib/workingtree.py 2007-06-19 14:49:06 +0000
+++ b/bzrlib/workingtree.py 2007-06-28 07:15:28 +0000
@@ -44,7 +44,6 @@
lazy_import(globals(), """
from bisect import bisect_left
import collections
-from copy import deepcopy
import errno
import itertools
import operator
@@ -2772,42 +2771,3 @@
# and not independently creatable, so are not registered.
_legacy_formats = [WorkingTreeFormat2(),
]
-
-
-class WorkingTreeTestProviderAdapter(object):
- """A tool to generate a suite testing multiple workingtree formats at once.
-
- This is done by copying the test once for each transport and injecting
- the transport_server, transport_readonly_server, and workingtree_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 _clone_test(self, test, bzrdir_format, workingtree_format, variation):
- """Clone test for adaption."""
- new_test = deepcopy(test)
- new_test.transport_server = self._transport_server
- new_test.transport_readonly_server = self._transport_readonly_server
- new_test.bzrdir_format = bzrdir_format
- new_test.workingtree_format = workingtree_format
- def make_new_test_id():
- new_id = "%s(%s)" % (test.id(), variation)
- return lambda: new_id
- new_test.id = make_new_test_id()
- return new_test
-
- def adapt(self, test):
- from bzrlib.tests import TestSuite
- result = TestSuite()
- for workingtree_format, bzrdir_format in self._formats:
- new_test = self._clone_test(
- test,
- bzrdir_format,
- workingtree_format, workingtree_format.__class__.__name__)
- result.addTest(new_test)
- return result
More information about the bazaar-commits
mailing list