/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: 2011-08-29 14:12:30 UTC
  • mto: This revision was merged to the branch mainline in revision 741.
  • Revision ID: sinzui.is@verizon.net-20110829141230-6nv7h0oxjrojb1y1
Updated hacking doc.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2007 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
18
18
 
19
19
import os
20
20
 
21
 
import gtk
 
21
from gi.repository import Gtk
22
22
 
23
23
from bzrlib import (
 
24
    branch,
24
25
    tests,
25
 
    revision,
 
26
    uncommit,
26
27
    )
27
 
from bzrlib.util import bencode
 
28
try:
 
29
    from bzrlib import bencode
 
30
except ImportError:
 
31
    from bzrlib.util import bencode
28
32
 
29
33
from bzrlib.plugins.gtk import commit
30
34
 
86
90
        rev_id4 = tree3.commit('four')
87
91
        rev_id5 = tree3.commit('five')
88
92
        tree.merge_from_branch(tree2.branch)
89
 
        tree.merge_from_branch(tree3.branch)
 
93
        tree.merge_from_branch(tree3.branch, force=True)
90
94
        self.assertEqual([rev_id1, rev_id3, rev_id5], tree.get_parent_ids())
91
95
 
92
96
        pending_revisions = commit.pending_revisions(tree)
207
211
 
208
212
        commit_col = dlg._treeview_files.get_column(0)
209
213
        self.assertEqual('Commit', commit_col.get_title())
210
 
        renderer = commit_col.get_cell_renderers()[0]
 
214
        renderer = commit_col.get_cells()[0]
211
215
        self.assertTrue(renderer.get_property('activatable'))
212
216
 
213
217
        self.assertEqual('Commit all changes',
232
236
 
233
237
        commit_col = dlg._treeview_files.get_column(0)
234
238
        self.assertEqual('Commit*', commit_col.get_title())
235
 
        renderer = commit_col.get_cell_renderers()[0]
 
239
        renderer = commit_col.get_cells()[0]
236
240
        self.assertFalse(renderer.get_property('activatable'))
237
241
 
238
242
        values = [(r[0], r[1], r[2], r[3]) for r in dlg._pending_store]
266
270
                               committer='Jerry Foo <jerry@foo.com>',
267
271
                               timestamp=1191372278.05,
268
272
                               timezone=+7200)
269
 
        tree.merge_from_branch(tree3.branch)
 
273
        tree.merge_from_branch(tree3.branch, force=True)
270
274
 
271
275
        dlg = commit.CommitDialog(tree)
272
276
        # TODO: assert that the pending box is set to show
380
384
                          ('b-id', 'b', True, 'b/', 'removed'),
381
385
                         ], values)
382
386
        # All Files should be selected
383
 
        self.assertEqual(((0,), None), dlg._treeview_files.get_cursor())
 
387
        self.assertEqual(
 
388
            (Gtk.TreePath(path=0), None), dlg._treeview_files.get_cursor())
384
389
 
385
390
    def test_filelist_with_selected(self):
386
391
        tree = self.make_branch_and_tree('tree')
395
400
                         ], values)
396
401
        # This file should also be selected in the file list, rather than the
397
402
        # 'All Files' selection
398
 
        self.assertEqual(((1,), None), dlg._treeview_files.get_cursor())
 
403
        self.assertEqual(
 
404
            (Gtk.TreePath(path=1), None), dlg._treeview_files.get_cursor())
399
405
 
400
406
    def test_diff_view(self):
401
407
        tree = self.make_branch_and_tree('tree')
409
415
        dlg = commit.CommitDialog(tree)
410
416
        diff_buffer = dlg._diff_view.buffer
411
417
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
412
 
                                    diff_buffer.get_end_iter()).splitlines(True)
 
418
                                    diff_buffer.get_end_iter(),
 
419
                                    True).splitlines(True)
413
420
 
414
421
        self.assertEqual("=== modified file 'a'\n", text[0])
415
422
        self.assertContainsRe(text[1],
460
467
        self.assertFalse(dlg._file_message_expander.get_expanded())
461
468
        self.assertFalse(dlg._file_message_expander.get_property('sensitive'))
462
469
 
463
 
        dlg._treeview_files.set_cursor((1,))
 
470
        dlg._treeview_files.set_cursor(
 
471
            Gtk.TreePath(path=1), None, False)
464
472
        self.assertEqual('Diff for a', dlg._diff_label.get_text())
465
473
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
466
 
                                    diff_buffer.get_end_iter()).splitlines(True)
 
474
                                    diff_buffer.get_end_iter(),
 
475
                                    True).splitlines(True)
467
476
        self.assertEqual("=== added file 'a'\n", text[0])
468
477
        self.assertContainsRe(text[1],
469
478
            r"--- a\t\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d [+-]\d\d\d\d")
477
486
        self.assertTrue(dlg._file_message_expander.get_expanded())
478
487
        self.assertTrue(dlg._file_message_expander.get_property('sensitive'))
479
488
 
480
 
        dlg._treeview_files.set_cursor((2,))
 
489
        dlg._treeview_files.set_cursor(
 
490
            Gtk.TreePath(path=2), None, False)
481
491
        self.assertEqual('Diff for b', dlg._diff_label.get_text())
482
492
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
483
 
                                    diff_buffer.get_end_iter()).splitlines(True)
 
493
                                    diff_buffer.get_end_iter(),
 
494
                                    True).splitlines(True)
484
495
        self.assertEqual("=== added file 'b'\n", text[0])
485
496
        self.assertContainsRe(text[1],
486
497
            r"--- b\t\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d [+-]\d\d\d\d")
494
505
        self.assertTrue(dlg._file_message_expander.get_expanded())
495
506
        self.assertTrue(dlg._file_message_expander.get_property('sensitive'))
496
507
 
497
 
        dlg._treeview_files.set_cursor((0,))
 
508
        dlg._treeview_files.set_cursor(
 
509
            Gtk.TreePath(path=0), None, False)
498
510
        self.assertEqual('Diff for All Files', dlg._diff_label.get_text())
499
511
        self.assertEqual('File commit message',
500
512
                         dlg._file_message_expander.get_label())
510
522
 
511
523
        def get_file_text():
512
524
            buf = dlg._file_message_text_view.get_buffer()
513
 
            return buf.get_text(buf.get_start_iter(), buf.get_end_iter())
 
525
            return buf.get_text(
 
526
                buf.get_start_iter(), buf.get_end_iter(), True)
514
527
 
515
528
        def get_saved_text(path):
516
529
            """Get the saved text for a given record."""
523
536
        self.assertFalse(dlg._file_message_expander.get_property('sensitive'))
524
537
        self.assertEqual('', get_file_text())
525
538
 
526
 
        dlg._treeview_files.set_cursor((1,))
 
539
        dlg._treeview_files.set_cursor(
 
540
            Gtk.TreePath(path=1), None, False)
527
541
        self.assertEqual('Commit message for a',
528
542
                         dlg._file_message_expander.get_label())
529
543
        self.assertTrue(dlg._file_message_expander.get_expanded())
536
550
        # We should have updated the ListStore with the new file commit info
537
551
        self.assertEqual('Some text\nfor a\n', get_saved_text(1))
538
552
 
539
 
        dlg._treeview_files.set_cursor((2,))
 
553
        dlg._treeview_files.set_cursor(
 
554
            Gtk.TreePath(path=2), None, False)
540
555
        self.assertEqual('Commit message for b/',
541
556
                         dlg._file_message_expander.get_label())
542
557
        self.assertTrue(dlg._file_message_expander.get_expanded())
547
562
        dlg._set_file_commit_message('More text\nfor b\n')
548
563
        # Now switch back to 'a'. The message should be saved, and the buffer
549
564
        # should be updated with the other text
550
 
        dlg._treeview_files.set_cursor((1,))
 
565
        dlg._treeview_files.set_cursor(
 
566
            Gtk.TreePath(path=1), None, False)
551
567
        self.assertEqual('More text\nfor b\n', get_saved_text(2))
552
568
        self.assertEqual('Commit message for a',
553
569
                         dlg._file_message_expander.get_label())
573
589
        #       do with. So instead, we just call toggle directly, and assume
574
590
        #       that toggle is hooked in correctly
575
591
        # column = dlg._treeview_files.get_column(0)
576
 
        # renderer = column.get_cell_renderers()[0]
 
592
        # renderer = column.get_cells()[0]
577
593
 
578
594
        # Toggle a single entry should set just that entry to False
579
595
        dlg._toggle_commit(None, 1, dlg._files_store)
626
642
        dlg._commit_selected_radio.set_active(True)
627
643
        self.assertEqual((['a_file', 'b_dir'], []), dlg._get_specific_files())
628
644
 
629
 
        dlg._treeview_files.set_cursor((1,))
 
645
        dlg._treeview_files.set_cursor(
 
646
            Gtk.TreePath(path=1), None, False)
630
647
        dlg._set_file_commit_message('Test\nmessage\nfor a_file\n')
631
 
        dlg._treeview_files.set_cursor((2,))
 
648
        dlg._treeview_files.set_cursor(
 
649
            Gtk.TreePath(path=2), None, False)
632
650
        dlg._set_file_commit_message('message\nfor b_dir\n')
633
651
 
634
652
        self.assertEqual((['a_file', 'b_dir'],
644
662
                            'message':'message\nfor b_dir\n'},
645
663
                          ]), dlg._get_specific_files())
646
664
 
647
 
 
648
 
class TestCommitDialog_Commit(tests.TestCaseWithTransport):
649
 
    """Tests on the actual 'commit' button being pushed."""
 
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):
650
691
 
651
692
    def _set_question_yes(self, dlg):
652
693
        """Set the dialog to answer YES to any questions."""
653
694
        self.questions = []
654
 
        def _question_yes(*args):
 
695
        def _question_yes(*args, **kwargs):
655
696
            self.questions.append(args)
656
697
            self.questions.append('YES')
657
 
            return gtk.RESPONSE_YES
 
698
            return Gtk.ResponseType.YES
658
699
        dlg._question_dialog = _question_yes
659
700
 
660
701
    def _set_question_no(self, dlg):
661
702
        """Set the dialog to answer NO to any questions."""
662
703
        self.questions = []
663
 
        def _question_no(*args):
 
704
        def _question_no(*args, **kwargs):
664
705
            self.questions.append(args)
665
706
            self.questions.append('NO')
666
 
            return gtk.RESPONSE_NO
 
707
            return Gtk.ResponseType.NO
667
708
        dlg._question_dialog = _question_no
668
709
 
 
710
 
 
711
class TestCommitDialog_Commit(tests.TestCaseWithTransport, QuestionHelpers):
 
712
    """Tests on the actual 'commit' button being pushed."""
 
713
 
669
714
    def test_bound_commit_local(self):
670
715
        tree = self.make_branch_and_tree('tree')
671
716
        self.build_tree(['tree/a'])
687
732
        self.assertEqual(last_rev, dlg.committed_revision_id)
688
733
        self.assertEqual(rev_id1, tree.branch.last_revision())
689
734
 
 
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
 
690
750
    def test_bound_commit_both(self):
691
751
        tree = self.make_branch_and_tree('tree')
692
752
        self.build_tree(['tree/a'])
708
768
        self.assertEqual(last_rev, dlg.committed_revision_id)
709
769
        self.assertEqual(last_rev, tree.branch.last_revision())
710
770
 
711
 
    def test_commit_no_message(self):
 
771
    def test_commit_empty_message(self):
712
772
        tree = self.make_branch_and_tree('tree')
713
773
        self.build_tree(['tree/a', 'tree/b'])
714
774
        tree.add(['a'], ['a-id'])
929
989
 
930
990
        dlg = commit.CommitDialog(tree)
931
991
        dlg._commit_selected_radio.set_active(True) # enable partial
932
 
        dlg._treeview_files.set_cursor((1,))
 
992
        dlg._treeview_files.set_cursor(
 
993
            Gtk.TreePath(path=1), None, False)
933
994
        dlg._set_file_commit_message('Message for A\n')
934
 
        dlg._treeview_files.set_cursor((2,))
 
995
        dlg._treeview_files.set_cursor(
 
996
            Gtk.TreePath(path=2), None, False)
935
997
        dlg._set_file_commit_message('Message for B\n')
936
998
        dlg._toggle_commit(None, 2, dlg._files_store) # unset 'b'
937
999
        dlg._set_global_commit_message('Commit just "a"')
943
1005
        rev = tree.branch.repository.get_revision(rev_id2)
944
1006
        self.assertEqual('Commit just "a"', rev.message)
945
1007
        file_info = rev.properties['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)
 
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)
950
1013
        self.assertEqual([{'path':'a', 'file_id':'a-id',
951
 
                           'message':'Message for A\n'},
952
 
                         ], bencode.bdecode(file_info))
 
1014
                           'message':'Message for A\n'},],
 
1015
                         bencode.bdecode(file_info.encode('UTF-8')))
953
1016
 
954
1017
    def test_commit_messages_after_merge(self):
955
1018
        tree = self.make_branch_and_tree('tree')
963
1026
        tree.merge_from_branch(tree2.branch)
964
1027
 
965
1028
        dlg = commit.CommitDialog(tree)
966
 
        dlg._treeview_files.set_cursor((1,)) # 'a'
 
1029
        dlg._treeview_files.set_cursor(
 
1030
            Gtk.TreePath(path=1), None, False) # 'a'
967
1031
        dlg._set_file_commit_message('Message for A\n')
968
1032
        # No message for 'B'
969
1033
        dlg._set_global_commit_message('Merging from "tree2"\n')
976
1040
        self.assertEqual('Merging from "tree2"\n', rev.message)
977
1041
        self.assertEqual([rev_id1, rev_id2], rev.parent_ids)
978
1042
        file_info = rev.properties['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)
 
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)
983
1048
        self.assertEqual([{'path':'a', 'file_id':'a-id',
984
 
                           'message':'Message for A\n'},
985
 
                         ], bencode.bdecode(file_info))
 
1049
                           'message':'Message for A\n'},],
 
1050
                         bencode.bdecode(file_info.encode('UTF-8')))
986
1051
 
987
1052
    def test_commit_unicode_messages(self):
988
1053
        self.requireFeature(tests.UnicodeFilenameFeature)
993
1058
        tree.add(['a', u'\u03a9'], ['a-id', 'omega-id'])
994
1059
 
995
1060
        dlg = commit.CommitDialog(tree)
996
 
        dlg._treeview_files.set_cursor((1,)) # 'a'
 
1061
        dlg._treeview_files.set_cursor(
 
1062
            Gtk.TreePath(path=1), None, False) # 'a'
997
1063
        dlg._set_file_commit_message(u'Test \xfan\xecc\xf6de\n')
998
 
        dlg._treeview_files.set_cursor((2,)) # omega
 
1064
        dlg._treeview_files.set_cursor(
 
1065
            Gtk.TreePath(path=2), None, False) # omega
999
1066
        dlg._set_file_commit_message(u'\u03a9 is the end of all things.\n')
1000
1067
        dlg._set_global_commit_message(u'\u03a9 and \xfan\xecc\xf6de\n')
1001
1068
 
1030
1097
                          {'path':u'\u03a9', 'file_id':'omega-id',
1031
1098
                           'message':u'\u03a9 is the end of all things.\n'},
1032
1099
                         ], 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())