/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 16:24:24 UTC
  • mto: This revision was merged to the branch mainline in revision 519.
  • Revision ID: jelmer@samba.org-20080629162424-48a6rrjmmpejfcyr
Stop emitting no longer used revisions-loaded message.

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