/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to tests/test_commit.py

  • Committer: Jelmer Vernooij
  • Date: 2011-12-06 16:57:32 UTC
  • Revision ID: jelmer@samba.org-20111206165732-0i7lcllq42wy6tao
Cope with the fact that Option doesn't support the help argument in bzr 2.4

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2007, 2008, 2009, 2011, 2012, 2013 John Arbash Meinel <john@arbash-meinel.com>
 
1
# Copyright (C) 2007, 2008 John Arbash Meinel <john@arbash-meinel.com>
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
17
17
"""Test the Commit functionality."""
18
18
 
19
19
import os
20
 
import subprocess
21
 
from tempfile import NamedTemporaryFile
22
20
 
23
21
from gi.repository import Gtk
24
22
 
31
29
    from bzrlib.tests.features import UnicodeFilenameFeature
32
30
except ImportError: # bzr < 2.5
33
31
    from bzrlib.tests import UnicodeFilenameFeature
34
 
from bzrlib import bencode
 
32
try:
 
33
    from bzrlib import bencode
 
34
except ImportError:
 
35
    from bzrlib.util import bencode
35
36
 
36
37
from bzrlib.plugins.gtk import (
37
38
    commit,
38
39
    commitmsgs,
39
40
    )
40
 
from bzrlib.plugins.gtk.commitmsgs import SavedCommitMessagesManager
41
 
from bzrlib.plugins.gtk.tests import MockMethod
42
41
 
43
42
 
44
43
# TODO: All we need is basic ancestry code to test this, we shouldn't need a
51
50
        tree.commit('one')
52
51
 
53
52
        self.addCleanup(tree.lock_read().unlock)
54
 
        self.assertEquals([], list(commit.pending_revisions(tree)))
 
53
        self.assertIs(None, commit.pending_revisions(tree))
55
54
 
56
55
    def test_pending_revisions_simple(self):
57
56
        tree = self.make_branch_and_tree('tree')
62
61
        self.assertEqual([rev_id1, rev_id2], tree.get_parent_ids())
63
62
 
64
63
        self.addCleanup(tree.lock_read().unlock)
65
 
        pending_revisions = list(commit.pending_revisions(tree))
 
64
        pending_revisions = commit.pending_revisions(tree)
66
65
        # One primary merge
67
66
        self.assertEqual(1, len(pending_revisions))
68
67
        # Revision == rev_id2
81
80
        self.assertEqual([rev_id1, rev_id4], tree.get_parent_ids())
82
81
 
83
82
        self.addCleanup(tree.lock_read().unlock)
84
 
        pending_revisions = list(commit.pending_revisions(tree))
 
83
        pending_revisions = commit.pending_revisions(tree)
85
84
        # One primary merge
86
85
        self.assertEqual(1, len(pending_revisions))
87
86
        # Revision == rev_id2
105
104
        self.assertEqual([rev_id1, rev_id3, rev_id5], tree.get_parent_ids())
106
105
 
107
106
        self.addCleanup(tree.lock_read().unlock)
108
 
        pending_revisions = list(commit.pending_revisions(tree))
 
107
        pending_revisions = commit.pending_revisions(tree)
109
108
        # Two primary merges
110
109
        self.assertEqual(2, len(pending_revisions))
111
110
        # Revision == rev_id2
148
147
 
149
148
class TestCommitDialogSimple(tests.TestCaseWithTransport):
150
149
 
151
 
    def test_init(self):
152
 
        MockMethod.bind(self, CommitDialogNoWidgets, 'setup_params')
153
 
        MockMethod.bind(self, CommitDialogNoWidgets, 'construct')
154
 
        MockMethod.bind(self, CommitDialogNoWidgets, 'fill_in_data')
155
 
 
156
 
        tree = self.make_branch_and_tree('tree')
157
 
        rev_id = tree.commit('first')
158
 
        dlg = CommitDialogNoWidgets(tree)
159
 
        self.assertIs(tree, dlg._wt)
160
 
        self.assertIs(None, dlg._selected)
161
 
        self.assertTrue(dlg._enable_per_file_commits)
162
 
        self.assertTrue(dlg._commit_all_changes)
163
 
        self.assertIs(None, dlg.committed_revision_id)
164
 
        self.assertIs(None, dlg._last_selected_file)
165
 
        self.assertIsInstance(
166
 
            dlg._saved_commit_messages_manager, SavedCommitMessagesManager)
167
 
        self.assertTrue(CommitDialogNoWidgets.setup_params.called)
168
 
        self.assertTrue(CommitDialogNoWidgets.construct.called)
169
 
        self.assertTrue(CommitDialogNoWidgets.fill_in_data.called)
170
 
 
171
150
    def test_setup_parameters_no_pending(self):
172
151
        tree = self.make_branch_and_tree('tree')
173
152
        rev_id = tree.commit('first')
174
153
 
175
154
        dlg = CommitDialogNoWidgets(tree)
176
155
        self.assertEqual(rev_id, dlg._basis_tree.get_revision_id())
177
 
        self.assertEquals([], dlg._pending)
 
156
        self.assertIs(None, dlg._pending)
178
157
        self.assertFalse(dlg._is_checkout)
179
158
 
180
159
    def test_setup_parameters_checkout(self):
185
164
 
186
165
        dlg = CommitDialogNoWidgets(tree2)
187
166
        self.assertEqual(rev_id, dlg._basis_tree.get_revision_id())
188
 
        self.assertEquals([], dlg._pending)
 
167
        self.assertIs(None, dlg._pending)
189
168
        self.assertTrue(dlg._is_checkout)
190
169
 
191
170
    def test_setup_parameters_pending(self):
216
195
        self.assertEqual([], delta.removed)
217
196
        self.assertEqual([(u'a', 'a-id', 'file')], delta.added)
218
197
 
219
 
    def test_on_treeview_files_cursor_changed_no_selection(self):
220
 
        MockMethod.bind(self, CommitDialogNoWidgets, '_update_per_file_info')
221
 
        tree = self.make_branch_and_tree('tree')
222
 
        rev_id = tree.commit('first')
223
 
        dlg = CommitDialogNoWidgets(tree)
224
 
        treeview = Gtk.TreeView()
225
 
        dlg._on_treeview_files_cursor_changed(treeview)
226
 
        self.assertFalse(CommitDialogNoWidgets._update_per_file_info.called)
227
 
 
228
 
    def test_on_treeview_files_cursor_changed_with_destroyed_treeview(self):
229
 
        MockMethod.bind(self, CommitDialogNoWidgets, '_update_per_file_info')
230
 
        tree = self.make_branch_and_tree('tree')
231
 
        rev_id = tree.commit('first')
232
 
        dlg = CommitDialogNoWidgets(tree)
233
 
        treeview = Gtk.TreeView()
234
 
        treeview.destroy()
235
 
        dlg._on_treeview_files_cursor_changed(treeview)
236
 
        self.assertFalse(CommitDialogNoWidgets._update_per_file_info.called)
237
 
 
238
 
    def test_get_line_height(self):
239
 
        tree = self.make_branch_and_tree('tree')
240
 
        dlg = CommitDialogNoWidgets(tree)
241
 
        textview = Gtk.TextView()
242
 
        line_height = dlg.get_line_height(textview)
243
 
        self.assertIsInstance(line_height, int)
244
 
 
245
198
 
246
199
class TestCommitDialog(tests.TestCaseWithTransport):
247
200
 
346
299
 
347
300
        dlg = commit.CommitDialog(tree)
348
301
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
349
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
302
        self.assertEqual([(None, None, True, 'All Files', ''),
350
303
                          ('a-id', 'a', True, 'a', 'added'),
351
304
                          ('b-id', 'b', True, 'b/', 'added'),
352
305
                          ('c-id', 'b/c', True, 'b/c', 'added'),
363
316
 
364
317
        dlg = commit.CommitDialog(tree)
365
318
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
366
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
319
        self.assertEqual([(None, None, True, 'All Files', ''),
367
320
                          ('b-id', 'd', True, 'b/ => d/', 'renamed'),
368
321
                          ('a-id', 'd/a', True, 'a => d/a', 'renamed'),
369
322
                         ], values)
378
331
 
379
332
        dlg = commit.CommitDialog(tree)
380
333
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
381
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
334
        self.assertEqual([(None, None, True, 'All Files', ''),
382
335
                          ('a-id', 'a', True, 'a', 'modified'),
383
336
                         ], values)
384
337
 
398
351
 
399
352
        dlg = commit.CommitDialog(tree)
400
353
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
401
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
354
        self.assertEqual([(None, None, True, 'All Files', ''),
402
355
                          ('b-id', 'd', True, 'b/ => d/', 'renamed'),
403
356
                          ('a-id', 'd/a', True, 'a => d/a', 'renamed and modified'),
404
357
                          ('c-id', 'd/c', True, 'd/c', 'modified'),
421
374
 
422
375
        dlg = commit.CommitDialog(tree)
423
376
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
424
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
377
        self.assertEqual([(None, None, True, 'All Files', ''),
425
378
                          ('a-id', 'a', True, 'a => a/', 'kind changed'),
426
379
                          # ('b-id', 'c', True, 'b => c/', 'renamed and modified'),
427
380
                         ], values)
437
390
 
438
391
        dlg = commit.CommitDialog(tree)
439
392
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
440
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
393
        self.assertEqual([(None, None, True, 'All Files', ''),
441
394
                          ('a-id', 'a', True, 'a', 'removed'),
442
395
                          ('b-id', 'b', True, 'b/', 'removed'),
443
396
                         ], values)
452
405
 
453
406
        dlg = commit.CommitDialog(tree, selected='a')
454
407
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
455
 
        self.assertEqual([("", "", False, 'All Files', ''),
 
408
        self.assertEqual([(None, None, False, 'All Files', ''),
456
409
                          ('a-id', 'a', True, 'a', 'added'),
457
410
                          ('b-id', 'b', False, 'b/', 'added'),
458
411
                         ], values)
636
589
        tree.add(['a', 'b'], ['a-id', 'b-id'])
637
590
 
638
591
        dlg = commit.CommitDialog(tree)
639
 
        self.assertEqual([("", "", True),
 
592
        self.assertEqual([(None, None, True),
640
593
                          ('a-id', 'a', True),
641
594
                          ('b-id', 'b', True),
642
595
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
651
604
 
652
605
        # Toggle a single entry should set just that entry to False
653
606
        dlg._toggle_commit(None, 1, dlg._files_store)
654
 
        self.assertEqual([("", "", True),
 
607
        self.assertEqual([(None, None, True),
655
608
                          ('a-id', 'a', False),
656
609
                          ('b-id', 'b', True),
657
610
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
658
611
 
659
612
        # Toggling the main entry should set all entries
660
613
        dlg._toggle_commit(None, 0, dlg._files_store)
661
 
        self.assertEqual([("", "", False),
 
614
        self.assertEqual([(None, None, False),
662
615
                          ('a-id', 'a', False),
663
616
                          ('b-id', 'b', False),
664
617
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
665
618
 
666
619
        dlg._toggle_commit(None, 2, dlg._files_store)
667
 
        self.assertEqual([("", "", False),
 
620
        self.assertEqual([(None, None, False),
668
621
                          ('a-id', 'a', False),
669
622
                          ('b-id', 'b', True),
670
623
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
671
624
 
672
625
        dlg._toggle_commit(None, 0, dlg._files_store)
673
 
        self.assertEqual([("", "", True),
 
626
        self.assertEqual([(None, None, True),
674
627
                          ('a-id', 'a', True),
675
628
                          ('b-id', 'b', True),
676
629
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
1185
1138
            'post_uncommit', commitmsgs.save_commit_messages, None)
1186
1139
 
1187
1140
    def _get_file_info_dict(self, rank):
1188
 
        file_info = [dict(path='a', file_id='a-id',
1189
 
                          message='a {msg} %d' % rank),
1190
 
                     dict(path='b', file_id='b-id',
1191
 
                          message='b msg %d' % rank)]
 
1141
        file_info = [dict(path='a', file_id='a-id', message='a msg %d' % rank),
 
1142
                     dict(path='b', file_id='b-id', message='b msg %d' % rank)]
1192
1143
        return file_info
1193
1144
 
1194
1145
    def _get_file_info_revprops(self, rank):
1196
1147
        return {'file-info': bencode.bencode(file_info_prop).decode('UTF-8')}
1197
1148
 
1198
1149
    def _get_commit_message(self):
1199
 
        return self.config.get_user_option(
1200
 
            'gtk_global_commit_message', expand=False)
 
1150
        return self.config.get_user_option('gtk_global_commit_message')
1201
1151
 
1202
1152
    def _get_file_commit_messages(self):
1203
 
        return self.config.get_user_option(
1204
 
            'gtk_file_commit_messages', expand=False)
 
1153
        return self.config.get_user_option('gtk_file_commit_messages')
1205
1154
 
1206
1155
 
1207
1156
class TestUncommitHook(TestSavedCommitMessages):
1223
1172
    def test_uncommit_one_by_one(self):
1224
1173
        uncommit.uncommit(self.tree.branch, tree=self.tree)
1225
1174
        self.assertEquals(u'three', self._get_commit_message())
1226
 
        self.assertEquals(u'd4:a-id9:a {msg} 34:b-id7:b msg 3e',
 
1175
        self.assertEquals(u'd4:a-id7:a msg 34:b-id7:b msg 3e',
1227
1176
                          self._get_file_commit_messages())
1228
1177
 
1229
1178
        uncommit.uncommit(self.tree.branch, tree=self.tree)
1230
1179
        self.assertEquals(u'two\n******\nthree', self._get_commit_message())
1231
 
        self.assertEquals(u'd4:a-id26:a {msg} 2\n******\na {msg} 3'
 
1180
        self.assertEquals(u'd4:a-id22:a msg 2\n******\na msg 3'
1232
1181
                          '4:b-id22:b msg 2\n******\nb msg 3e',
1233
1182
                          self._get_file_commit_messages())
1234
1183
 
1235
1184
        uncommit.uncommit(self.tree.branch, tree=self.tree)
1236
1185
        self.assertEquals(u'one\n******\ntwo\n******\nthree',
1237
1186
                          self._get_commit_message())
1238
 
        self.assertEquals(
1239
 
            u'd4:a-id43:a {msg} 1\n******\na {msg} 2\n******\na {msg} 3'
1240
 
            '4:b-id37:b msg 1\n******\nb msg 2\n******\nb msg 3e',
1241
 
            self._get_file_commit_messages())
 
1187
        self.assertEquals(u'd4:a-id37:a msg 1\n******\na msg 2\n******\na msg 3'
 
1188
                          '4:b-id37:b msg 1\n******\nb msg 2\n******\nb msg 3e',
 
1189
                          self._get_file_commit_messages())
1242
1190
 
1243
1191
    def test_uncommit_all_at_once(self):
1244
1192
        uncommit.uncommit(self.tree.branch, tree=self.tree, revno=1)
1245
1193
        self.assertEquals(u'one\n******\ntwo\n******\nthree',
1246
1194
                          self._get_commit_message())
1247
 
        self.assertEquals(
1248
 
            u'd4:a-id43:a {msg} 1\n******\na {msg} 2\n******\na {msg} 3'
1249
 
            '4:b-id37:b msg 1\n******\nb msg 2\n******\nb msg 3e',
1250
 
            self._get_file_commit_messages())
 
1195
        self.assertEquals(u'd4:a-id37:a msg 1\n******\na msg 2\n******\na msg 3'
 
1196
                          '4:b-id37:b msg 1\n******\nb msg 2\n******\nb msg 3e',
 
1197
                          self._get_file_commit_messages())
1251
1198
 
1252
1199
 
1253
1200
class TestReusingSavedCommitMessages(TestSavedCommitMessages, QuestionHelpers):
1261
1208
        self.tree.add(['a'], ['a-id'])
1262
1209
        self.tree.add(['b'], ['b-id'])
1263
1210
        rev1 = self.tree.commit('one', revprops=self._get_file_info_revprops(1))
1264
 
        rev2 = self.tree.commit('two{x}',
1265
 
                                revprops=self._get_file_info_revprops(2))
 
1211
        rev2 = self.tree.commit('two', revprops=self._get_file_info_revprops(2))
1266
1212
        uncommit.uncommit(self.tree.branch, tree=self.tree)
1267
1213
        self.build_tree_contents([('tree/a', 'new a content\n'),
1268
1214
                                  ('tree/b', 'new b content'),])
1277
1223
 
1278
1224
    def test_setup_saved_messages(self):
1279
1225
        # Check the initial setup
1280
 
        self.assertEquals(u'two{x}', self._get_commit_message())
1281
 
        self.assertEquals(u'd4:a-id9:a {msg} 24:b-id7:b msg 2e',
 
1226
        self.assertEquals(u'two', self._get_commit_message())
 
1227
        self.assertEquals(u'd4:a-id7:a msg 24:b-id7:b msg 2e',
1282
1228
                          self._get_file_commit_messages())
1283
1229
 
1284
1230
    def test_messages_are_reloaded(self):
1285
1231
        dlg = self._get_commit_dialog(self.tree)
1286
 
        self.assertEquals(u'two{x}', dlg._get_global_commit_message())
 
1232
        self.assertEquals(u'two', dlg._get_global_commit_message())
1287
1233
        self.assertEquals(([u'a', u'b'],
1288
1234
                           [{ 'path': 'a',
1289
 
                             'file_id': 'a-id', 'message': 'a {msg} 2',},
 
1235
                             'file_id': 'a-id', 'message': 'a msg 2',},
1290
1236
                           {'path': 'b',
1291
1237
                            'file_id': 'b-id', 'message': 'b msg 2',}],),
1292
1238
                          dlg._get_specific_files())
1301
1247
        dlg = self._get_commit_dialog(self.tree)
1302
1248
        self._set_question_yes(dlg) # Save messages
1303
1249
        dlg._do_cancel()
1304
 
        self.assertEquals(u'two{x}', self._get_commit_message())
1305
 
        self.assertEquals(u'd4:a-id9:a {msg} 24:b-id7:b msg 2e',
 
1250
        self.assertEquals(u'two', self._get_commit_message())
 
1251
        self.assertEquals(u'd4:a-id7:a msg 24:b-id7:b msg 2e',
1306
1252
                          self._get_file_commit_messages())
1307
1253
 
1308
1254
    def test_messages_are_cleared_on_cancel_if_required(self):
1312
1258
        self.assertEquals(u'', self._get_commit_message())
1313
1259
        self.assertEquals(u'de',
1314
1260
                          self._get_file_commit_messages())
1315
 
 
1316
 
 
1317
 
class BzrHandlePatchTestCase(tests.TestCase):
1318
 
 
1319
 
    def setUp(self):
1320
 
        top = os.path.abspath(os.path.join(
1321
 
            os.path.dirname(__file__), os.pardir))
1322
 
        self.script = os.path.join(top, 'bzr-handle-patch')
1323
 
        self.env = dict(os.environ)
1324
 
        self.env['BZR_PLUGINS_AT'] = 'gtk@%s' % top
1325
 
        self.patch = NamedTemporaryFile()
1326
 
        self.patch.write('\n'.join([
1327
 
            "=== added file '_test.txt'",
1328
 
            "--- _test.txt      1970-01-01 00:00:00 +0000",
1329
 
            "+++ _test.txt      2012-02-03 20:00:34 +0000",
1330
 
            "@@ -0,0 +1,1 @@",
1331
 
            "+hello",
1332
 
            ]))
1333
 
        self.patch.flush()
1334
 
        super(BzrHandlePatchTestCase, self).setUp()
1335
 
 
1336
 
    def test_smoketest(self):
1337
 
        # This is a smoke test to verify the process starts.
1338
 
        bzr_notify = subprocess.Popen(
1339
 
            [self.script, self.patch.name, 'test'],
1340
 
            stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=self.env)
1341
 
        stdout, stderr = bzr_notify.communicate()
1342
 
        self.assertEqual('', stdout)
1343
 
        self.assertEqual('', stderr)