/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: 2012-07-09 15:23:26 UTC
  • mto: This revision was merged to the branch mainline in revision 794.
  • Revision ID: jelmer@samba.org-20120709152326-dzxb8zoz0btull7n
Remove bzr-notify.

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
"""Test the Commit functionality."""
18
18
 
19
19
import os
 
20
import subprocess
 
21
from tempfile import NamedTemporaryFile
20
22
 
21
23
from gi.repository import Gtk
22
24
 
26
28
    uncommit,
27
29
    )
28
30
try:
29
 
    from bzrlib import bencode
30
 
except ImportError:
31
 
    from bzrlib.util import bencode
 
31
    from bzrlib.tests.features import UnicodeFilenameFeature
 
32
except ImportError: # bzr < 2.5
 
33
    from bzrlib.tests import UnicodeFilenameFeature
 
34
from bzrlib import bencode
32
35
 
33
 
from bzrlib.plugins.gtk import commit
 
36
from bzrlib.plugins.gtk import (
 
37
    commit,
 
38
    commitmsgs,
 
39
    )
 
40
from bzrlib.plugins.gtk.commitmsgs import SavedCommitMessagesManager
 
41
from bzrlib.plugins.gtk.tests import MockMethod
34
42
 
35
43
 
36
44
# TODO: All we need is basic ancestry code to test this, we shouldn't need a
42
50
        tree = self.make_branch_and_tree('.')
43
51
        tree.commit('one')
44
52
 
45
 
        self.assertIs(None, commit.pending_revisions(tree))
 
53
        self.addCleanup(tree.lock_read().unlock)
 
54
        self.assertEquals([], list(commit.pending_revisions(tree)))
46
55
 
47
56
    def test_pending_revisions_simple(self):
48
57
        tree = self.make_branch_and_tree('tree')
52
61
        tree.merge_from_branch(tree2.branch)
53
62
        self.assertEqual([rev_id1, rev_id2], tree.get_parent_ids())
54
63
 
55
 
        pending_revisions = commit.pending_revisions(tree)
 
64
        self.addCleanup(tree.lock_read().unlock)
 
65
        pending_revisions = list(commit.pending_revisions(tree))
56
66
        # One primary merge
57
67
        self.assertEqual(1, len(pending_revisions))
58
68
        # Revision == rev_id2
70
80
        tree.merge_from_branch(tree2.branch)
71
81
        self.assertEqual([rev_id1, rev_id4], tree.get_parent_ids())
72
82
 
73
 
        pending_revisions = commit.pending_revisions(tree)
 
83
        self.addCleanup(tree.lock_read().unlock)
 
84
        pending_revisions = list(commit.pending_revisions(tree))
74
85
        # One primary merge
75
86
        self.assertEqual(1, len(pending_revisions))
76
87
        # Revision == rev_id2
93
104
        tree.merge_from_branch(tree3.branch, force=True)
94
105
        self.assertEqual([rev_id1, rev_id3, rev_id5], tree.get_parent_ids())
95
106
 
96
 
        pending_revisions = commit.pending_revisions(tree)
 
107
        self.addCleanup(tree.lock_read().unlock)
 
108
        pending_revisions = list(commit.pending_revisions(tree))
97
109
        # Two primary merges
98
110
        self.assertEqual(2, len(pending_revisions))
99
111
        # Revision == rev_id2
136
148
 
137
149
class TestCommitDialogSimple(tests.TestCaseWithTransport):
138
150
 
 
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
 
139
171
    def test_setup_parameters_no_pending(self):
140
172
        tree = self.make_branch_and_tree('tree')
141
173
        rev_id = tree.commit('first')
142
174
 
143
175
        dlg = CommitDialogNoWidgets(tree)
144
176
        self.assertEqual(rev_id, dlg._basis_tree.get_revision_id())
145
 
        self.assertIs(None, dlg._pending)
 
177
        self.assertEquals([], dlg._pending)
146
178
        self.assertFalse(dlg._is_checkout)
147
179
 
148
180
    def test_setup_parameters_checkout(self):
153
185
 
154
186
        dlg = CommitDialogNoWidgets(tree2)
155
187
        self.assertEqual(rev_id, dlg._basis_tree.get_revision_id())
156
 
        self.assertIs(None, dlg._pending)
 
188
        self.assertEquals([], dlg._pending)
157
189
        self.assertTrue(dlg._is_checkout)
158
190
 
159
191
    def test_setup_parameters_pending(self):
184
216
        self.assertEqual([], delta.removed)
185
217
        self.assertEqual([(u'a', 'a-id', 'file')], delta.added)
186
218
 
 
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
 
187
245
 
188
246
class TestCommitDialog(tests.TestCaseWithTransport):
189
247
 
211
269
 
212
270
        commit_col = dlg._treeview_files.get_column(0)
213
271
        self.assertEqual('Commit', commit_col.get_title())
214
 
        renderer = commit_col.get_cell_renderers()[0]
 
272
        renderer = commit_col.get_cells()[0]
215
273
        self.assertTrue(renderer.get_property('activatable'))
216
274
 
217
275
        self.assertEqual('Commit all changes',
236
294
 
237
295
        commit_col = dlg._treeview_files.get_column(0)
238
296
        self.assertEqual('Commit*', commit_col.get_title())
239
 
        renderer = commit_col.get_cell_renderers()[0]
 
297
        renderer = commit_col.get_cells()[0]
240
298
        self.assertFalse(renderer.get_property('activatable'))
241
299
 
242
300
        values = [(r[0], r[1], r[2], r[3]) for r in dlg._pending_store]
288
346
 
289
347
        dlg = commit.CommitDialog(tree)
290
348
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
291
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
349
        self.assertEqual([("", "", True, 'All Files', ''),
292
350
                          ('a-id', 'a', True, 'a', 'added'),
293
351
                          ('b-id', 'b', True, 'b/', 'added'),
294
352
                          ('c-id', 'b/c', True, 'b/c', 'added'),
305
363
 
306
364
        dlg = commit.CommitDialog(tree)
307
365
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
308
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
366
        self.assertEqual([("", "", True, 'All Files', ''),
309
367
                          ('b-id', 'd', True, 'b/ => d/', 'renamed'),
310
368
                          ('a-id', 'd/a', True, 'a => d/a', 'renamed'),
311
369
                         ], values)
320
378
 
321
379
        dlg = commit.CommitDialog(tree)
322
380
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
323
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
381
        self.assertEqual([("", "", True, 'All Files', ''),
324
382
                          ('a-id', 'a', True, 'a', 'modified'),
325
383
                         ], values)
326
384
 
340
398
 
341
399
        dlg = commit.CommitDialog(tree)
342
400
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
343
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
401
        self.assertEqual([("", "", True, 'All Files', ''),
344
402
                          ('b-id', 'd', True, 'b/ => d/', 'renamed'),
345
403
                          ('a-id', 'd/a', True, 'a => d/a', 'renamed and modified'),
346
404
                          ('c-id', 'd/c', True, 'd/c', 'modified'),
363
421
 
364
422
        dlg = commit.CommitDialog(tree)
365
423
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
366
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
424
        self.assertEqual([("", "", True, 'All Files', ''),
367
425
                          ('a-id', 'a', True, 'a => a/', 'kind changed'),
368
426
                          # ('b-id', 'c', True, 'b => c/', 'renamed and modified'),
369
427
                         ], values)
379
437
 
380
438
        dlg = commit.CommitDialog(tree)
381
439
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
382
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
440
        self.assertEqual([("", "", True, 'All Files', ''),
383
441
                          ('a-id', 'a', True, 'a', 'removed'),
384
442
                          ('b-id', 'b', True, 'b/', 'removed'),
385
443
                         ], values)
386
444
        # All Files should be selected
387
 
        self.assertEqual(((0,), None), dlg._treeview_files.get_cursor())
 
445
        self.assertEqual(
 
446
            (Gtk.TreePath(path=0), None), dlg._treeview_files.get_cursor())
388
447
 
389
448
    def test_filelist_with_selected(self):
390
449
        tree = self.make_branch_and_tree('tree')
393
452
 
394
453
        dlg = commit.CommitDialog(tree, selected='a')
395
454
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
396
 
        self.assertEqual([(None, None, False, 'All Files', ''),
 
455
        self.assertEqual([("", "", False, 'All Files', ''),
397
456
                          ('a-id', 'a', True, 'a', 'added'),
398
457
                          ('b-id', 'b', False, 'b/', 'added'),
399
458
                         ], values)
400
459
        # This file should also be selected in the file list, rather than the
401
460
        # 'All Files' selection
402
 
        self.assertEqual(((1,), None), dlg._treeview_files.get_cursor())
 
461
        self.assertEqual(
 
462
            (Gtk.TreePath(path=1), None), dlg._treeview_files.get_cursor())
403
463
 
404
464
    def test_diff_view(self):
405
465
        tree = self.make_branch_and_tree('tree')
465
525
        self.assertFalse(dlg._file_message_expander.get_expanded())
466
526
        self.assertFalse(dlg._file_message_expander.get_property('sensitive'))
467
527
 
468
 
        dlg._treeview_files.set_cursor((1,))
 
528
        dlg._treeview_files.set_cursor(
 
529
            Gtk.TreePath(path=1), None, False)
469
530
        self.assertEqual('Diff for a', dlg._diff_label.get_text())
470
531
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
471
532
                                    diff_buffer.get_end_iter(),
483
544
        self.assertTrue(dlg._file_message_expander.get_expanded())
484
545
        self.assertTrue(dlg._file_message_expander.get_property('sensitive'))
485
546
 
486
 
        dlg._treeview_files.set_cursor((2,))
 
547
        dlg._treeview_files.set_cursor(
 
548
            Gtk.TreePath(path=2), None, False)
487
549
        self.assertEqual('Diff for b', dlg._diff_label.get_text())
488
550
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
489
551
                                    diff_buffer.get_end_iter(),
501
563
        self.assertTrue(dlg._file_message_expander.get_expanded())
502
564
        self.assertTrue(dlg._file_message_expander.get_property('sensitive'))
503
565
 
504
 
        dlg._treeview_files.set_cursor((0,))
 
566
        dlg._treeview_files.set_cursor(
 
567
            Gtk.TreePath(path=0), None, False)
505
568
        self.assertEqual('Diff for All Files', dlg._diff_label.get_text())
506
569
        self.assertEqual('File commit message',
507
570
                         dlg._file_message_expander.get_label())
531
594
        self.assertFalse(dlg._file_message_expander.get_property('sensitive'))
532
595
        self.assertEqual('', get_file_text())
533
596
 
534
 
        dlg._treeview_files.set_cursor((1,))
 
597
        dlg._treeview_files.set_cursor(
 
598
            Gtk.TreePath(path=1), None, False)
535
599
        self.assertEqual('Commit message for a',
536
600
                         dlg._file_message_expander.get_label())
537
601
        self.assertTrue(dlg._file_message_expander.get_expanded())
544
608
        # We should have updated the ListStore with the new file commit info
545
609
        self.assertEqual('Some text\nfor a\n', get_saved_text(1))
546
610
 
547
 
        dlg._treeview_files.set_cursor((2,))
 
611
        dlg._treeview_files.set_cursor(
 
612
            Gtk.TreePath(path=2), None, False)
548
613
        self.assertEqual('Commit message for b/',
549
614
                         dlg._file_message_expander.get_label())
550
615
        self.assertTrue(dlg._file_message_expander.get_expanded())
555
620
        dlg._set_file_commit_message('More text\nfor b\n')
556
621
        # Now switch back to 'a'. The message should be saved, and the buffer
557
622
        # should be updated with the other text
558
 
        dlg._treeview_files.set_cursor((1,))
 
623
        dlg._treeview_files.set_cursor(
 
624
            Gtk.TreePath(path=1), None, False)
559
625
        self.assertEqual('More text\nfor b\n', get_saved_text(2))
560
626
        self.assertEqual('Commit message for a',
561
627
                         dlg._file_message_expander.get_label())
570
636
        tree.add(['a', 'b'], ['a-id', 'b-id'])
571
637
 
572
638
        dlg = commit.CommitDialog(tree)
573
 
        self.assertEqual([(None, None, True),
 
639
        self.assertEqual([("", "", True),
574
640
                          ('a-id', 'a', True),
575
641
                          ('b-id', 'b', True),
576
642
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
581
647
        #       do with. So instead, we just call toggle directly, and assume
582
648
        #       that toggle is hooked in correctly
583
649
        # column = dlg._treeview_files.get_column(0)
584
 
        # renderer = column.get_cell_renderers()[0]
 
650
        # renderer = column.get_cells()[0]
585
651
 
586
652
        # Toggle a single entry should set just that entry to False
587
653
        dlg._toggle_commit(None, 1, dlg._files_store)
588
 
        self.assertEqual([(None, None, True),
 
654
        self.assertEqual([("", "", True),
589
655
                          ('a-id', 'a', False),
590
656
                          ('b-id', 'b', True),
591
657
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
592
658
 
593
659
        # Toggling the main entry should set all entries
594
660
        dlg._toggle_commit(None, 0, dlg._files_store)
595
 
        self.assertEqual([(None, None, False),
 
661
        self.assertEqual([("", "", False),
596
662
                          ('a-id', 'a', False),
597
663
                          ('b-id', 'b', False),
598
664
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
599
665
 
600
666
        dlg._toggle_commit(None, 2, dlg._files_store)
601
 
        self.assertEqual([(None, None, False),
 
667
        self.assertEqual([("", "", False),
602
668
                          ('a-id', 'a', False),
603
669
                          ('b-id', 'b', True),
604
670
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
605
671
 
606
672
        dlg._toggle_commit(None, 0, dlg._files_store)
607
 
        self.assertEqual([(None, None, True),
 
673
        self.assertEqual([("", "", True),
608
674
                          ('a-id', 'a', True),
609
675
                          ('b-id', 'b', True),
610
676
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
634
700
        dlg._commit_selected_radio.set_active(True)
635
701
        self.assertEqual((['a_file', 'b_dir'], []), dlg._get_specific_files())
636
702
 
637
 
        dlg._treeview_files.set_cursor((1,))
 
703
        dlg._treeview_files.set_cursor(
 
704
            Gtk.TreePath(path=1), None, False)
638
705
        dlg._set_file_commit_message('Test\nmessage\nfor a_file\n')
639
 
        dlg._treeview_files.set_cursor((2,))
 
706
        dlg._treeview_files.set_cursor(
 
707
            Gtk.TreePath(path=2), None, False)
640
708
        dlg._set_file_commit_message('message\nfor b_dir\n')
641
709
 
642
710
        self.assertEqual((['a_file', 'b_dir'],
662
730
        dlg._commit_selected_radio.set_active(True)
663
731
        self.assertEqual((['a_file', 'b_dir'], []), dlg._get_specific_files())
664
732
 
665
 
        dlg._treeview_files.set_cursor((1,))
 
733
        dlg._treeview_files.set_cursor(
 
734
            Gtk.TreePath(path=1), None, False)
666
735
        dlg._set_file_commit_message('Test\r\nmessage\rfor a_file\n')
667
 
        dlg._treeview_files.set_cursor((2,))
 
736
        dlg._treeview_files.set_cursor(
 
737
            Gtk.TreePath(path=2), None, False)
668
738
        dlg._set_file_commit_message('message\r\nfor\nb_dir\r')
669
739
 
670
740
        self.assertEqual((['a_file', 'b_dir'],
977
1047
 
978
1048
        dlg = commit.CommitDialog(tree)
979
1049
        dlg._commit_selected_radio.set_active(True) # enable partial
980
 
        dlg._treeview_files.set_cursor((1,))
 
1050
        dlg._treeview_files.set_cursor(
 
1051
            Gtk.TreePath(path=1), None, False)
981
1052
        dlg._set_file_commit_message('Message for A\n')
982
 
        dlg._treeview_files.set_cursor((2,))
 
1053
        dlg._treeview_files.set_cursor(
 
1054
            Gtk.TreePath(path=2), None, False)
983
1055
        dlg._set_file_commit_message('Message for B\n')
984
1056
        dlg._toggle_commit(None, 2, dlg._files_store) # unset 'b'
985
1057
        dlg._set_global_commit_message('Commit just "a"')
1012
1084
        tree.merge_from_branch(tree2.branch)
1013
1085
 
1014
1086
        dlg = commit.CommitDialog(tree)
1015
 
        dlg._treeview_files.set_cursor((1,)) # 'a'
 
1087
        dlg._treeview_files.set_cursor(
 
1088
            Gtk.TreePath(path=1), None, False) # 'a'
1016
1089
        dlg._set_file_commit_message('Message for A\n')
1017
1090
        # No message for 'B'
1018
1091
        dlg._set_global_commit_message('Merging from "tree2"\n')
1035
1108
                         bencode.bdecode(file_info.encode('UTF-8')))
1036
1109
 
1037
1110
    def test_commit_unicode_messages(self):
1038
 
        self.requireFeature(tests.UnicodeFilenameFeature)
 
1111
        self.requireFeature(UnicodeFilenameFeature)
1039
1112
 
1040
1113
        tree = self.make_branch_and_tree('tree')
1041
1114
        tree.branch.get_config().set_user_option('per_file_commits', 'true')
1043
1116
        tree.add(['a', u'\u03a9'], ['a-id', 'omega-id'])
1044
1117
 
1045
1118
        dlg = commit.CommitDialog(tree)
1046
 
        dlg._treeview_files.set_cursor((1,)) # 'a'
 
1119
        dlg._treeview_files.set_cursor(
 
1120
            Gtk.TreePath(path=1), None, False) # 'a'
1047
1121
        dlg._set_file_commit_message(u'Test \xfan\xecc\xf6de\n')
1048
 
        dlg._treeview_files.set_cursor((2,)) # omega
 
1122
        dlg._treeview_files.set_cursor(
 
1123
            Gtk.TreePath(path=2), None, False) # omega
1049
1124
        dlg._set_file_commit_message(u'\u03a9 is the end of all things.\n')
1050
1125
        dlg._set_global_commit_message(u'\u03a9 and \xfan\xecc\xf6de\n')
1051
1126
 
1107
1182
        super(TestSavedCommitMessages, self).setUp()
1108
1183
        # Install our hook
1109
1184
        branch.Branch.hooks.install_named_hook(
1110
 
            'post_uncommit', commit.save_commit_messages, None)
 
1185
            'post_uncommit', commitmsgs.save_commit_messages, None)
1111
1186
 
1112
1187
    def _get_file_info_dict(self, rank):
1113
1188
        file_info = [dict(path='a', file_id='a-id', message='a msg %d' % rank),
1230
1305
        self.assertEquals(u'', self._get_commit_message())
1231
1306
        self.assertEquals(u'de',
1232
1307
                          self._get_file_commit_messages())
 
1308
 
 
1309
 
 
1310
class BzrHandlePatchTestCase(tests.TestCase):
 
1311
 
 
1312
    def setUp(self):
 
1313
        top = os.path.abspath(os.path.join(
 
1314
            os.path.dirname(__file__), os.pardir))
 
1315
        self.script = os.path.join(top, 'bzr-handle-patch')
 
1316
        self.env = dict(os.environ)
 
1317
        self.env['BZR_PLUGINS_AT'] = 'gtk@%s' % top
 
1318
        self.patch = NamedTemporaryFile()
 
1319
        self.patch.write('\n'.join([
 
1320
            "=== added file '_test.txt'",
 
1321
            "--- _test.txt      1970-01-01 00:00:00 +0000",
 
1322
            "+++ _test.txt      2012-02-03 20:00:34 +0000",
 
1323
            "@@ -0,0 +1,1 @@",
 
1324
            "+hello",
 
1325
            ]))
 
1326
        self.patch.flush()
 
1327
        super(BzrHandlePatchTestCase, self).setUp()
 
1328
 
 
1329
    def test_smoketest(self):
 
1330
        # This is a smoke test to verify the process starts.
 
1331
        bzr_notify = subprocess.Popen(
 
1332
            [self.script, self.patch.name, 'test'],
 
1333
            stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=self.env)
 
1334
        stdout, stderr = bzr_notify.communicate()
 
1335
        self.assertEqual('', stdout)
 
1336
        self.assertEqual('', stderr)