/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: Curtis Hovey
  • Date: 2012-02-03 19:49:55 UTC
  • mto: This revision was merged to the branch mainline in revision 773.
  • Revision ID: sinzui.is@verizon.net-20120203194955-69jvr0mgu8igea0i
Updated bzr-notify to gtk3.

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
    uncommit,
27
27
    )
28
28
try:
29
 
    from bzrlib import bencode
30
 
except ImportError:
31
 
    from bzrlib.util import bencode
 
29
    from bzrlib.tests.features import UnicodeFilenameFeature
 
30
except ImportError: # bzr < 2.5
 
31
    from bzrlib.tests import UnicodeFilenameFeature
 
32
from bzrlib import bencode
32
33
 
33
 
from bzrlib.plugins.gtk import commit
 
34
from bzrlib.plugins.gtk import (
 
35
    commit,
 
36
    commitmsgs,
 
37
    )
 
38
from bzrlib.plugins.gtk.commitmsgs import SavedCommitMessagesManager
 
39
from bzrlib.plugins.gtk.tests import MockMethod
34
40
 
35
41
 
36
42
# TODO: All we need is basic ancestry code to test this, we shouldn't need a
42
48
        tree = self.make_branch_and_tree('.')
43
49
        tree.commit('one')
44
50
 
 
51
        self.addCleanup(tree.lock_read().unlock)
45
52
        self.assertIs(None, commit.pending_revisions(tree))
46
53
 
47
54
    def test_pending_revisions_simple(self):
52
59
        tree.merge_from_branch(tree2.branch)
53
60
        self.assertEqual([rev_id1, rev_id2], tree.get_parent_ids())
54
61
 
 
62
        self.addCleanup(tree.lock_read().unlock)
55
63
        pending_revisions = commit.pending_revisions(tree)
56
64
        # One primary merge
57
65
        self.assertEqual(1, len(pending_revisions))
70
78
        tree.merge_from_branch(tree2.branch)
71
79
        self.assertEqual([rev_id1, rev_id4], tree.get_parent_ids())
72
80
 
 
81
        self.addCleanup(tree.lock_read().unlock)
73
82
        pending_revisions = commit.pending_revisions(tree)
74
83
        # One primary merge
75
84
        self.assertEqual(1, len(pending_revisions))
93
102
        tree.merge_from_branch(tree3.branch, force=True)
94
103
        self.assertEqual([rev_id1, rev_id3, rev_id5], tree.get_parent_ids())
95
104
 
 
105
        self.addCleanup(tree.lock_read().unlock)
96
106
        pending_revisions = commit.pending_revisions(tree)
97
107
        # Two primary merges
98
108
        self.assertEqual(2, len(pending_revisions))
136
146
 
137
147
class TestCommitDialogSimple(tests.TestCaseWithTransport):
138
148
 
 
149
    def test_init(self):
 
150
        MockMethod.bind(self, CommitDialogNoWidgets, 'setup_params')
 
151
        MockMethod.bind(self, CommitDialogNoWidgets, 'construct')
 
152
        MockMethod.bind(self, CommitDialogNoWidgets, 'fill_in_data')
 
153
 
 
154
        tree = self.make_branch_and_tree('tree')
 
155
        rev_id = tree.commit('first')
 
156
        dlg = CommitDialogNoWidgets(tree)
 
157
        self.assertIs(tree, dlg._wt)
 
158
        self.assertIs(None, dlg._selected)
 
159
        self.assertTrue(dlg._enable_per_file_commits)
 
160
        self.assertTrue(dlg._commit_all_changes)
 
161
        self.assertIs(None, dlg.committed_revision_id)
 
162
        self.assertIs(None, dlg._last_selected_file)
 
163
        self.assertIsInstance(
 
164
            dlg._saved_commit_messages_manager, SavedCommitMessagesManager)
 
165
        self.assertTrue(CommitDialogNoWidgets.setup_params.called)
 
166
        self.assertTrue(CommitDialogNoWidgets.construct.called)
 
167
        self.assertTrue(CommitDialogNoWidgets.fill_in_data.called)
 
168
 
139
169
    def test_setup_parameters_no_pending(self):
140
170
        tree = self.make_branch_and_tree('tree')
141
171
        rev_id = tree.commit('first')
184
214
        self.assertEqual([], delta.removed)
185
215
        self.assertEqual([(u'a', 'a-id', 'file')], delta.added)
186
216
 
 
217
    def test_on_treeview_files_cursor_changed_no_selection(self):
 
218
        MockMethod.bind(self, CommitDialogNoWidgets, '_update_per_file_info')
 
219
        tree = self.make_branch_and_tree('tree')
 
220
        rev_id = tree.commit('first')
 
221
        dlg = CommitDialogNoWidgets(tree)
 
222
        treeview = Gtk.TreeView()
 
223
        dlg._on_treeview_files_cursor_changed(treeview)
 
224
        self.assertFalse(CommitDialogNoWidgets._update_per_file_info.called)
 
225
 
 
226
    def test_on_treeview_files_cursor_changed_with_destroyed_treeview(self):
 
227
        MockMethod.bind(self, CommitDialogNoWidgets, '_update_per_file_info')
 
228
        tree = self.make_branch_and_tree('tree')
 
229
        rev_id = tree.commit('first')
 
230
        dlg = CommitDialogNoWidgets(tree)
 
231
        treeview = Gtk.TreeView()
 
232
        treeview.destroy()
 
233
        dlg._on_treeview_files_cursor_changed(treeview)
 
234
        self.assertFalse(CommitDialogNoWidgets._update_per_file_info.called)
 
235
 
187
236
 
188
237
class TestCommitDialog(tests.TestCaseWithTransport):
189
238
 
211
260
 
212
261
        commit_col = dlg._treeview_files.get_column(0)
213
262
        self.assertEqual('Commit', commit_col.get_title())
214
 
        renderer = commit_col.get_cell_renderers()[0]
 
263
        renderer = commit_col.get_cells()[0]
215
264
        self.assertTrue(renderer.get_property('activatable'))
216
265
 
217
266
        self.assertEqual('Commit all changes',
236
285
 
237
286
        commit_col = dlg._treeview_files.get_column(0)
238
287
        self.assertEqual('Commit*', commit_col.get_title())
239
 
        renderer = commit_col.get_cell_renderers()[0]
 
288
        renderer = commit_col.get_cells()[0]
240
289
        self.assertFalse(renderer.get_property('activatable'))
241
290
 
242
291
        values = [(r[0], r[1], r[2], r[3]) for r in dlg._pending_store]
288
337
 
289
338
        dlg = commit.CommitDialog(tree)
290
339
        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', ''),
 
340
        self.assertEqual([("", "", True, 'All Files', ''),
292
341
                          ('a-id', 'a', True, 'a', 'added'),
293
342
                          ('b-id', 'b', True, 'b/', 'added'),
294
343
                          ('c-id', 'b/c', True, 'b/c', 'added'),
305
354
 
306
355
        dlg = commit.CommitDialog(tree)
307
356
        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', ''),
 
357
        self.assertEqual([("", "", True, 'All Files', ''),
309
358
                          ('b-id', 'd', True, 'b/ => d/', 'renamed'),
310
359
                          ('a-id', 'd/a', True, 'a => d/a', 'renamed'),
311
360
                         ], values)
320
369
 
321
370
        dlg = commit.CommitDialog(tree)
322
371
        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', ''),
 
372
        self.assertEqual([("", "", True, 'All Files', ''),
324
373
                          ('a-id', 'a', True, 'a', 'modified'),
325
374
                         ], values)
326
375
 
340
389
 
341
390
        dlg = commit.CommitDialog(tree)
342
391
        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', ''),
 
392
        self.assertEqual([("", "", True, 'All Files', ''),
344
393
                          ('b-id', 'd', True, 'b/ => d/', 'renamed'),
345
394
                          ('a-id', 'd/a', True, 'a => d/a', 'renamed and modified'),
346
395
                          ('c-id', 'd/c', True, 'd/c', 'modified'),
363
412
 
364
413
        dlg = commit.CommitDialog(tree)
365
414
        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', ''),
 
415
        self.assertEqual([("", "", True, 'All Files', ''),
367
416
                          ('a-id', 'a', True, 'a => a/', 'kind changed'),
368
417
                          # ('b-id', 'c', True, 'b => c/', 'renamed and modified'),
369
418
                         ], values)
379
428
 
380
429
        dlg = commit.CommitDialog(tree)
381
430
        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', ''),
 
431
        self.assertEqual([("", "", True, 'All Files', ''),
383
432
                          ('a-id', 'a', True, 'a', 'removed'),
384
433
                          ('b-id', 'b', True, 'b/', 'removed'),
385
434
                         ], values)
386
435
        # All Files should be selected
387
 
        self.assertEqual(((0,), None), dlg._treeview_files.get_cursor())
 
436
        self.assertEqual(
 
437
            (Gtk.TreePath(path=0), None), dlg._treeview_files.get_cursor())
388
438
 
389
439
    def test_filelist_with_selected(self):
390
440
        tree = self.make_branch_and_tree('tree')
393
443
 
394
444
        dlg = commit.CommitDialog(tree, selected='a')
395
445
        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', ''),
 
446
        self.assertEqual([("", "", False, 'All Files', ''),
397
447
                          ('a-id', 'a', True, 'a', 'added'),
398
448
                          ('b-id', 'b', False, 'b/', 'added'),
399
449
                         ], values)
400
450
        # This file should also be selected in the file list, rather than the
401
451
        # 'All Files' selection
402
 
        self.assertEqual(((1,), None), dlg._treeview_files.get_cursor())
 
452
        self.assertEqual(
 
453
            (Gtk.TreePath(path=1), None), dlg._treeview_files.get_cursor())
403
454
 
404
455
    def test_diff_view(self):
405
456
        tree = self.make_branch_and_tree('tree')
413
464
        dlg = commit.CommitDialog(tree)
414
465
        diff_buffer = dlg._diff_view.buffer
415
466
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
416
 
                                    diff_buffer.get_end_iter()).splitlines(True)
 
467
                                    diff_buffer.get_end_iter(),
 
468
                                    True).splitlines(True)
417
469
 
418
470
        self.assertEqual("=== modified file 'a'\n", text[0])
419
471
        self.assertContainsRe(text[1],
464
516
        self.assertFalse(dlg._file_message_expander.get_expanded())
465
517
        self.assertFalse(dlg._file_message_expander.get_property('sensitive'))
466
518
 
467
 
        dlg._treeview_files.set_cursor((1,))
 
519
        dlg._treeview_files.set_cursor(
 
520
            Gtk.TreePath(path=1), None, False)
468
521
        self.assertEqual('Diff for a', dlg._diff_label.get_text())
469
522
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
470
 
                                    diff_buffer.get_end_iter()).splitlines(True)
 
523
                                    diff_buffer.get_end_iter(),
 
524
                                    True).splitlines(True)
471
525
        self.assertEqual("=== added file 'a'\n", text[0])
472
526
        self.assertContainsRe(text[1],
473
527
            r"--- a\t\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d [+-]\d\d\d\d")
481
535
        self.assertTrue(dlg._file_message_expander.get_expanded())
482
536
        self.assertTrue(dlg._file_message_expander.get_property('sensitive'))
483
537
 
484
 
        dlg._treeview_files.set_cursor((2,))
 
538
        dlg._treeview_files.set_cursor(
 
539
            Gtk.TreePath(path=2), None, False)
485
540
        self.assertEqual('Diff for b', dlg._diff_label.get_text())
486
541
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
487
 
                                    diff_buffer.get_end_iter()).splitlines(True)
 
542
                                    diff_buffer.get_end_iter(),
 
543
                                    True).splitlines(True)
488
544
        self.assertEqual("=== added file 'b'\n", text[0])
489
545
        self.assertContainsRe(text[1],
490
546
            r"--- b\t\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d [+-]\d\d\d\d")
498
554
        self.assertTrue(dlg._file_message_expander.get_expanded())
499
555
        self.assertTrue(dlg._file_message_expander.get_property('sensitive'))
500
556
 
501
 
        dlg._treeview_files.set_cursor((0,))
 
557
        dlg._treeview_files.set_cursor(
 
558
            Gtk.TreePath(path=0), None, False)
502
559
        self.assertEqual('Diff for All Files', dlg._diff_label.get_text())
503
560
        self.assertEqual('File commit message',
504
561
                         dlg._file_message_expander.get_label())
514
571
 
515
572
        def get_file_text():
516
573
            buf = dlg._file_message_text_view.get_buffer()
517
 
            return buf.get_text(buf.get_start_iter(), buf.get_end_iter())
 
574
            return buf.get_text(
 
575
                buf.get_start_iter(), buf.get_end_iter(), True)
518
576
 
519
577
        def get_saved_text(path):
520
578
            """Get the saved text for a given record."""
527
585
        self.assertFalse(dlg._file_message_expander.get_property('sensitive'))
528
586
        self.assertEqual('', get_file_text())
529
587
 
530
 
        dlg._treeview_files.set_cursor((1,))
 
588
        dlg._treeview_files.set_cursor(
 
589
            Gtk.TreePath(path=1), None, False)
531
590
        self.assertEqual('Commit message for a',
532
591
                         dlg._file_message_expander.get_label())
533
592
        self.assertTrue(dlg._file_message_expander.get_expanded())
540
599
        # We should have updated the ListStore with the new file commit info
541
600
        self.assertEqual('Some text\nfor a\n', get_saved_text(1))
542
601
 
543
 
        dlg._treeview_files.set_cursor((2,))
 
602
        dlg._treeview_files.set_cursor(
 
603
            Gtk.TreePath(path=2), None, False)
544
604
        self.assertEqual('Commit message for b/',
545
605
                         dlg._file_message_expander.get_label())
546
606
        self.assertTrue(dlg._file_message_expander.get_expanded())
551
611
        dlg._set_file_commit_message('More text\nfor b\n')
552
612
        # Now switch back to 'a'. The message should be saved, and the buffer
553
613
        # should be updated with the other text
554
 
        dlg._treeview_files.set_cursor((1,))
 
614
        dlg._treeview_files.set_cursor(
 
615
            Gtk.TreePath(path=1), None, False)
555
616
        self.assertEqual('More text\nfor b\n', get_saved_text(2))
556
617
        self.assertEqual('Commit message for a',
557
618
                         dlg._file_message_expander.get_label())
566
627
        tree.add(['a', 'b'], ['a-id', 'b-id'])
567
628
 
568
629
        dlg = commit.CommitDialog(tree)
569
 
        self.assertEqual([(None, None, True),
 
630
        self.assertEqual([("", "", True),
570
631
                          ('a-id', 'a', True),
571
632
                          ('b-id', 'b', True),
572
633
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
577
638
        #       do with. So instead, we just call toggle directly, and assume
578
639
        #       that toggle is hooked in correctly
579
640
        # column = dlg._treeview_files.get_column(0)
580
 
        # renderer = column.get_cell_renderers()[0]
 
641
        # renderer = column.get_cells()[0]
581
642
 
582
643
        # Toggle a single entry should set just that entry to False
583
644
        dlg._toggle_commit(None, 1, dlg._files_store)
584
 
        self.assertEqual([(None, None, True),
 
645
        self.assertEqual([("", "", True),
585
646
                          ('a-id', 'a', False),
586
647
                          ('b-id', 'b', True),
587
648
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
588
649
 
589
650
        # Toggling the main entry should set all entries
590
651
        dlg._toggle_commit(None, 0, dlg._files_store)
591
 
        self.assertEqual([(None, None, False),
 
652
        self.assertEqual([("", "", False),
592
653
                          ('a-id', 'a', False),
593
654
                          ('b-id', 'b', False),
594
655
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
595
656
 
596
657
        dlg._toggle_commit(None, 2, dlg._files_store)
597
 
        self.assertEqual([(None, None, False),
 
658
        self.assertEqual([("", "", False),
598
659
                          ('a-id', 'a', False),
599
660
                          ('b-id', 'b', True),
600
661
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
601
662
 
602
663
        dlg._toggle_commit(None, 0, dlg._files_store)
603
 
        self.assertEqual([(None, None, True),
 
664
        self.assertEqual([("", "", True),
604
665
                          ('a-id', 'a', True),
605
666
                          ('b-id', 'b', True),
606
667
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
630
691
        dlg._commit_selected_radio.set_active(True)
631
692
        self.assertEqual((['a_file', 'b_dir'], []), dlg._get_specific_files())
632
693
 
633
 
        dlg._treeview_files.set_cursor((1,))
 
694
        dlg._treeview_files.set_cursor(
 
695
            Gtk.TreePath(path=1), None, False)
634
696
        dlg._set_file_commit_message('Test\nmessage\nfor a_file\n')
635
 
        dlg._treeview_files.set_cursor((2,))
 
697
        dlg._treeview_files.set_cursor(
 
698
            Gtk.TreePath(path=2), None, False)
636
699
        dlg._set_file_commit_message('message\nfor b_dir\n')
637
700
 
638
701
        self.assertEqual((['a_file', 'b_dir'],
658
721
        dlg._commit_selected_radio.set_active(True)
659
722
        self.assertEqual((['a_file', 'b_dir'], []), dlg._get_specific_files())
660
723
 
661
 
        dlg._treeview_files.set_cursor((1,))
 
724
        dlg._treeview_files.set_cursor(
 
725
            Gtk.TreePath(path=1), None, False)
662
726
        dlg._set_file_commit_message('Test\r\nmessage\rfor a_file\n')
663
 
        dlg._treeview_files.set_cursor((2,))
 
727
        dlg._treeview_files.set_cursor(
 
728
            Gtk.TreePath(path=2), None, False)
664
729
        dlg._set_file_commit_message('message\r\nfor\nb_dir\r')
665
730
 
666
731
        self.assertEqual((['a_file', 'b_dir'],
973
1038
 
974
1039
        dlg = commit.CommitDialog(tree)
975
1040
        dlg._commit_selected_radio.set_active(True) # enable partial
976
 
        dlg._treeview_files.set_cursor((1,))
 
1041
        dlg._treeview_files.set_cursor(
 
1042
            Gtk.TreePath(path=1), None, False)
977
1043
        dlg._set_file_commit_message('Message for A\n')
978
 
        dlg._treeview_files.set_cursor((2,))
 
1044
        dlg._treeview_files.set_cursor(
 
1045
            Gtk.TreePath(path=2), None, False)
979
1046
        dlg._set_file_commit_message('Message for B\n')
980
1047
        dlg._toggle_commit(None, 2, dlg._files_store) # unset 'b'
981
1048
        dlg._set_global_commit_message('Commit just "a"')
1008
1075
        tree.merge_from_branch(tree2.branch)
1009
1076
 
1010
1077
        dlg = commit.CommitDialog(tree)
1011
 
        dlg._treeview_files.set_cursor((1,)) # 'a'
 
1078
        dlg._treeview_files.set_cursor(
 
1079
            Gtk.TreePath(path=1), None, False) # 'a'
1012
1080
        dlg._set_file_commit_message('Message for A\n')
1013
1081
        # No message for 'B'
1014
1082
        dlg._set_global_commit_message('Merging from "tree2"\n')
1031
1099
                         bencode.bdecode(file_info.encode('UTF-8')))
1032
1100
 
1033
1101
    def test_commit_unicode_messages(self):
1034
 
        self.requireFeature(tests.UnicodeFilenameFeature)
 
1102
        self.requireFeature(UnicodeFilenameFeature)
1035
1103
 
1036
1104
        tree = self.make_branch_and_tree('tree')
1037
1105
        tree.branch.get_config().set_user_option('per_file_commits', 'true')
1039
1107
        tree.add(['a', u'\u03a9'], ['a-id', 'omega-id'])
1040
1108
 
1041
1109
        dlg = commit.CommitDialog(tree)
1042
 
        dlg._treeview_files.set_cursor((1,)) # 'a'
 
1110
        dlg._treeview_files.set_cursor(
 
1111
            Gtk.TreePath(path=1), None, False) # 'a'
1043
1112
        dlg._set_file_commit_message(u'Test \xfan\xecc\xf6de\n')
1044
 
        dlg._treeview_files.set_cursor((2,)) # omega
 
1113
        dlg._treeview_files.set_cursor(
 
1114
            Gtk.TreePath(path=2), None, False) # omega
1045
1115
        dlg._set_file_commit_message(u'\u03a9 is the end of all things.\n')
1046
1116
        dlg._set_global_commit_message(u'\u03a9 and \xfan\xecc\xf6de\n')
1047
1117
 
1103
1173
        super(TestSavedCommitMessages, self).setUp()
1104
1174
        # Install our hook
1105
1175
        branch.Branch.hooks.install_named_hook(
1106
 
            'post_uncommit', commit.save_commit_messages, None)
 
1176
            'post_uncommit', commitmsgs.save_commit_messages, None)
1107
1177
 
1108
1178
    def _get_file_info_dict(self, rank):
1109
1179
        file_info = [dict(path='a', file_id='a-id', message='a msg %d' % rank),