~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/matchers.py

  • Committer: Andrew Bennetts
  • Date: 2010-10-13 00:26:41 UTC
  • mto: This revision was merged to the branch mainline in revision 5498.
  • Revision ID: andrew.bennetts@canonical.com-20101013002641-9tlh9k89mlj1666m
Keep docs-plain working.

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
"""
28
28
 
29
29
__all__ = [
30
 
    'MatchesAncestry',
31
30
    'ReturnsUnlockable',
32
31
    ]
33
32
 
34
 
from bzrlib import (
35
 
    revision as _mod_revision,
36
 
    )
37
 
 
38
33
from testtools.matchers import Mismatch, Matcher
39
34
 
40
35
 
71
66
 
72
67
    def describe(self):
73
68
        return "%s is locked" % self.lockable_thing
74
 
 
75
 
 
76
 
class _AncestryMismatch(Mismatch):
77
 
    """Ancestry matching mismatch."""
78
 
 
79
 
    def __init__(self, tip_revision, got, expected):
80
 
        self.tip_revision = tip_revision
81
 
        self.got = got
82
 
        self.expected = expected
83
 
 
84
 
    def describe(self):
85
 
        return "mismatched ancestry for revision %r was %r, expected %r" % (
86
 
            self.tip_revision, self.got, self.expected)
87
 
 
88
 
 
89
 
class MatchesAncestry(Matcher):
90
 
    """A matcher that checks the ancestry of a particular revision.
91
 
 
92
 
    :ivar graph: Graph in which to check the ancestry
93
 
    :ivar revision_id: Revision id of the revision
94
 
    """
95
 
 
96
 
    def __init__(self, repository, revision_id):
97
 
        Matcher.__init__(self)
98
 
        self.repository = repository
99
 
        self.revision_id = revision_id
100
 
 
101
 
    def __str__(self):
102
 
        return ('MatchesAncestry(repository=%r, revision_id=%r)' % (
103
 
            self.repository, self.revision_id))
104
 
 
105
 
    def match(self, expected):
106
 
        self.repository.lock_read()
107
 
        try:
108
 
            graph = self.repository.get_graph()
109
 
            got = [r for r, p in graph.iter_ancestry([self.revision_id])]
110
 
            if _mod_revision.NULL_REVISION in got:
111
 
                got.remove(_mod_revision.NULL_REVISION)
112
 
        finally:
113
 
            self.repository.unlock()
114
 
        if sorted(got) != sorted(expected):
115
 
            return _AncestryMismatch(self.revision_id, sorted(got), sorted(expected))