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