Rev 6080: (jelmer) Add a HasLayout matcher. (Jelmer Vernooij) in file:///home/pqm/archives/thelove/bzr/%2Btrunk/
Canonical.com Patch Queue Manager
pqm at pqm.ubuntu.com
Wed Aug 17 21:39:48 UTC 2011
At file:///home/pqm/archives/thelove/bzr/%2Btrunk/
------------------------------------------------------------
revno: 6080 [merge]
revision-id: pqm at pqm.ubuntu.com-20110817213937-lzul6u2qz1svvgxm
parent: pqm at pqm.ubuntu.com-20110817181357-y5q5eth1hk8bl3om
parent: jelmer at samba.org-20110816134043-ex355kzp2a2wdsu4
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Wed 2011-08-17 21:39:37 +0000
message:
(jelmer) Add a HasLayout matcher. (Jelmer Vernooij)
modified:
bzrlib/tests/matchers.py matchers.py-20100506074820-iiipsgdue8dhvidy-1
bzrlib/tests/per_workingtree/test_add.py test_add.py-20070226165239-4vo178spkrnhavc7-1
bzrlib/tests/per_workingtree/test_move.py test_move.py-20070225171927-mohn2vqj5fx7edc6-1
bzrlib/tests/per_workingtree/test_rename_one.py test_rename_one.py-20070226161242-2d8ibdedl700jgio-1
bzrlib/tests/test_matchers.py test_matchers.py-20100506074820-iiipsgdue8dhvidy-2
=== modified file 'bzrlib/tests/matchers.py'
--- a/bzrlib/tests/matchers.py 2011-06-19 12:45:11 +0000
+++ b/bzrlib/tests/matchers.py 2011-08-16 13:26:27 +0000
@@ -27,6 +27,7 @@
"""
__all__ = [
+ 'HasLayout',
'MatchesAncestry',
'ReturnsUnlockable',
]
@@ -35,7 +36,7 @@
revision as _mod_revision,
)
-from testtools.matchers import Mismatch, Matcher
+from testtools.matchers import Equals, Mismatch, Matcher
class ReturnsUnlockable(Matcher):
@@ -112,4 +113,34 @@
finally:
self.repository.unlock()
if sorted(got) != sorted(expected):
- return _AncestryMismatch(self.revision_id, sorted(got), sorted(expected))
+ return _AncestryMismatch(self.revision_id, sorted(got),
+ sorted(expected))
+
+
+class HasLayout(Matcher):
+ """A matcher that checks if a tree has a specific layout.
+
+ :ivar entries: List of expected entries, as (path, file_id) pairs.
+ """
+
+ def __init__(self, entries):
+ Matcher.__init__(self)
+ self.entries = entries
+
+ def get_tree_layout(self, tree):
+ """Get the (path, file_id) pairs for the current tree."""
+ tree.lock_read()
+ try:
+ return [(path, ie.file_id) for path, ie
+ in tree.iter_entries_by_dir()]
+ finally:
+ tree.unlock()
+
+ def __str__(self):
+ return ('HasLayout(%r)' % self.entries)
+
+ def match(self, tree):
+ actual = self.get_tree_layout(tree)
+ if self.entries and isinstance(self.entries[0], basestring):
+ actual = [path for (path, fileid) in actual]
+ return Equals(actual).match(self.entries)
=== modified file 'bzrlib/tests/per_workingtree/test_add.py'
--- a/bzrlib/tests/per_workingtree/test_add.py 2011-05-08 13:07:11 +0000
+++ b/bzrlib/tests/per_workingtree/test_add.py 2011-08-16 13:15:28 +0000
@@ -21,24 +21,15 @@
inventory,
tests,
)
+from bzrlib.tests.matchers import HasLayout
from bzrlib.tests.per_workingtree import TestCaseWithWorkingTree
class TestAdd(TestCaseWithWorkingTree):
- def get_tree_layout(self, tree):
- """Get the (path, file_id) pairs for the current tree."""
- tree.lock_read()
- try:
- return [(path, ie.file_id) for path, ie
- in tree.iter_entries_by_dir()]
- finally:
- tree.unlock()
-
def assertTreeLayout(self, expected, tree):
"""Check that the tree has the correct layout."""
- actual = self.get_tree_layout(tree)
- self.assertEqual(expected, actual)
+ self.assertThat(tree, HasLayout(expected))
def test_add_one(self):
tree = self.make_branch_and_tree('.')
=== modified file 'bzrlib/tests/per_workingtree/test_move.py'
--- a/bzrlib/tests/per_workingtree/test_move.py 2011-07-25 02:51:30 +0000
+++ b/bzrlib/tests/per_workingtree/test_move.py 2011-08-16 13:15:28 +0000
@@ -24,6 +24,7 @@
tests,
)
+from bzrlib.tests.matchers import HasLayout
from bzrlib.tests.per_workingtree import TestCaseWithWorkingTree
from bzrlib.tests import (
features,
@@ -32,19 +33,9 @@
class TestMove(TestCaseWithWorkingTree):
- def get_tree_layout(self, tree):
- """Get the (path, file_id) pairs for the current tree."""
- tree.lock_read()
- try:
- return [(path, ie.file_id) for path, ie
- in tree.iter_entries_by_dir()]
- finally:
- tree.unlock()
-
def assertTreeLayout(self, expected, tree):
"""Check that the tree has the correct layout."""
- actual = self.get_tree_layout(tree)
- self.assertEqual(expected, actual)
+ self.assertThat(tree, HasLayout(expected))
def test_move_via_rm_and_add(self):
"""Move by remove and add-with-id"""
=== modified file 'bzrlib/tests/per_workingtree/test_rename_one.py'
--- a/bzrlib/tests/per_workingtree/test_rename_one.py 2011-07-11 06:47:32 +0000
+++ b/bzrlib/tests/per_workingtree/test_rename_one.py 2011-08-16 13:15:28 +0000
@@ -26,25 +26,16 @@
from bzrlib.tests import (
features,
)
+from bzrlib.tests.matchers import HasLayout
from bzrlib.tests.per_workingtree import TestCaseWithWorkingTree
class TestRenameOne(TestCaseWithWorkingTree):
- def get_tree_layout(self, tree):
- """Get the (path, file_id) pairs for the current tree."""
- tree.lock_read()
- try:
- return [(path, ie.file_id) for path, ie
- in tree.iter_entries_by_dir()]
- finally:
- tree.unlock()
-
def assertTreeLayout(self, expected, tree):
"""Check that the tree has the correct layout."""
- actual = self.get_tree_layout(tree)
- self.assertEqual(expected, actual)
+ self.assertThat(tree, HasLayout(expected))
def test_rename_one_target_not_dir(self):
tree = self.make_branch_and_tree('.')
=== modified file 'bzrlib/tests/test_matchers.py'
--- a/bzrlib/tests/test_matchers.py 2011-06-19 15:23:02 +0000
+++ b/bzrlib/tests/test_matchers.py 2011-08-16 13:26:27 +0000
@@ -104,3 +104,31 @@
"mismatched ancestry for revision '%s' was ['%s'], expected []" % (
revid1, revid1),
mismatch.describe())
+
+
+class TestHasLayout(TestCaseWithTransport):
+
+ def test__str__(self):
+ matcher = HasLayout([("a", "a-id")])
+ self.assertEqual("HasLayout([('a', 'a-id')])", str(matcher))
+
+ def test_match(self):
+ t = self.make_branch_and_tree('.')
+ self.build_tree(['a', 'b/', 'b/c'])
+ t.add(['a', 'b', 'b/c'], ['a-id', 'b-id', 'c-id'])
+ self.assertThat(t, HasLayout(['', 'a', 'b', 'b/c']))
+ self.assertThat(t, HasLayout(
+ [('', t.get_root_id()),
+ ('a', 'a-id'),
+ ('b', 'b-id'),
+ ('b/c', 'c-id')]))
+
+ def test_mismatch(self):
+ t = self.make_branch_and_tree('.')
+ self.build_tree(['a', 'b/', 'b/c'])
+ t.add(['a', 'b', 'b/c'], ['a-id', 'b-id', 'c-id'])
+ mismatch = HasLayout(['a']).match(t)
+ self.assertIsNot(None, mismatch)
+ self.assertEquals(
+ "[u'', u'a', u'b', u'b/c'] != ['a']",
+ mismatch.describe())
More information about the bazaar-commits
mailing list