/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: 2008-06-29 15:47:30 UTC
  • mto: This revision was merged to the branch mainline in revision 519.
  • Revision ID: jelmer@samba.org-20080629154730-xfsotoxwkiytf0ph
Pass graph object rather than full repository to linegraph.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2007, 2008 John Arbash Meinel <john@arbash-meinel.com>
 
1
# Copyright (C) 2007 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
18
18
 
19
19
import os
20
20
 
21
 
from gi.repository import Gtk
 
21
import gtk
22
22
 
23
23
from bzrlib import (
24
 
    branch,
25
24
    tests,
26
 
    uncommit,
 
25
    revision,
27
26
    )
28
 
try:
29
 
    from bzrlib import bencode
30
 
except ImportError:
31
 
    from bzrlib.util import bencode
 
27
from bzrlib.util import bencode
32
28
 
33
29
from bzrlib.plugins.gtk import commit
34
30
 
90
86
        rev_id4 = tree3.commit('four')
91
87
        rev_id5 = tree3.commit('five')
92
88
        tree.merge_from_branch(tree2.branch)
93
 
        tree.merge_from_branch(tree3.branch, force=True)
 
89
        tree.merge_from_branch(tree3.branch)
94
90
        self.assertEqual([rev_id1, rev_id3, rev_id5], tree.get_parent_ids())
95
91
 
96
92
        pending_revisions = commit.pending_revisions(tree)
211
207
 
212
208
        commit_col = dlg._treeview_files.get_column(0)
213
209
        self.assertEqual('Commit', commit_col.get_title())
214
 
        renderer = commit_col.get_cells()[0]
 
210
        renderer = commit_col.get_cell_renderers()[0]
215
211
        self.assertTrue(renderer.get_property('activatable'))
216
212
 
217
213
        self.assertEqual('Commit all changes',
236
232
 
237
233
        commit_col = dlg._treeview_files.get_column(0)
238
234
        self.assertEqual('Commit*', commit_col.get_title())
239
 
        renderer = commit_col.get_cells()[0]
 
235
        renderer = commit_col.get_cell_renderers()[0]
240
236
        self.assertFalse(renderer.get_property('activatable'))
241
237
 
242
238
        values = [(r[0], r[1], r[2], r[3]) for r in dlg._pending_store]
270
266
                               committer='Jerry Foo <jerry@foo.com>',
271
267
                               timestamp=1191372278.05,
272
268
                               timezone=+7200)
273
 
        tree.merge_from_branch(tree3.branch, force=True)
 
269
        tree.merge_from_branch(tree3.branch)
274
270
 
275
271
        dlg = commit.CommitDialog(tree)
276
272
        # TODO: assert that the pending box is set to show
384
380
                          ('b-id', 'b', True, 'b/', 'removed'),
385
381
                         ], values)
386
382
        # All Files should be selected
387
 
        self.assertEqual(
388
 
            (Gtk.TreePath(path=0), None), dlg._treeview_files.get_cursor())
 
383
        self.assertEqual(((0,), None), dlg._treeview_files.get_cursor())
389
384
 
390
385
    def test_filelist_with_selected(self):
391
386
        tree = self.make_branch_and_tree('tree')
400
395
                         ], values)
401
396
        # This file should also be selected in the file list, rather than the
402
397
        # 'All Files' selection
403
 
        self.assertEqual(
404
 
            (Gtk.TreePath(path=1), None), dlg._treeview_files.get_cursor())
 
398
        self.assertEqual(((1,), None), dlg._treeview_files.get_cursor())
405
399
 
406
400
    def test_diff_view(self):
407
401
        tree = self.make_branch_and_tree('tree')
415
409
        dlg = commit.CommitDialog(tree)
416
410
        diff_buffer = dlg._diff_view.buffer
417
411
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
418
 
                                    diff_buffer.get_end_iter(),
419
 
                                    True).splitlines(True)
 
412
                                    diff_buffer.get_end_iter()).splitlines(True)
420
413
 
421
414
        self.assertEqual("=== modified file 'a'\n", text[0])
422
415
        self.assertContainsRe(text[1],
467
460
        self.assertFalse(dlg._file_message_expander.get_expanded())
468
461
        self.assertFalse(dlg._file_message_expander.get_property('sensitive'))
469
462
 
470
 
        dlg._treeview_files.set_cursor(
471
 
            Gtk.TreePath(path=1), None, False)
 
463
        dlg._treeview_files.set_cursor((1,))
472
464
        self.assertEqual('Diff for a', dlg._diff_label.get_text())
473
465
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
474
 
                                    diff_buffer.get_end_iter(),
475
 
                                    True).splitlines(True)
 
466
                                    diff_buffer.get_end_iter()).splitlines(True)
476
467
        self.assertEqual("=== added file 'a'\n", text[0])
477
468
        self.assertContainsRe(text[1],
478
469
            r"--- a\t\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d [+-]\d\d\d\d")
486
477
        self.assertTrue(dlg._file_message_expander.get_expanded())
487
478
        self.assertTrue(dlg._file_message_expander.get_property('sensitive'))
488
479
 
489
 
        dlg._treeview_files.set_cursor(
490
 
            Gtk.TreePath(path=2), None, False)
 
480
        dlg._treeview_files.set_cursor((2,))
491
481
        self.assertEqual('Diff for b', dlg._diff_label.get_text())
492
482
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
493
 
                                    diff_buffer.get_end_iter(),
494
 
                                    True).splitlines(True)
 
483
                                    diff_buffer.get_end_iter()).splitlines(True)
495
484
        self.assertEqual("=== added file 'b'\n", text[0])
496
485
        self.assertContainsRe(text[1],
497
486
            r"--- b\t\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d [+-]\d\d\d\d")
505
494
        self.assertTrue(dlg._file_message_expander.get_expanded())
506
495
        self.assertTrue(dlg._file_message_expander.get_property('sensitive'))
507
496
 
508
 
        dlg._treeview_files.set_cursor(
509
 
            Gtk.TreePath(path=0), None, False)
 
497
        dlg._treeview_files.set_cursor((0,))
510
498
        self.assertEqual('Diff for All Files', dlg._diff_label.get_text())
511
499
        self.assertEqual('File commit message',
512
500
                         dlg._file_message_expander.get_label())
522
510
 
523
511
        def get_file_text():
524
512
            buf = dlg._file_message_text_view.get_buffer()
525
 
            return buf.get_text(
526
 
                buf.get_start_iter(), buf.get_end_iter(), True)
 
513
            return buf.get_text(buf.get_start_iter(), buf.get_end_iter())
527
514
 
528
515
        def get_saved_text(path):
529
516
            """Get the saved text for a given record."""
536
523
        self.assertFalse(dlg._file_message_expander.get_property('sensitive'))
537
524
        self.assertEqual('', get_file_text())
538
525
 
539
 
        dlg._treeview_files.set_cursor(
540
 
            Gtk.TreePath(path=1), None, False)
 
526
        dlg._treeview_files.set_cursor((1,))
541
527
        self.assertEqual('Commit message for a',
542
528
                         dlg._file_message_expander.get_label())
543
529
        self.assertTrue(dlg._file_message_expander.get_expanded())
550
536
        # We should have updated the ListStore with the new file commit info
551
537
        self.assertEqual('Some text\nfor a\n', get_saved_text(1))
552
538
 
553
 
        dlg._treeview_files.set_cursor(
554
 
            Gtk.TreePath(path=2), None, False)
 
539
        dlg._treeview_files.set_cursor((2,))
555
540
        self.assertEqual('Commit message for b/',
556
541
                         dlg._file_message_expander.get_label())
557
542
        self.assertTrue(dlg._file_message_expander.get_expanded())
562
547
        dlg._set_file_commit_message('More text\nfor b\n')
563
548
        # Now switch back to 'a'. The message should be saved, and the buffer
564
549
        # should be updated with the other text
565
 
        dlg._treeview_files.set_cursor(
566
 
            Gtk.TreePath(path=1), None, False)
 
550
        dlg._treeview_files.set_cursor((1,))
567
551
        self.assertEqual('More text\nfor b\n', get_saved_text(2))
568
552
        self.assertEqual('Commit message for a',
569
553
                         dlg._file_message_expander.get_label())
589
573
        #       do with. So instead, we just call toggle directly, and assume
590
574
        #       that toggle is hooked in correctly
591
575
        # column = dlg._treeview_files.get_column(0)
592
 
        # renderer = column.get_cells()[0]
 
576
        # renderer = column.get_cell_renderers()[0]
593
577
 
594
578
        # Toggle a single entry should set just that entry to False
595
579
        dlg._toggle_commit(None, 1, dlg._files_store)
642
626
        dlg._commit_selected_radio.set_active(True)
643
627
        self.assertEqual((['a_file', 'b_dir'], []), dlg._get_specific_files())
644
628
 
645
 
        dlg._treeview_files.set_cursor(
646
 
            Gtk.TreePath(path=1), None, False)
 
629
        dlg._treeview_files.set_cursor((1,))
647
630
        dlg._set_file_commit_message('Test\nmessage\nfor a_file\n')
648
 
        dlg._treeview_files.set_cursor(
649
 
            Gtk.TreePath(path=2), None, False)
 
631
        dlg._treeview_files.set_cursor((2,))
650
632
        dlg._set_file_commit_message('message\nfor b_dir\n')
651
633
 
652
634
        self.assertEqual((['a_file', 'b_dir'],
662
644
                            'message':'message\nfor b_dir\n'},
663
645
                          ]), dlg._get_specific_files())
664
646
 
665
 
    def test_specific_files_sanitizes_messages(self):
666
 
        tree = self.make_branch_and_tree('tree')
667
 
        tree.branch.get_config().set_user_option('per_file_commits', 'true')
668
 
        self.build_tree(['tree/a_file', 'tree/b_dir/'])
669
 
        tree.add(['a_file', 'b_dir'], ['1a-id', '0b-id'])
670
 
 
671
 
        dlg = commit.CommitDialog(tree)
672
 
        dlg._commit_selected_radio.set_active(True)
673
 
        self.assertEqual((['a_file', 'b_dir'], []), dlg._get_specific_files())
674
 
 
675
 
        dlg._treeview_files.set_cursor(
676
 
            Gtk.TreePath(path=1), None, False)
677
 
        dlg._set_file_commit_message('Test\r\nmessage\rfor a_file\n')
678
 
        dlg._treeview_files.set_cursor(
679
 
            Gtk.TreePath(path=2), None, False)
680
 
        dlg._set_file_commit_message('message\r\nfor\nb_dir\r')
681
 
 
682
 
        self.assertEqual((['a_file', 'b_dir'],
683
 
                          [{'path':'a_file', 'file_id':'1a-id',
684
 
                            'message':'Test\nmessage\nfor a_file\n'},
685
 
                           {'path':'b_dir', 'file_id':'0b-id',
686
 
                            'message':'message\nfor\nb_dir\n'},
687
 
                          ]), dlg._get_specific_files())
688
 
 
689
 
 
690
 
class QuestionHelpers(object):
 
647
 
 
648
class TestCommitDialog_Commit(tests.TestCaseWithTransport):
 
649
    """Tests on the actual 'commit' button being pushed."""
691
650
 
692
651
    def _set_question_yes(self, dlg):
693
652
        """Set the dialog to answer YES to any questions."""
694
653
        self.questions = []
695
 
        def _question_yes(*args, **kwargs):
 
654
        def _question_yes(*args):
696
655
            self.questions.append(args)
697
656
            self.questions.append('YES')
698
 
            return Gtk.ResponseType.YES
 
657
            return gtk.RESPONSE_YES
699
658
        dlg._question_dialog = _question_yes
700
659
 
701
660
    def _set_question_no(self, dlg):
702
661
        """Set the dialog to answer NO to any questions."""
703
662
        self.questions = []
704
 
        def _question_no(*args, **kwargs):
 
663
        def _question_no(*args):
705
664
            self.questions.append(args)
706
665
            self.questions.append('NO')
707
 
            return Gtk.ResponseType.NO
 
666
            return gtk.RESPONSE_NO
708
667
        dlg._question_dialog = _question_no
709
668
 
710
 
 
711
 
class TestCommitDialog_Commit(tests.TestCaseWithTransport, QuestionHelpers):
712
 
    """Tests on the actual 'commit' button being pushed."""
713
 
 
714
669
    def test_bound_commit_local(self):
715
670
        tree = self.make_branch_and_tree('tree')
716
671
        self.build_tree(['tree/a'])
732
687
        self.assertEqual(last_rev, dlg.committed_revision_id)
733
688
        self.assertEqual(rev_id1, tree.branch.last_revision())
734
689
 
735
 
    def test_commit_global_sanitizes_message(self):
736
 
        tree = self.make_branch_and_tree('tree')
737
 
        self.build_tree(['tree/a'])
738
 
        tree.add(['a'], ['a-id'])
739
 
        rev_id1 = tree.commit('one')
740
 
 
741
 
        self.build_tree(['tree/b'])
742
 
        tree.add(['b'], ['b-id'])
743
 
        dlg = commit.CommitDialog(tree)
744
 
        # With the check box set, it should only effect the local branch
745
 
        dlg._set_global_commit_message('Commit\r\nmessage\rfoo\n')
746
 
        dlg._do_commit()
747
 
        rev = tree.branch.repository.get_revision(tree.last_revision())
748
 
        self.assertEqual('Commit\nmessage\nfoo\n', rev.message)
749
 
 
750
690
    def test_bound_commit_both(self):
751
691
        tree = self.make_branch_and_tree('tree')
752
692
        self.build_tree(['tree/a'])
768
708
        self.assertEqual(last_rev, dlg.committed_revision_id)
769
709
        self.assertEqual(last_rev, tree.branch.last_revision())
770
710
 
771
 
    def test_commit_empty_message(self):
 
711
    def test_commit_no_message(self):
772
712
        tree = self.make_branch_and_tree('tree')
773
713
        self.build_tree(['tree/a', 'tree/b'])
774
714
        tree.add(['a'], ['a-id'])
989
929
 
990
930
        dlg = commit.CommitDialog(tree)
991
931
        dlg._commit_selected_radio.set_active(True) # enable partial
992
 
        dlg._treeview_files.set_cursor(
993
 
            Gtk.TreePath(path=1), None, False)
 
932
        dlg._treeview_files.set_cursor((1,))
994
933
        dlg._set_file_commit_message('Message for A\n')
995
 
        dlg._treeview_files.set_cursor(
996
 
            Gtk.TreePath(path=2), None, False)
 
934
        dlg._treeview_files.set_cursor((2,))
997
935
        dlg._set_file_commit_message('Message for B\n')
998
936
        dlg._toggle_commit(None, 2, dlg._files_store) # unset 'b'
999
937
        dlg._set_global_commit_message('Commit just "a"')
1005
943
        rev = tree.branch.repository.get_revision(rev_id2)
1006
944
        self.assertEqual('Commit just "a"', rev.message)
1007
945
        file_info = rev.properties['file-info']
1008
 
        self.assertEqual(u'ld7:file_id4:a-id'
1009
 
                         '7:message14:Message for A\n'
1010
 
                         '4:path1:a'
1011
 
                         'ee',
1012
 
                         file_info)
 
946
        self.assertEqual('ld7:file_id4:a-id'
 
947
                           '7:message14:Message for A\n'
 
948
                           '4:path1:a'
 
949
                         'ee', file_info)
1013
950
        self.assertEqual([{'path':'a', 'file_id':'a-id',
1014
 
                           'message':'Message for A\n'},],
1015
 
                         bencode.bdecode(file_info.encode('UTF-8')))
 
951
                           'message':'Message for A\n'},
 
952
                         ], bencode.bdecode(file_info))
1016
953
 
1017
954
    def test_commit_messages_after_merge(self):
1018
955
        tree = self.make_branch_and_tree('tree')
1026
963
        tree.merge_from_branch(tree2.branch)
1027
964
 
1028
965
        dlg = commit.CommitDialog(tree)
1029
 
        dlg._treeview_files.set_cursor(
1030
 
            Gtk.TreePath(path=1), None, False) # 'a'
 
966
        dlg._treeview_files.set_cursor((1,)) # 'a'
1031
967
        dlg._set_file_commit_message('Message for A\n')
1032
968
        # No message for 'B'
1033
969
        dlg._set_global_commit_message('Merging from "tree2"\n')
1040
976
        self.assertEqual('Merging from "tree2"\n', rev.message)
1041
977
        self.assertEqual([rev_id1, rev_id2], rev.parent_ids)
1042
978
        file_info = rev.properties['file-info']
1043
 
        self.assertEqual(u'ld7:file_id4:a-id'
1044
 
                         '7:message14:Message for A\n'
1045
 
                         '4:path1:a'
1046
 
                         'ee',
1047
 
                         file_info)
 
979
        self.assertEqual('ld7:file_id4:a-id'
 
980
                           '7:message14:Message for A\n'
 
981
                           '4:path1:a'
 
982
                         'ee', file_info)
1048
983
        self.assertEqual([{'path':'a', 'file_id':'a-id',
1049
 
                           'message':'Message for A\n'},],
1050
 
                         bencode.bdecode(file_info.encode('UTF-8')))
 
984
                           'message':'Message for A\n'},
 
985
                         ], bencode.bdecode(file_info))
1051
986
 
1052
987
    def test_commit_unicode_messages(self):
1053
988
        self.requireFeature(tests.UnicodeFilenameFeature)
1058
993
        tree.add(['a', u'\u03a9'], ['a-id', 'omega-id'])
1059
994
 
1060
995
        dlg = commit.CommitDialog(tree)
1061
 
        dlg._treeview_files.set_cursor(
1062
 
            Gtk.TreePath(path=1), None, False) # 'a'
 
996
        dlg._treeview_files.set_cursor((1,)) # 'a'
1063
997
        dlg._set_file_commit_message(u'Test \xfan\xecc\xf6de\n')
1064
 
        dlg._treeview_files.set_cursor(
1065
 
            Gtk.TreePath(path=2), None, False) # omega
 
998
        dlg._treeview_files.set_cursor((2,)) # omega
1066
999
        dlg._set_file_commit_message(u'\u03a9 is the end of all things.\n')
1067
1000
        dlg._set_global_commit_message(u'\u03a9 and \xfan\xecc\xf6de\n')
1068
1001
 
1097
1030
                          {'path':u'\u03a9', 'file_id':'omega-id',
1098
1031
                           'message':u'\u03a9 is the end of all things.\n'},
1099
1032
                         ], file_info_decoded)
1100
 
 
1101
 
 
1102
 
class TestSanitizeMessage(tests.TestCase):
1103
 
 
1104
 
    def assertSanitize(self, expected, original):
1105
 
        self.assertEqual(expected,
1106
 
                         commit._sanitize_and_decode_message(original))
1107
 
 
1108
 
    def test_untouched(self):
1109
 
        self.assertSanitize('foo\nbar\nbaz\n', 'foo\nbar\nbaz\n')
1110
 
 
1111
 
    def test_converts_cr_to_lf(self):
1112
 
        self.assertSanitize('foo\nbar\nbaz\n', 'foo\rbar\rbaz\r')
1113
 
 
1114
 
    def test_converts_crlf_to_lf(self):
1115
 
        self.assertSanitize('foo\nbar\nbaz\n', 'foo\r\nbar\r\nbaz\r\n')
1116
 
 
1117
 
    def test_converts_mixed_to_lf(self):
1118
 
        self.assertSanitize('foo\nbar\nbaz\n', 'foo\r\nbar\rbaz\n')
1119
 
 
1120
 
 
1121
 
class TestSavedCommitMessages(tests.TestCaseWithTransport):
1122
 
 
1123
 
    def setUp(self):
1124
 
        super(TestSavedCommitMessages, self).setUp()
1125
 
        # Install our hook
1126
 
        branch.Branch.hooks.install_named_hook(
1127
 
            'post_uncommit', commit.save_commit_messages, None)
1128
 
 
1129
 
    def _get_file_info_dict(self, rank):
1130
 
        file_info = [dict(path='a', file_id='a-id', message='a msg %d' % rank),
1131
 
                     dict(path='b', file_id='b-id', message='b msg %d' % rank)]
1132
 
        return file_info
1133
 
 
1134
 
    def _get_file_info_revprops(self, rank):
1135
 
        file_info_prop = self._get_file_info_dict(rank)
1136
 
        return {'file-info': bencode.bencode(file_info_prop).decode('UTF-8')}
1137
 
 
1138
 
    def _get_commit_message(self):
1139
 
        return self.config.get_user_option('gtk_global_commit_message')
1140
 
 
1141
 
    def _get_file_commit_messages(self):
1142
 
        return self.config.get_user_option('gtk_file_commit_messages')
1143
 
 
1144
 
 
1145
 
class TestUncommitHook(TestSavedCommitMessages):
1146
 
 
1147
 
    def setUp(self):
1148
 
        super(TestUncommitHook, self).setUp()
1149
 
        self.tree = self.make_branch_and_tree('tree')
1150
 
        self.config = self.tree.branch.get_config()
1151
 
        self.build_tree(['tree/a', 'tree/b'])
1152
 
        self.tree.add(['a'], ['a-id'])
1153
 
        self.tree.add(['b'], ['b-id'])
1154
 
        rev1 = self.tree.commit('one', rev_id='one-id',
1155
 
                                revprops=self._get_file_info_revprops(1))
1156
 
        rev2 = self.tree.commit('two', rev_id='two-id',
1157
 
                                revprops=self._get_file_info_revprops(2))
1158
 
        rev3 = self.tree.commit('three', rev_id='three-id',
1159
 
                                revprops=self._get_file_info_revprops(3))
1160
 
 
1161
 
    def test_uncommit_one_by_one(self):
1162
 
        uncommit.uncommit(self.tree.branch, tree=self.tree)
1163
 
        self.assertEquals(u'three', self._get_commit_message())
1164
 
        self.assertEquals(u'd4:a-id7:a msg 34:b-id7:b msg 3e',
1165
 
                          self._get_file_commit_messages())
1166
 
 
1167
 
        uncommit.uncommit(self.tree.branch, tree=self.tree)
1168
 
        self.assertEquals(u'two\n******\nthree', self._get_commit_message())
1169
 
        self.assertEquals(u'd4:a-id22:a msg 2\n******\na msg 3'
1170
 
                          '4:b-id22:b msg 2\n******\nb msg 3e',
1171
 
                          self._get_file_commit_messages())
1172
 
 
1173
 
        uncommit.uncommit(self.tree.branch, tree=self.tree)
1174
 
        self.assertEquals(u'one\n******\ntwo\n******\nthree',
1175
 
                          self._get_commit_message())
1176
 
        self.assertEquals(u'd4:a-id37:a msg 1\n******\na msg 2\n******\na msg 3'
1177
 
                          '4:b-id37:b msg 1\n******\nb msg 2\n******\nb msg 3e',
1178
 
                          self._get_file_commit_messages())
1179
 
 
1180
 
    def test_uncommit_all_at_once(self):
1181
 
        uncommit.uncommit(self.tree.branch, tree=self.tree, revno=1)
1182
 
        self.assertEquals(u'one\n******\ntwo\n******\nthree',
1183
 
                          self._get_commit_message())
1184
 
        self.assertEquals(u'd4:a-id37:a msg 1\n******\na msg 2\n******\na msg 3'
1185
 
                          '4:b-id37:b msg 1\n******\nb msg 2\n******\nb msg 3e',
1186
 
                          self._get_file_commit_messages())
1187
 
 
1188
 
 
1189
 
class TestReusingSavedCommitMessages(TestSavedCommitMessages, QuestionHelpers):
1190
 
 
1191
 
    def setUp(self):
1192
 
        super(TestReusingSavedCommitMessages, self).setUp()
1193
 
        self.tree = self.make_branch_and_tree('tree')
1194
 
        self.config = self.tree.branch.get_config()
1195
 
        self.config.set_user_option('per_file_commits', 'true')
1196
 
        self.build_tree(['tree/a', 'tree/b'])
1197
 
        self.tree.add(['a'], ['a-id'])
1198
 
        self.tree.add(['b'], ['b-id'])
1199
 
        rev1 = self.tree.commit('one', revprops=self._get_file_info_revprops(1))
1200
 
        rev2 = self.tree.commit('two', revprops=self._get_file_info_revprops(2))
1201
 
        uncommit.uncommit(self.tree.branch, tree=self.tree)
1202
 
        self.build_tree_contents([('tree/a', 'new a content\n'),
1203
 
                                  ('tree/b', 'new b content'),])
1204
 
 
1205
 
    def _get_commit_dialog(self, tree):
1206
 
        # Ensure we will never use a dialog that can actually prompt the user
1207
 
        # during the test suite. Test *can* and *should* override with the
1208
 
        # correct question dialog type.
1209
 
        dlg = commit.CommitDialog(tree)
1210
 
        self._set_question_no(dlg)
1211
 
        return dlg
1212
 
 
1213
 
    def test_setup_saved_messages(self):
1214
 
        # Check the initial setup
1215
 
        self.assertEquals(u'two', self._get_commit_message())
1216
 
        self.assertEquals(u'd4:a-id7:a msg 24:b-id7:b msg 2e',
1217
 
                          self._get_file_commit_messages())
1218
 
 
1219
 
    def test_messages_are_reloaded(self):
1220
 
        dlg = self._get_commit_dialog(self.tree)
1221
 
        self.assertEquals(u'two', dlg._get_global_commit_message())
1222
 
        self.assertEquals(([u'a', u'b'],
1223
 
                           [{ 'path': 'a',
1224
 
                             'file_id': 'a-id', 'message': 'a msg 2',},
1225
 
                           {'path': 'b',
1226
 
                            'file_id': 'b-id', 'message': 'b msg 2',}],),
1227
 
                          dlg._get_specific_files())
1228
 
 
1229
 
    def test_messages_are_consumed(self):
1230
 
        dlg = self._get_commit_dialog(self.tree)
1231
 
        dlg._do_commit()
1232
 
        self.assertEquals(u'', self._get_commit_message())
1233
 
        self.assertEquals(u'de', self._get_file_commit_messages())
1234
 
 
1235
 
    def test_messages_are_saved_on_cancel_if_required(self):
1236
 
        dlg = self._get_commit_dialog(self.tree)
1237
 
        self._set_question_yes(dlg) # Save messages
1238
 
        dlg._do_cancel()
1239
 
        self.assertEquals(u'two', self._get_commit_message())
1240
 
        self.assertEquals(u'd4:a-id7:a msg 24:b-id7:b msg 2e',
1241
 
                          self._get_file_commit_messages())
1242
 
 
1243
 
    def test_messages_are_cleared_on_cancel_if_required(self):
1244
 
        dlg = self._get_commit_dialog(self.tree)
1245
 
        self._set_question_no(dlg) # Don't save messages
1246
 
        dlg._do_cancel()
1247
 
        self.assertEquals(u'', self._get_commit_message())
1248
 
        self.assertEquals(u'de',
1249
 
                          self._get_file_commit_messages())