~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/selftest/testrevision.py

  • Committer: Martin Pool
  • Date: 2005-08-24 08:59:32 UTC
  • Revision ID: mbp@sourcefrog.net-20050824085932-c61f1f1f1c930e13
- Add a simple UIFactory 

  The idea of this is to let a client of bzrlib set some 
  policy about how output is displayed.

  In this revision all that's done is that progress bars
  are constructed by a policy established by the application
  rather than being randomly constructed in the library 
  or passed down the calls.  This avoids progress bars
  popping up while running the test suite and cleans up
  some code.

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
 
from bzrlib.selftest import TestCaseInTempDir
 
17
from bzrlib.selftest import InTempDir
18
18
 
19
19
 
20
20
def make_branches():
23
23
    import os
24
24
    os.mkdir("branch1")
25
25
    br1 = Branch("branch1", init=True)
26
 
    
27
 
    commit(br1, "Commit one", rev_id="a@u-0-0")
28
 
    commit(br1, "Commit two", rev_id="a@u-0-1")
29
 
    commit(br1, "Commit three", rev_id="a@u-0-2")
 
26
    commit(br1, "Commit one")
 
27
    commit(br1, "Commit two")
 
28
    commit(br1, "Commit three")
30
29
 
31
30
    os.mkdir("branch2")
32
31
    br2 = Branch("branch2", init=True)
33
32
    br2.update_revisions(br1)
34
 
    commit(br2, "Commit four", rev_id="b@u-0-3")
35
 
    commit(br2, "Commit five", rev_id="b@u-0-4")
 
33
    commit(br2, "Commit four")
 
34
    commit(br2, "Commit five")
36
35
    revisions_2 = br2.revision_history()
37
36
    br1.add_pending_merge(revisions_2[4])
38
 
    commit(br1, "Commit six", rev_id="a@u-0-3")
39
 
    commit(br1, "Commit seven", rev_id="a@u-0-4")
40
 
    commit(br2, "Commit eight", rev_id="b@u-0-5")
41
 
    br1.add_pending_merge(br2.revision_history()[5])
42
 
    commit(br1, "Commit nine", rev_id="a@u-0-5")
43
 
    br2.add_pending_merge(br1.revision_history()[4])
44
 
    commit(br2, "Commit ten", rev_id="b@u-0-6")
 
37
    commit(br1, "Commit six")
45
38
    return br1, br2
46
39
 
47
40
 
48
 
class TestIsAncestor(TestCaseInTempDir):
 
41
class TestIsAncestor(InTempDir):
 
42
 
49
43
    def test_is_ancestor(self):
50
44
        """Test checking whether a revision is an ancestor of another revision"""
51
45
        from bzrlib.revision import is_ancestor, MultipleRevisionSources
66
60
        assert is_ancestor(revisions[3], revisions_2[3], sources)
67
61
        assert not is_ancestor(revisions[3], revisions_2[3], br1)
68
62
 
69
 
class TestIntermediateRevisions(TestCaseInTempDir):
70
 
 
71
 
    def setUp(self):
72
 
        from bzrlib.commit import commit
73
 
        TestCaseInTempDir.setUp(self)
74
 
        self.br1, self.br2 = make_branches()
75
 
        commit(self.br2, "Commit eleven", rev_id="b@u-0-7")
76
 
        commit(self.br2, "Commit twelve", rev_id="b@u-0-8")
77
 
        commit(self.br2, "Commit thirtteen", rev_id="b@u-0-9")
78
 
        self.br1.add_pending_merge(self.br2.revision_history()[6])
79
 
        commit(self.br1, "Commit fourtten", rev_id="a@u-0-6")
80
 
        self.br2.add_pending_merge(self.br1.revision_history()[6])
81
 
        commit(self.br2, "Commit fifteen", rev_id="b@u-0-10")
82
 
 
83
 
        from bzrlib.revision import MultipleRevisionSources
84
 
        self.sources = MultipleRevisionSources(self.br1, self.br2)
85
 
 
86
 
    def intervene(self, ancestor, revision, revision_history=None):
87
 
        from bzrlib.revision import get_intervening_revisions
88
 
        return get_intervening_revisions(ancestor,revision, self.sources, 
89
 
                                         revision_history)
90
 
 
91
 
    def test_intervene(self):
92
 
        """Find intermediate revisions, without requiring history"""
93
 
        from bzrlib.errors import NotAncestor, NoSuchRevision
94
 
        assert len(self.intervene('a@u-0-0', 'a@u-0-0')) == 0
95
 
        self.assertEqual(self.intervene('a@u-0-0', 'a@u-0-1'), ['a@u-0-1'])
96
 
        self.assertEqual(self.intervene('a@u-0-0', 'a@u-0-2'), 
97
 
                         ['a@u-0-1', 'a@u-0-2'])
98
 
        self.assertEqual(self.intervene('a@u-0-0', 'b@u-0-3'), 
99
 
                         ['a@u-0-1', 'a@u-0-2', 'b@u-0-3'])
100
 
        self.assertEqual(self.intervene('b@u-0-3', 'a@u-0-3'), 
101
 
                         ['b@u-0-4', 'a@u-0-3'])
102
 
        self.assertEqual(self.intervene('a@u-0-2', 'a@u-0-3', 
103
 
                                        self.br1.revision_history()), 
104
 
                         ['a@u-0-3'])
105
 
        self.assertEqual(self.intervene('a@u-0-0', 'a@u-0-5', 
106
 
                                        self.br1.revision_history()), 
107
 
                         ['a@u-0-1', 'a@u-0-2', 'a@u-0-3', 'a@u-0-4', 
108
 
                          'a@u-0-5'])
109
 
        self.assertEqual(self.intervene('a@u-0-0', 'b@u-0-6', 
110
 
                         self.br1.revision_history()), 
111
 
                         ['a@u-0-1', 'a@u-0-2', 'a@u-0-3', 'a@u-0-4', 
112
 
                          'b@u-0-6'])
113
 
        self.assertEqual(self.intervene('a@u-0-0', 'b@u-0-5'), 
114
 
                         ['a@u-0-1', 'a@u-0-2', 'b@u-0-3', 'b@u-0-4', 
115
 
                          'b@u-0-5'])
116
 
        self.assertEqual(self.intervene('b@u-0-3', 'b@u-0-6', 
117
 
                         self.br2.revision_history()), 
118
 
                         ['b@u-0-4', 'b@u-0-5', 'b@u-0-6'])
119
 
        self.assertEqual(self.intervene('b@u-0-6', 'b@u-0-10'), 
120
 
                         ['b@u-0-7', 'b@u-0-8', 'b@u-0-9', 'b@u-0-10'])
121
 
        self.assertEqual(self.intervene('b@u-0-6', 'b@u-0-10', 
122
 
                                        self.br2.revision_history()), 
123
 
                         ['b@u-0-7', 'b@u-0-8', 'b@u-0-9', 'b@u-0-10'])
124
 
        self.assertRaises(NotAncestor, self.intervene, 'b@u-0-10', 'b@u-0-6', 
125
 
                          self.br2.revision_history())
126
 
        self.assertRaises(NoSuchRevision, self.intervene, 'c@u-0-10', 
127
 
                          'b@u-0-6', self.br2.revision_history())
128
 
        self.assertRaises(NoSuchRevision, self.intervene, 'b@u-0-10', 
129
 
                          'c@u-0-6', self.br2.revision_history())
130
 
 
131
 
 
132
 
class TestCommonAncestor(TestCaseInTempDir):
133
 
    """Test checking whether a revision is an ancestor of another revision"""
134
 
 
135
 
    def test_common_ancestor(self):
136
 
        from bzrlib.revision import find_present_ancestors, common_ancestor
137
 
        from bzrlib.revision import MultipleRevisionSources
138
 
        br1, br2 = make_branches()
139
 
        revisions = br1.revision_history()
140
 
        revisions_2 = br2.revision_history()
141
 
        sources = MultipleRevisionSources(br1, br2)
142
 
 
143
 
        expected_ancestors_list = {revisions[3]:(0, 0), 
144
 
                                   revisions[2]:(1, 1),
145
 
                                   revisions_2[4]:(2, 1), 
146
 
                                   revisions[1]:(3, 2),
147
 
                                   revisions_2[3]:(4, 2),
148
 
                                   revisions[0]:(5, 3) }
149
 
        ancestors_list = find_present_ancestors(revisions[3], sources)
150
 
        assert len(expected_ancestors_list) == len(ancestors_list)
151
 
        for key, value in expected_ancestors_list.iteritems():
152
 
            self.assertEqual(ancestors_list[key], value, 
153
 
                              "key %r, %r != %r" % (key, ancestors_list[key],
154
 
                                                    value))
155
 
 
156
 
        self.assertEqual(common_ancestor(revisions[0], revisions[0], sources),
157
 
                          revisions[0])
158
 
        self.assertEqual(common_ancestor(revisions[1], revisions[2], sources),
159
 
                          revisions[1])
160
 
        self.assertEqual(common_ancestor(revisions[1], revisions[1], sources),
161
 
                          revisions[1])
162
 
        self.assertEqual(common_ancestor(revisions[2], revisions_2[4], sources),
163
 
                          revisions[2])
164
 
        self.assertEqual(common_ancestor(revisions[3], revisions_2[4], sources),
165
 
                          revisions_2[4])
166
 
        self.assertEqual(common_ancestor(revisions[4], revisions_2[5], sources),
167
 
                          revisions_2[4])
168
 
        self.assertEqual(common_ancestor(revisions[5], revisions_2[6], sources),
169
 
                          revisions[4])
170
 
        self.assertEqual(common_ancestor(revisions_2[6], revisions[5], sources),
171
 
                          revisions_2[5])
 
63
 
 
64
TEST_CLASSES = [
 
65
    TestIsAncestor,
 
66
    ]