/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-12 20:25:28 UTC
  • mto: This revision was merged to the branch mainline in revision 741.
  • Revision ID: sinzui.is@verizon.net-20110812202528-4xf4a2t23urx50d2
Updated gst to gtk3.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2007, 2008, 2009, 2011, 2012, 2013 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
17
17
"""Test the Commit functionality."""
18
18
 
19
19
import os
20
 
import subprocess
21
 
from tempfile import NamedTemporaryFile
22
20
 
23
21
from gi.repository import Gtk
24
22
 
28
26
    uncommit,
29
27
    )
30
28
try:
31
 
    from bzrlib.tests.features import UnicodeFilenameFeature
32
 
except ImportError: # bzr < 2.5
33
 
    from bzrlib.tests import UnicodeFilenameFeature
34
 
from bzrlib import bencode
 
29
    from bzrlib import bencode
 
30
except ImportError:
 
31
    from bzrlib.util import bencode
35
32
 
36
 
from bzrlib.plugins.gtk import (
37
 
    commit,
38
 
    commitmsgs,
39
 
    )
40
 
from bzrlib.plugins.gtk.commitmsgs import SavedCommitMessagesManager
41
 
from bzrlib.plugins.gtk.tests import MockMethod
 
33
from bzrlib.plugins.gtk import commit
42
34
 
43
35
 
44
36
# TODO: All we need is basic ancestry code to test this, we shouldn't need a
50
42
        tree = self.make_branch_and_tree('.')
51
43
        tree.commit('one')
52
44
 
53
 
        self.addCleanup(tree.lock_read().unlock)
54
 
        self.assertEquals([], list(commit.pending_revisions(tree)))
 
45
        self.assertIs(None, commit.pending_revisions(tree))
55
46
 
56
47
    def test_pending_revisions_simple(self):
57
48
        tree = self.make_branch_and_tree('tree')
61
52
        tree.merge_from_branch(tree2.branch)
62
53
        self.assertEqual([rev_id1, rev_id2], tree.get_parent_ids())
63
54
 
64
 
        self.addCleanup(tree.lock_read().unlock)
65
 
        pending_revisions = list(commit.pending_revisions(tree))
 
55
        pending_revisions = commit.pending_revisions(tree)
66
56
        # One primary merge
67
57
        self.assertEqual(1, len(pending_revisions))
68
58
        # Revision == rev_id2
80
70
        tree.merge_from_branch(tree2.branch)
81
71
        self.assertEqual([rev_id1, rev_id4], tree.get_parent_ids())
82
72
 
83
 
        self.addCleanup(tree.lock_read().unlock)
84
 
        pending_revisions = list(commit.pending_revisions(tree))
 
73
        pending_revisions = commit.pending_revisions(tree)
85
74
        # One primary merge
86
75
        self.assertEqual(1, len(pending_revisions))
87
76
        # Revision == rev_id2
104
93
        tree.merge_from_branch(tree3.branch, force=True)
105
94
        self.assertEqual([rev_id1, rev_id3, rev_id5], tree.get_parent_ids())
106
95
 
107
 
        self.addCleanup(tree.lock_read().unlock)
108
 
        pending_revisions = list(commit.pending_revisions(tree))
 
96
        pending_revisions = commit.pending_revisions(tree)
109
97
        # Two primary merges
110
98
        self.assertEqual(2, len(pending_revisions))
111
99
        # Revision == rev_id2
148
136
 
149
137
class TestCommitDialogSimple(tests.TestCaseWithTransport):
150
138
 
151
 
    def test_init(self):
152
 
        MockMethod.bind(self, CommitDialogNoWidgets, 'setup_params')
153
 
        MockMethod.bind(self, CommitDialogNoWidgets, 'construct')
154
 
        MockMethod.bind(self, CommitDialogNoWidgets, 'fill_in_data')
155
 
 
156
 
        tree = self.make_branch_and_tree('tree')
157
 
        rev_id = tree.commit('first')
158
 
        dlg = CommitDialogNoWidgets(tree)
159
 
        self.assertIs(tree, dlg._wt)
160
 
        self.assertIs(None, dlg._selected)
161
 
        self.assertTrue(dlg._enable_per_file_commits)
162
 
        self.assertTrue(dlg._commit_all_changes)
163
 
        self.assertIs(None, dlg.committed_revision_id)
164
 
        self.assertIs(None, dlg._last_selected_file)
165
 
        self.assertIsInstance(
166
 
            dlg._saved_commit_messages_manager, SavedCommitMessagesManager)
167
 
        self.assertTrue(CommitDialogNoWidgets.setup_params.called)
168
 
        self.assertTrue(CommitDialogNoWidgets.construct.called)
169
 
        self.assertTrue(CommitDialogNoWidgets.fill_in_data.called)
170
 
 
171
139
    def test_setup_parameters_no_pending(self):
172
140
        tree = self.make_branch_and_tree('tree')
173
141
        rev_id = tree.commit('first')
174
142
 
175
143
        dlg = CommitDialogNoWidgets(tree)
176
144
        self.assertEqual(rev_id, dlg._basis_tree.get_revision_id())
177
 
        self.assertEquals([], dlg._pending)
 
145
        self.assertIs(None, dlg._pending)
178
146
        self.assertFalse(dlg._is_checkout)
179
147
 
180
148
    def test_setup_parameters_checkout(self):
185
153
 
186
154
        dlg = CommitDialogNoWidgets(tree2)
187
155
        self.assertEqual(rev_id, dlg._basis_tree.get_revision_id())
188
 
        self.assertEquals([], dlg._pending)
 
156
        self.assertIs(None, dlg._pending)
189
157
        self.assertTrue(dlg._is_checkout)
190
158
 
191
159
    def test_setup_parameters_pending(self):
216
184
        self.assertEqual([], delta.removed)
217
185
        self.assertEqual([(u'a', 'a-id', 'file')], delta.added)
218
186
 
219
 
    def test_on_treeview_files_cursor_changed_no_selection(self):
220
 
        MockMethod.bind(self, CommitDialogNoWidgets, '_update_per_file_info')
221
 
        tree = self.make_branch_and_tree('tree')
222
 
        rev_id = tree.commit('first')
223
 
        dlg = CommitDialogNoWidgets(tree)
224
 
        treeview = Gtk.TreeView()
225
 
        dlg._on_treeview_files_cursor_changed(treeview)
226
 
        self.assertFalse(CommitDialogNoWidgets._update_per_file_info.called)
227
 
 
228
 
    def test_on_treeview_files_cursor_changed_with_destroyed_treeview(self):
229
 
        MockMethod.bind(self, CommitDialogNoWidgets, '_update_per_file_info')
230
 
        tree = self.make_branch_and_tree('tree')
231
 
        rev_id = tree.commit('first')
232
 
        dlg = CommitDialogNoWidgets(tree)
233
 
        treeview = Gtk.TreeView()
234
 
        treeview.destroy()
235
 
        dlg._on_treeview_files_cursor_changed(treeview)
236
 
        self.assertFalse(CommitDialogNoWidgets._update_per_file_info.called)
237
 
 
238
 
    def test_get_line_height(self):
239
 
        tree = self.make_branch_and_tree('tree')
240
 
        dlg = CommitDialogNoWidgets(tree)
241
 
        textview = Gtk.TextView()
242
 
        line_height = dlg.get_line_height(textview)
243
 
        self.assertIsInstance(line_height, int)
244
 
 
245
187
 
246
188
class TestCommitDialog(tests.TestCaseWithTransport):
247
189
 
269
211
 
270
212
        commit_col = dlg._treeview_files.get_column(0)
271
213
        self.assertEqual('Commit', commit_col.get_title())
272
 
        renderer = commit_col.get_cells()[0]
 
214
        renderer = commit_col.get_cell_renderers()[0]
273
215
        self.assertTrue(renderer.get_property('activatable'))
274
216
 
275
217
        self.assertEqual('Commit all changes',
294
236
 
295
237
        commit_col = dlg._treeview_files.get_column(0)
296
238
        self.assertEqual('Commit*', commit_col.get_title())
297
 
        renderer = commit_col.get_cells()[0]
 
239
        renderer = commit_col.get_cell_renderers()[0]
298
240
        self.assertFalse(renderer.get_property('activatable'))
299
241
 
300
242
        values = [(r[0], r[1], r[2], r[3]) for r in dlg._pending_store]
346
288
 
347
289
        dlg = commit.CommitDialog(tree)
348
290
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
349
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
291
        self.assertEqual([(None, None, True, 'All Files', ''),
350
292
                          ('a-id', 'a', True, 'a', 'added'),
351
293
                          ('b-id', 'b', True, 'b/', 'added'),
352
294
                          ('c-id', 'b/c', True, 'b/c', 'added'),
363
305
 
364
306
        dlg = commit.CommitDialog(tree)
365
307
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
366
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
308
        self.assertEqual([(None, None, True, 'All Files', ''),
367
309
                          ('b-id', 'd', True, 'b/ => d/', 'renamed'),
368
310
                          ('a-id', 'd/a', True, 'a => d/a', 'renamed'),
369
311
                         ], values)
378
320
 
379
321
        dlg = commit.CommitDialog(tree)
380
322
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
381
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
323
        self.assertEqual([(None, None, True, 'All Files', ''),
382
324
                          ('a-id', 'a', True, 'a', 'modified'),
383
325
                         ], values)
384
326
 
398
340
 
399
341
        dlg = commit.CommitDialog(tree)
400
342
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
401
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
343
        self.assertEqual([(None, None, True, 'All Files', ''),
402
344
                          ('b-id', 'd', True, 'b/ => d/', 'renamed'),
403
345
                          ('a-id', 'd/a', True, 'a => d/a', 'renamed and modified'),
404
346
                          ('c-id', 'd/c', True, 'd/c', 'modified'),
421
363
 
422
364
        dlg = commit.CommitDialog(tree)
423
365
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
424
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
366
        self.assertEqual([(None, None, True, 'All Files', ''),
425
367
                          ('a-id', 'a', True, 'a => a/', 'kind changed'),
426
368
                          # ('b-id', 'c', True, 'b => c/', 'renamed and modified'),
427
369
                         ], values)
437
379
 
438
380
        dlg = commit.CommitDialog(tree)
439
381
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
440
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
382
        self.assertEqual([(None, None, True, 'All Files', ''),
441
383
                          ('a-id', 'a', True, 'a', 'removed'),
442
384
                          ('b-id', 'b', True, 'b/', 'removed'),
443
385
                         ], values)
444
386
        # All Files should be selected
445
 
        self.assertEqual(
446
 
            (Gtk.TreePath(path=0), None), dlg._treeview_files.get_cursor())
 
387
        self.assertEqual(((0,), None), dlg._treeview_files.get_cursor())
447
388
 
448
389
    def test_filelist_with_selected(self):
449
390
        tree = self.make_branch_and_tree('tree')
452
393
 
453
394
        dlg = commit.CommitDialog(tree, selected='a')
454
395
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
455
 
        self.assertEqual([("", "", False, 'All Files', ''),
 
396
        self.assertEqual([(None, None, False, 'All Files', ''),
456
397
                          ('a-id', 'a', True, 'a', 'added'),
457
398
                          ('b-id', 'b', False, 'b/', 'added'),
458
399
                         ], values)
459
400
        # This file should also be selected in the file list, rather than the
460
401
        # 'All Files' selection
461
 
        self.assertEqual(
462
 
            (Gtk.TreePath(path=1), None), dlg._treeview_files.get_cursor())
 
402
        self.assertEqual(((1,), None), dlg._treeview_files.get_cursor())
463
403
 
464
404
    def test_diff_view(self):
465
405
        tree = self.make_branch_and_tree('tree')
525
465
        self.assertFalse(dlg._file_message_expander.get_expanded())
526
466
        self.assertFalse(dlg._file_message_expander.get_property('sensitive'))
527
467
 
528
 
        dlg._treeview_files.set_cursor(
529
 
            Gtk.TreePath(path=1), None, False)
 
468
        dlg._treeview_files.set_cursor((1,))
530
469
        self.assertEqual('Diff for a', dlg._diff_label.get_text())
531
470
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
532
471
                                    diff_buffer.get_end_iter(),
544
483
        self.assertTrue(dlg._file_message_expander.get_expanded())
545
484
        self.assertTrue(dlg._file_message_expander.get_property('sensitive'))
546
485
 
547
 
        dlg._treeview_files.set_cursor(
548
 
            Gtk.TreePath(path=2), None, False)
 
486
        dlg._treeview_files.set_cursor((2,))
549
487
        self.assertEqual('Diff for b', dlg._diff_label.get_text())
550
488
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
551
489
                                    diff_buffer.get_end_iter(),
563
501
        self.assertTrue(dlg._file_message_expander.get_expanded())
564
502
        self.assertTrue(dlg._file_message_expander.get_property('sensitive'))
565
503
 
566
 
        dlg._treeview_files.set_cursor(
567
 
            Gtk.TreePath(path=0), None, False)
 
504
        dlg._treeview_files.set_cursor((0,))
568
505
        self.assertEqual('Diff for All Files', dlg._diff_label.get_text())
569
506
        self.assertEqual('File commit message',
570
507
                         dlg._file_message_expander.get_label())
594
531
        self.assertFalse(dlg._file_message_expander.get_property('sensitive'))
595
532
        self.assertEqual('', get_file_text())
596
533
 
597
 
        dlg._treeview_files.set_cursor(
598
 
            Gtk.TreePath(path=1), None, False)
 
534
        dlg._treeview_files.set_cursor((1,))
599
535
        self.assertEqual('Commit message for a',
600
536
                         dlg._file_message_expander.get_label())
601
537
        self.assertTrue(dlg._file_message_expander.get_expanded())
608
544
        # We should have updated the ListStore with the new file commit info
609
545
        self.assertEqual('Some text\nfor a\n', get_saved_text(1))
610
546
 
611
 
        dlg._treeview_files.set_cursor(
612
 
            Gtk.TreePath(path=2), None, False)
 
547
        dlg._treeview_files.set_cursor((2,))
613
548
        self.assertEqual('Commit message for b/',
614
549
                         dlg._file_message_expander.get_label())
615
550
        self.assertTrue(dlg._file_message_expander.get_expanded())
620
555
        dlg._set_file_commit_message('More text\nfor b\n')
621
556
        # Now switch back to 'a'. The message should be saved, and the buffer
622
557
        # should be updated with the other text
623
 
        dlg._treeview_files.set_cursor(
624
 
            Gtk.TreePath(path=1), None, False)
 
558
        dlg._treeview_files.set_cursor((1,))
625
559
        self.assertEqual('More text\nfor b\n', get_saved_text(2))
626
560
        self.assertEqual('Commit message for a',
627
561
                         dlg._file_message_expander.get_label())
636
570
        tree.add(['a', 'b'], ['a-id', 'b-id'])
637
571
 
638
572
        dlg = commit.CommitDialog(tree)
639
 
        self.assertEqual([("", "", True),
 
573
        self.assertEqual([(None, None, True),
640
574
                          ('a-id', 'a', True),
641
575
                          ('b-id', 'b', True),
642
576
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
647
581
        #       do with. So instead, we just call toggle directly, and assume
648
582
        #       that toggle is hooked in correctly
649
583
        # column = dlg._treeview_files.get_column(0)
650
 
        # renderer = column.get_cells()[0]
 
584
        # renderer = column.get_cell_renderers()[0]
651
585
 
652
586
        # Toggle a single entry should set just that entry to False
653
587
        dlg._toggle_commit(None, 1, dlg._files_store)
654
 
        self.assertEqual([("", "", True),
 
588
        self.assertEqual([(None, None, True),
655
589
                          ('a-id', 'a', False),
656
590
                          ('b-id', 'b', True),
657
591
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
658
592
 
659
593
        # Toggling the main entry should set all entries
660
594
        dlg._toggle_commit(None, 0, dlg._files_store)
661
 
        self.assertEqual([("", "", False),
 
595
        self.assertEqual([(None, None, False),
662
596
                          ('a-id', 'a', False),
663
597
                          ('b-id', 'b', False),
664
598
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
665
599
 
666
600
        dlg._toggle_commit(None, 2, dlg._files_store)
667
 
        self.assertEqual([("", "", False),
 
601
        self.assertEqual([(None, None, False),
668
602
                          ('a-id', 'a', False),
669
603
                          ('b-id', 'b', True),
670
604
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
671
605
 
672
606
        dlg._toggle_commit(None, 0, dlg._files_store)
673
 
        self.assertEqual([("", "", True),
 
607
        self.assertEqual([(None, None, True),
674
608
                          ('a-id', 'a', True),
675
609
                          ('b-id', 'b', True),
676
610
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
700
634
        dlg._commit_selected_radio.set_active(True)
701
635
        self.assertEqual((['a_file', 'b_dir'], []), dlg._get_specific_files())
702
636
 
703
 
        dlg._treeview_files.set_cursor(
704
 
            Gtk.TreePath(path=1), None, False)
 
637
        dlg._treeview_files.set_cursor((1,))
705
638
        dlg._set_file_commit_message('Test\nmessage\nfor a_file\n')
706
 
        dlg._treeview_files.set_cursor(
707
 
            Gtk.TreePath(path=2), None, False)
 
639
        dlg._treeview_files.set_cursor((2,))
708
640
        dlg._set_file_commit_message('message\nfor b_dir\n')
709
641
 
710
642
        self.assertEqual((['a_file', 'b_dir'],
730
662
        dlg._commit_selected_radio.set_active(True)
731
663
        self.assertEqual((['a_file', 'b_dir'], []), dlg._get_specific_files())
732
664
 
733
 
        dlg._treeview_files.set_cursor(
734
 
            Gtk.TreePath(path=1), None, False)
 
665
        dlg._treeview_files.set_cursor((1,))
735
666
        dlg._set_file_commit_message('Test\r\nmessage\rfor a_file\n')
736
 
        dlg._treeview_files.set_cursor(
737
 
            Gtk.TreePath(path=2), None, False)
 
667
        dlg._treeview_files.set_cursor((2,))
738
668
        dlg._set_file_commit_message('message\r\nfor\nb_dir\r')
739
669
 
740
670
        self.assertEqual((['a_file', 'b_dir'],
1047
977
 
1048
978
        dlg = commit.CommitDialog(tree)
1049
979
        dlg._commit_selected_radio.set_active(True) # enable partial
1050
 
        dlg._treeview_files.set_cursor(
1051
 
            Gtk.TreePath(path=1), None, False)
 
980
        dlg._treeview_files.set_cursor((1,))
1052
981
        dlg._set_file_commit_message('Message for A\n')
1053
 
        dlg._treeview_files.set_cursor(
1054
 
            Gtk.TreePath(path=2), None, False)
 
982
        dlg._treeview_files.set_cursor((2,))
1055
983
        dlg._set_file_commit_message('Message for B\n')
1056
984
        dlg._toggle_commit(None, 2, dlg._files_store) # unset 'b'
1057
985
        dlg._set_global_commit_message('Commit just "a"')
1084
1012
        tree.merge_from_branch(tree2.branch)
1085
1013
 
1086
1014
        dlg = commit.CommitDialog(tree)
1087
 
        dlg._treeview_files.set_cursor(
1088
 
            Gtk.TreePath(path=1), None, False) # 'a'
 
1015
        dlg._treeview_files.set_cursor((1,)) # 'a'
1089
1016
        dlg._set_file_commit_message('Message for A\n')
1090
1017
        # No message for 'B'
1091
1018
        dlg._set_global_commit_message('Merging from "tree2"\n')
1108
1035
                         bencode.bdecode(file_info.encode('UTF-8')))
1109
1036
 
1110
1037
    def test_commit_unicode_messages(self):
1111
 
        self.requireFeature(UnicodeFilenameFeature)
 
1038
        self.requireFeature(tests.UnicodeFilenameFeature)
1112
1039
 
1113
1040
        tree = self.make_branch_and_tree('tree')
1114
1041
        tree.branch.get_config().set_user_option('per_file_commits', 'true')
1116
1043
        tree.add(['a', u'\u03a9'], ['a-id', 'omega-id'])
1117
1044
 
1118
1045
        dlg = commit.CommitDialog(tree)
1119
 
        dlg._treeview_files.set_cursor(
1120
 
            Gtk.TreePath(path=1), None, False) # 'a'
 
1046
        dlg._treeview_files.set_cursor((1,)) # 'a'
1121
1047
        dlg._set_file_commit_message(u'Test \xfan\xecc\xf6de\n')
1122
 
        dlg._treeview_files.set_cursor(
1123
 
            Gtk.TreePath(path=2), None, False) # omega
 
1048
        dlg._treeview_files.set_cursor((2,)) # omega
1124
1049
        dlg._set_file_commit_message(u'\u03a9 is the end of all things.\n')
1125
1050
        dlg._set_global_commit_message(u'\u03a9 and \xfan\xecc\xf6de\n')
1126
1051
 
1182
1107
        super(TestSavedCommitMessages, self).setUp()
1183
1108
        # Install our hook
1184
1109
        branch.Branch.hooks.install_named_hook(
1185
 
            'post_uncommit', commitmsgs.save_commit_messages, None)
 
1110
            'post_uncommit', commit.save_commit_messages, None)
1186
1111
 
1187
1112
    def _get_file_info_dict(self, rank):
1188
 
        file_info = [dict(path='a', file_id='a-id',
1189
 
                          message='a {msg} %d' % rank),
1190
 
                     dict(path='b', file_id='b-id',
1191
 
                          message='b msg %d' % rank)]
 
1113
        file_info = [dict(path='a', file_id='a-id', message='a msg %d' % rank),
 
1114
                     dict(path='b', file_id='b-id', message='b msg %d' % rank)]
1192
1115
        return file_info
1193
1116
 
1194
1117
    def _get_file_info_revprops(self, rank):
1196
1119
        return {'file-info': bencode.bencode(file_info_prop).decode('UTF-8')}
1197
1120
 
1198
1121
    def _get_commit_message(self):
1199
 
        return self.config.get_user_option(
1200
 
            'gtk_global_commit_message', expand=False)
 
1122
        return self.config.get_user_option('gtk_global_commit_message')
1201
1123
 
1202
1124
    def _get_file_commit_messages(self):
1203
 
        return self.config.get_user_option(
1204
 
            'gtk_file_commit_messages', expand=False)
 
1125
        return self.config.get_user_option('gtk_file_commit_messages')
1205
1126
 
1206
1127
 
1207
1128
class TestUncommitHook(TestSavedCommitMessages):
1223
1144
    def test_uncommit_one_by_one(self):
1224
1145
        uncommit.uncommit(self.tree.branch, tree=self.tree)
1225
1146
        self.assertEquals(u'three', self._get_commit_message())
1226
 
        self.assertEquals(u'd4:a-id9:a {msg} 34:b-id7:b msg 3e',
 
1147
        self.assertEquals(u'd4:a-id7:a msg 34:b-id7:b msg 3e',
1227
1148
                          self._get_file_commit_messages())
1228
1149
 
1229
1150
        uncommit.uncommit(self.tree.branch, tree=self.tree)
1230
1151
        self.assertEquals(u'two\n******\nthree', self._get_commit_message())
1231
 
        self.assertEquals(u'd4:a-id26:a {msg} 2\n******\na {msg} 3'
 
1152
        self.assertEquals(u'd4:a-id22:a msg 2\n******\na msg 3'
1232
1153
                          '4:b-id22:b msg 2\n******\nb msg 3e',
1233
1154
                          self._get_file_commit_messages())
1234
1155
 
1235
1156
        uncommit.uncommit(self.tree.branch, tree=self.tree)
1236
1157
        self.assertEquals(u'one\n******\ntwo\n******\nthree',
1237
1158
                          self._get_commit_message())
1238
 
        self.assertEquals(
1239
 
            u'd4:a-id43:a {msg} 1\n******\na {msg} 2\n******\na {msg} 3'
1240
 
            '4:b-id37:b msg 1\n******\nb msg 2\n******\nb msg 3e',
1241
 
            self._get_file_commit_messages())
 
1159
        self.assertEquals(u'd4:a-id37:a msg 1\n******\na msg 2\n******\na msg 3'
 
1160
                          '4:b-id37:b msg 1\n******\nb msg 2\n******\nb msg 3e',
 
1161
                          self._get_file_commit_messages())
1242
1162
 
1243
1163
    def test_uncommit_all_at_once(self):
1244
1164
        uncommit.uncommit(self.tree.branch, tree=self.tree, revno=1)
1245
1165
        self.assertEquals(u'one\n******\ntwo\n******\nthree',
1246
1166
                          self._get_commit_message())
1247
 
        self.assertEquals(
1248
 
            u'd4:a-id43:a {msg} 1\n******\na {msg} 2\n******\na {msg} 3'
1249
 
            '4:b-id37:b msg 1\n******\nb msg 2\n******\nb msg 3e',
1250
 
            self._get_file_commit_messages())
 
1167
        self.assertEquals(u'd4:a-id37:a msg 1\n******\na msg 2\n******\na msg 3'
 
1168
                          '4:b-id37:b msg 1\n******\nb msg 2\n******\nb msg 3e',
 
1169
                          self._get_file_commit_messages())
1251
1170
 
1252
1171
 
1253
1172
class TestReusingSavedCommitMessages(TestSavedCommitMessages, QuestionHelpers):
1261
1180
        self.tree.add(['a'], ['a-id'])
1262
1181
        self.tree.add(['b'], ['b-id'])
1263
1182
        rev1 = self.tree.commit('one', revprops=self._get_file_info_revprops(1))
1264
 
        rev2 = self.tree.commit('two{x}',
1265
 
                                revprops=self._get_file_info_revprops(2))
 
1183
        rev2 = self.tree.commit('two', revprops=self._get_file_info_revprops(2))
1266
1184
        uncommit.uncommit(self.tree.branch, tree=self.tree)
1267
1185
        self.build_tree_contents([('tree/a', 'new a content\n'),
1268
1186
                                  ('tree/b', 'new b content'),])
1277
1195
 
1278
1196
    def test_setup_saved_messages(self):
1279
1197
        # Check the initial setup
1280
 
        self.assertEquals(u'two{x}', self._get_commit_message())
1281
 
        self.assertEquals(u'd4:a-id9:a {msg} 24:b-id7:b msg 2e',
 
1198
        self.assertEquals(u'two', self._get_commit_message())
 
1199
        self.assertEquals(u'd4:a-id7:a msg 24:b-id7:b msg 2e',
1282
1200
                          self._get_file_commit_messages())
1283
1201
 
1284
1202
    def test_messages_are_reloaded(self):
1285
1203
        dlg = self._get_commit_dialog(self.tree)
1286
 
        self.assertEquals(u'two{x}', dlg._get_global_commit_message())
 
1204
        self.assertEquals(u'two', dlg._get_global_commit_message())
1287
1205
        self.assertEquals(([u'a', u'b'],
1288
1206
                           [{ 'path': 'a',
1289
 
                             'file_id': 'a-id', 'message': 'a {msg} 2',},
 
1207
                             'file_id': 'a-id', 'message': 'a msg 2',},
1290
1208
                           {'path': 'b',
1291
1209
                            'file_id': 'b-id', 'message': 'b msg 2',}],),
1292
1210
                          dlg._get_specific_files())
1301
1219
        dlg = self._get_commit_dialog(self.tree)
1302
1220
        self._set_question_yes(dlg) # Save messages
1303
1221
        dlg._do_cancel()
1304
 
        self.assertEquals(u'two{x}', self._get_commit_message())
1305
 
        self.assertEquals(u'd4:a-id9:a {msg} 24:b-id7:b msg 2e',
 
1222
        self.assertEquals(u'two', self._get_commit_message())
 
1223
        self.assertEquals(u'd4:a-id7:a msg 24:b-id7:b msg 2e',
1306
1224
                          self._get_file_commit_messages())
1307
1225
 
1308
1226
    def test_messages_are_cleared_on_cancel_if_required(self):
1312
1230
        self.assertEquals(u'', self._get_commit_message())
1313
1231
        self.assertEquals(u'de',
1314
1232
                          self._get_file_commit_messages())
1315
 
 
1316
 
 
1317
 
class BzrHandlePatchTestCase(tests.TestCase):
1318
 
 
1319
 
    def setUp(self):
1320
 
        top = os.path.abspath(os.path.join(
1321
 
            os.path.dirname(__file__), os.pardir))
1322
 
        self.script = os.path.join(top, 'bzr-handle-patch')
1323
 
        self.env = dict(os.environ)
1324
 
        self.env['BZR_PLUGINS_AT'] = 'gtk@%s' % top
1325
 
        self.patch = NamedTemporaryFile()
1326
 
        self.patch.write('\n'.join([
1327
 
            "=== added file '_test.txt'",
1328
 
            "--- _test.txt      1970-01-01 00:00:00 +0000",
1329
 
            "+++ _test.txt      2012-02-03 20:00:34 +0000",
1330
 
            "@@ -0,0 +1,1 @@",
1331
 
            "+hello",
1332
 
            ]))
1333
 
        self.patch.flush()
1334
 
        super(BzrHandlePatchTestCase, self).setUp()
1335
 
 
1336
 
    def test_smoketest(self):
1337
 
        # This is a smoke test to verify the process starts.
1338
 
        bzr_notify = subprocess.Popen(
1339
 
            [self.script, self.patch.name, 'test'],
1340
 
            stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=self.env)
1341
 
        stdout, stderr = bzr_notify.communicate()
1342
 
        self.assertEqual('', stdout)
1343
 
        self.assertEqual('', stderr)