1
# Copyright (C) 2007 John Arbash Meinel <john@arbash-meinel.com>
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
# GNU General Public License for more details.
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
"""Test the Commit functionality."""
24
from bzrlib.plugins.gtk import commit
27
# TODO: All we need is basic ancestry code to test this, we shouldn't need a
28
# TestCaseWithTransport, just a TestCaseWithMemoryTransport or somesuch.
30
class TestPendingRevisions(tests.TestCaseWithTransport):
32
def test_pending_revisions_none(self):
33
tree = self.make_branch_and_tree('.')
36
self.assertIs(None, commit.pending_revisions(tree))
38
def test_pending_revisions_simple(self):
39
tree = self.make_branch_and_tree('tree')
40
rev_id1 = tree.commit('one')
41
tree2 = tree.bzrdir.sprout('tree2').open_workingtree()
42
rev_id2 = tree2.commit('two')
43
tree.merge_from_branch(tree2.branch)
44
self.assertEqual([rev_id1, rev_id2], tree.get_parent_ids())
46
pending_revisions = commit.pending_revisions(tree)
48
self.assertEqual(1, len(pending_revisions))
50
self.assertEqual(rev_id2, pending_revisions[0][0].revision_id)
51
# No children of this revision.
52
self.assertEqual([], pending_revisions[0][1])
54
def test_pending_revisions_with_children(self):
55
tree = self.make_branch_and_tree('tree')
56
rev_id1 = tree.commit('one')
57
tree2 = tree.bzrdir.sprout('tree2').open_workingtree()
58
rev_id2 = tree2.commit('two')
59
rev_id3 = tree2.commit('three')
60
rev_id4 = tree2.commit('four')
61
tree.merge_from_branch(tree2.branch)
62
self.assertEqual([rev_id1, rev_id4], tree.get_parent_ids())
64
pending_revisions = commit.pending_revisions(tree)
66
self.assertEqual(1, len(pending_revisions))
68
self.assertEqual(rev_id4, pending_revisions[0][0].revision_id)
69
# Two children for this revision
70
self.assertEqual(2, len(pending_revisions[0][1]))
71
self.assertEqual(rev_id3, pending_revisions[0][1][0].revision_id)
72
self.assertEqual(rev_id2, pending_revisions[0][1][1].revision_id)
74
def test_pending_revisions_multi_merge(self):
75
tree = self.make_branch_and_tree('tree')
76
rev_id1 = tree.commit('one')
77
tree2 = tree.bzrdir.sprout('tree2').open_workingtree()
78
rev_id2 = tree2.commit('two')
79
rev_id3 = tree2.commit('three')
80
tree3 = tree2.bzrdir.sprout('tree3').open_workingtree()
81
rev_id4 = tree3.commit('four')
82
rev_id5 = tree3.commit('five')
83
tree.merge_from_branch(tree2.branch)
84
tree.merge_from_branch(tree3.branch)
85
self.assertEqual([rev_id1, rev_id3, rev_id5], tree.get_parent_ids())
87
pending_revisions = commit.pending_revisions(tree)
89
self.assertEqual(2, len(pending_revisions))
91
self.assertEqual(rev_id3, pending_revisions[0][0].revision_id)
92
self.assertEqual(rev_id5, pending_revisions[1][0].revision_id)
93
# One child for the first merge
94
self.assertEqual(1, len(pending_revisions[0][1]))
95
self.assertEqual(rev_id2, pending_revisions[0][1][0].revision_id)
96
# One child for the second merge
97
self.assertEqual(1, len(pending_revisions[1][1]))
98
self.assertEqual(rev_id4, pending_revisions[1][1][0].revision_id)
101
class Test_RevToPendingInfo(tests.TestCaseWithTransport):
103
def test_basic_info(self):
104
tree = self.make_branch_and_tree('tree')
105
rev_id = tree.commit('Multiline\ncommit\nmessage',
106
committer='Joe Foo <joe@foo.com>',
107
timestamp=1191012408.674,
110
rev = tree.branch.repository.get_revision(rev_id)
111
rev_dict = commit.CommitDialog._rev_to_pending_info(rev)
112
self.assertEqual({'committer':'Joe Foo',
113
'summary':'Multiline',
115
'revision_id':rev_id,
119
class CommitDialogNoWidgets(commit.CommitDialog):
122
pass # Don't create any widgets here
125
class TestCommitDialog(tests.TestCaseWithTransport):
127
def test_setup_parameters_no_pending(self):
128
tree = self.make_branch_and_tree('tree')
129
rev_id = tree.commit('first')
131
dlg = CommitDialogNoWidgets(tree)
132
self.assertEqual(rev_id, dlg._basis_tree.get_revision_id())
133
self.assertIs(None, dlg._pending)
134
self.assertFalse(dlg._is_checkout)
136
def test_setup_parameters_checkout(self):
137
tree = self.make_branch_and_tree('tree')
138
rev_id = tree.commit('first')
139
tree2 = tree.bzrdir.sprout('tree2').open_workingtree()
140
tree2.branch.bind(tree.branch)
142
dlg = CommitDialogNoWidgets(tree2)
143
self.assertEqual(rev_id, dlg._basis_tree.get_revision_id())
144
self.assertIs(None, dlg._pending)
145
self.assertTrue(dlg._is_checkout)
147
def test_setup_parameters_pending(self):
148
tree = self.make_branch_and_tree('tree')
149
rev_id1 = tree.commit('one')
150
tree2 = tree.bzrdir.sprout('tree2').open_workingtree()
151
rev_id2 = tree2.commit('two')
152
tree.merge_from_branch(tree2.branch)
154
dlg = CommitDialogNoWidgets(tree)
155
self.assertEqual(rev_id1, dlg._basis_tree.get_revision_id())
156
self.assertIsNot(None, dlg._pending)
157
self.assertEqual(1, len(dlg._pending))
158
self.assertEqual(rev_id2, dlg._pending[0][0].revision_id)
160
def test_setup_parameters_delta(self):
161
tree = self.make_branch_and_tree('tree')
162
self.build_tree(['tree/a'])
163
tree.add(['a'], ['a-id'])
165
dlg = CommitDialogNoWidgets(tree)
167
self.assertEqual([], delta.modified)
168
self.assertEqual([], delta.renamed)
169
self.assertEqual([], delta.removed)
170
self.assertEqual([(u'a', 'a-id', 'file')], delta.added)