/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: 2012-07-09 15:23:26 UTC
  • mto: This revision was merged to the branch mainline in revision 794.
  • Revision ID: jelmer@samba.org-20120709152326-dzxb8zoz0btull7n
Remove bzr-notify.

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
"""Test the Commit functionality."""
18
18
 
19
19
import os
 
20
import subprocess
 
21
from tempfile import NamedTemporaryFile
20
22
 
21
 
import gtk
 
23
from gi.repository import Gtk
22
24
 
23
25
from bzrlib import (
24
26
    branch,
25
 
    revision,
26
27
    tests,
27
28
    uncommit,
28
29
    )
29
30
try:
30
 
    from bzrlib import bencode
31
 
except ImportError:
32
 
    from bzrlib.util import bencode
 
31
    from bzrlib.tests.features import UnicodeFilenameFeature
 
32
except ImportError: # bzr < 2.5
 
33
    from bzrlib.tests import UnicodeFilenameFeature
 
34
from bzrlib import bencode
33
35
 
34
 
from bzrlib.plugins.gtk import commit
 
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
35
42
 
36
43
 
37
44
# TODO: All we need is basic ancestry code to test this, we shouldn't need a
43
50
        tree = self.make_branch_and_tree('.')
44
51
        tree.commit('one')
45
52
 
46
 
        self.assertIs(None, commit.pending_revisions(tree))
 
53
        self.addCleanup(tree.lock_read().unlock)
 
54
        self.assertEquals([], list(commit.pending_revisions(tree)))
47
55
 
48
56
    def test_pending_revisions_simple(self):
49
57
        tree = self.make_branch_and_tree('tree')
53
61
        tree.merge_from_branch(tree2.branch)
54
62
        self.assertEqual([rev_id1, rev_id2], tree.get_parent_ids())
55
63
 
56
 
        pending_revisions = commit.pending_revisions(tree)
 
64
        self.addCleanup(tree.lock_read().unlock)
 
65
        pending_revisions = list(commit.pending_revisions(tree))
57
66
        # One primary merge
58
67
        self.assertEqual(1, len(pending_revisions))
59
68
        # Revision == rev_id2
71
80
        tree.merge_from_branch(tree2.branch)
72
81
        self.assertEqual([rev_id1, rev_id4], tree.get_parent_ids())
73
82
 
74
 
        pending_revisions = commit.pending_revisions(tree)
 
83
        self.addCleanup(tree.lock_read().unlock)
 
84
        pending_revisions = list(commit.pending_revisions(tree))
75
85
        # One primary merge
76
86
        self.assertEqual(1, len(pending_revisions))
77
87
        # Revision == rev_id2
91
101
        rev_id4 = tree3.commit('four')
92
102
        rev_id5 = tree3.commit('five')
93
103
        tree.merge_from_branch(tree2.branch)
94
 
        tree.merge_from_branch(tree3.branch)
 
104
        tree.merge_from_branch(tree3.branch, force=True)
95
105
        self.assertEqual([rev_id1, rev_id3, rev_id5], tree.get_parent_ids())
96
106
 
97
 
        pending_revisions = commit.pending_revisions(tree)
 
107
        self.addCleanup(tree.lock_read().unlock)
 
108
        pending_revisions = list(commit.pending_revisions(tree))
98
109
        # Two primary merges
99
110
        self.assertEqual(2, len(pending_revisions))
100
111
        # Revision == rev_id2
137
148
 
138
149
class TestCommitDialogSimple(tests.TestCaseWithTransport):
139
150
 
 
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
 
140
171
    def test_setup_parameters_no_pending(self):
141
172
        tree = self.make_branch_and_tree('tree')
142
173
        rev_id = tree.commit('first')
143
174
 
144
175
        dlg = CommitDialogNoWidgets(tree)
145
176
        self.assertEqual(rev_id, dlg._basis_tree.get_revision_id())
146
 
        self.assertIs(None, dlg._pending)
 
177
        self.assertEquals([], dlg._pending)
147
178
        self.assertFalse(dlg._is_checkout)
148
179
 
149
180
    def test_setup_parameters_checkout(self):
154
185
 
155
186
        dlg = CommitDialogNoWidgets(tree2)
156
187
        self.assertEqual(rev_id, dlg._basis_tree.get_revision_id())
157
 
        self.assertIs(None, dlg._pending)
 
188
        self.assertEquals([], dlg._pending)
158
189
        self.assertTrue(dlg._is_checkout)
159
190
 
160
191
    def test_setup_parameters_pending(self):
185
216
        self.assertEqual([], delta.removed)
186
217
        self.assertEqual([(u'a', 'a-id', 'file')], delta.added)
187
218
 
 
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
 
188
245
 
189
246
class TestCommitDialog(tests.TestCaseWithTransport):
190
247
 
212
269
 
213
270
        commit_col = dlg._treeview_files.get_column(0)
214
271
        self.assertEqual('Commit', commit_col.get_title())
215
 
        renderer = commit_col.get_cell_renderers()[0]
 
272
        renderer = commit_col.get_cells()[0]
216
273
        self.assertTrue(renderer.get_property('activatable'))
217
274
 
218
275
        self.assertEqual('Commit all changes',
237
294
 
238
295
        commit_col = dlg._treeview_files.get_column(0)
239
296
        self.assertEqual('Commit*', commit_col.get_title())
240
 
        renderer = commit_col.get_cell_renderers()[0]
 
297
        renderer = commit_col.get_cells()[0]
241
298
        self.assertFalse(renderer.get_property('activatable'))
242
299
 
243
300
        values = [(r[0], r[1], r[2], r[3]) for r in dlg._pending_store]
271
328
                               committer='Jerry Foo <jerry@foo.com>',
272
329
                               timestamp=1191372278.05,
273
330
                               timezone=+7200)
274
 
        tree.merge_from_branch(tree3.branch)
 
331
        tree.merge_from_branch(tree3.branch, force=True)
275
332
 
276
333
        dlg = commit.CommitDialog(tree)
277
334
        # TODO: assert that the pending box is set to show
289
346
 
290
347
        dlg = commit.CommitDialog(tree)
291
348
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
292
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
349
        self.assertEqual([("", "", True, 'All Files', ''),
293
350
                          ('a-id', 'a', True, 'a', 'added'),
294
351
                          ('b-id', 'b', True, 'b/', 'added'),
295
352
                          ('c-id', 'b/c', True, 'b/c', 'added'),
306
363
 
307
364
        dlg = commit.CommitDialog(tree)
308
365
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
309
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
366
        self.assertEqual([("", "", True, 'All Files', ''),
310
367
                          ('b-id', 'd', True, 'b/ => d/', 'renamed'),
311
368
                          ('a-id', 'd/a', True, 'a => d/a', 'renamed'),
312
369
                         ], values)
321
378
 
322
379
        dlg = commit.CommitDialog(tree)
323
380
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
324
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
381
        self.assertEqual([("", "", True, 'All Files', ''),
325
382
                          ('a-id', 'a', True, 'a', 'modified'),
326
383
                         ], values)
327
384
 
341
398
 
342
399
        dlg = commit.CommitDialog(tree)
343
400
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
344
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
401
        self.assertEqual([("", "", True, 'All Files', ''),
345
402
                          ('b-id', 'd', True, 'b/ => d/', 'renamed'),
346
403
                          ('a-id', 'd/a', True, 'a => d/a', 'renamed and modified'),
347
404
                          ('c-id', 'd/c', True, 'd/c', 'modified'),
364
421
 
365
422
        dlg = commit.CommitDialog(tree)
366
423
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
367
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
424
        self.assertEqual([("", "", True, 'All Files', ''),
368
425
                          ('a-id', 'a', True, 'a => a/', 'kind changed'),
369
426
                          # ('b-id', 'c', True, 'b => c/', 'renamed and modified'),
370
427
                         ], values)
380
437
 
381
438
        dlg = commit.CommitDialog(tree)
382
439
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
383
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
440
        self.assertEqual([("", "", True, 'All Files', ''),
384
441
                          ('a-id', 'a', True, 'a', 'removed'),
385
442
                          ('b-id', 'b', True, 'b/', 'removed'),
386
443
                         ], values)
387
444
        # All Files should be selected
388
 
        self.assertEqual(((0,), None), dlg._treeview_files.get_cursor())
 
445
        self.assertEqual(
 
446
            (Gtk.TreePath(path=0), None), dlg._treeview_files.get_cursor())
389
447
 
390
448
    def test_filelist_with_selected(self):
391
449
        tree = self.make_branch_and_tree('tree')
394
452
 
395
453
        dlg = commit.CommitDialog(tree, selected='a')
396
454
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
397
 
        self.assertEqual([(None, None, False, 'All Files', ''),
 
455
        self.assertEqual([("", "", False, 'All Files', ''),
398
456
                          ('a-id', 'a', True, 'a', 'added'),
399
457
                          ('b-id', 'b', False, 'b/', 'added'),
400
458
                         ], values)
401
459
        # This file should also be selected in the file list, rather than the
402
460
        # 'All Files' selection
403
 
        self.assertEqual(((1,), None), dlg._treeview_files.get_cursor())
 
461
        self.assertEqual(
 
462
            (Gtk.TreePath(path=1), None), dlg._treeview_files.get_cursor())
404
463
 
405
464
    def test_diff_view(self):
406
465
        tree = self.make_branch_and_tree('tree')
414
473
        dlg = commit.CommitDialog(tree)
415
474
        diff_buffer = dlg._diff_view.buffer
416
475
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
417
 
                                    diff_buffer.get_end_iter()).splitlines(True)
 
476
                                    diff_buffer.get_end_iter(),
 
477
                                    True).splitlines(True)
418
478
 
419
479
        self.assertEqual("=== modified file 'a'\n", text[0])
420
480
        self.assertContainsRe(text[1],
465
525
        self.assertFalse(dlg._file_message_expander.get_expanded())
466
526
        self.assertFalse(dlg._file_message_expander.get_property('sensitive'))
467
527
 
468
 
        dlg._treeview_files.set_cursor((1,))
 
528
        dlg._treeview_files.set_cursor(
 
529
            Gtk.TreePath(path=1), None, False)
469
530
        self.assertEqual('Diff for a', dlg._diff_label.get_text())
470
531
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
471
 
                                    diff_buffer.get_end_iter()).splitlines(True)
 
532
                                    diff_buffer.get_end_iter(),
 
533
                                    True).splitlines(True)
472
534
        self.assertEqual("=== added file 'a'\n", text[0])
473
535
        self.assertContainsRe(text[1],
474
536
            r"--- a\t\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d [+-]\d\d\d\d")
482
544
        self.assertTrue(dlg._file_message_expander.get_expanded())
483
545
        self.assertTrue(dlg._file_message_expander.get_property('sensitive'))
484
546
 
485
 
        dlg._treeview_files.set_cursor((2,))
 
547
        dlg._treeview_files.set_cursor(
 
548
            Gtk.TreePath(path=2), None, False)
486
549
        self.assertEqual('Diff for b', dlg._diff_label.get_text())
487
550
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
488
 
                                    diff_buffer.get_end_iter()).splitlines(True)
 
551
                                    diff_buffer.get_end_iter(),
 
552
                                    True).splitlines(True)
489
553
        self.assertEqual("=== added file 'b'\n", text[0])
490
554
        self.assertContainsRe(text[1],
491
555
            r"--- b\t\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d [+-]\d\d\d\d")
499
563
        self.assertTrue(dlg._file_message_expander.get_expanded())
500
564
        self.assertTrue(dlg._file_message_expander.get_property('sensitive'))
501
565
 
502
 
        dlg._treeview_files.set_cursor((0,))
 
566
        dlg._treeview_files.set_cursor(
 
567
            Gtk.TreePath(path=0), None, False)
503
568
        self.assertEqual('Diff for All Files', dlg._diff_label.get_text())
504
569
        self.assertEqual('File commit message',
505
570
                         dlg._file_message_expander.get_label())
515
580
 
516
581
        def get_file_text():
517
582
            buf = dlg._file_message_text_view.get_buffer()
518
 
            return buf.get_text(buf.get_start_iter(), buf.get_end_iter())
 
583
            return buf.get_text(
 
584
                buf.get_start_iter(), buf.get_end_iter(), True)
519
585
 
520
586
        def get_saved_text(path):
521
587
            """Get the saved text for a given record."""
528
594
        self.assertFalse(dlg._file_message_expander.get_property('sensitive'))
529
595
        self.assertEqual('', get_file_text())
530
596
 
531
 
        dlg._treeview_files.set_cursor((1,))
 
597
        dlg._treeview_files.set_cursor(
 
598
            Gtk.TreePath(path=1), None, False)
532
599
        self.assertEqual('Commit message for a',
533
600
                         dlg._file_message_expander.get_label())
534
601
        self.assertTrue(dlg._file_message_expander.get_expanded())
541
608
        # We should have updated the ListStore with the new file commit info
542
609
        self.assertEqual('Some text\nfor a\n', get_saved_text(1))
543
610
 
544
 
        dlg._treeview_files.set_cursor((2,))
 
611
        dlg._treeview_files.set_cursor(
 
612
            Gtk.TreePath(path=2), None, False)
545
613
        self.assertEqual('Commit message for b/',
546
614
                         dlg._file_message_expander.get_label())
547
615
        self.assertTrue(dlg._file_message_expander.get_expanded())
552
620
        dlg._set_file_commit_message('More text\nfor b\n')
553
621
        # Now switch back to 'a'. The message should be saved, and the buffer
554
622
        # should be updated with the other text
555
 
        dlg._treeview_files.set_cursor((1,))
 
623
        dlg._treeview_files.set_cursor(
 
624
            Gtk.TreePath(path=1), None, False)
556
625
        self.assertEqual('More text\nfor b\n', get_saved_text(2))
557
626
        self.assertEqual('Commit message for a',
558
627
                         dlg._file_message_expander.get_label())
567
636
        tree.add(['a', 'b'], ['a-id', 'b-id'])
568
637
 
569
638
        dlg = commit.CommitDialog(tree)
570
 
        self.assertEqual([(None, None, True),
 
639
        self.assertEqual([("", "", True),
571
640
                          ('a-id', 'a', True),
572
641
                          ('b-id', 'b', True),
573
642
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
578
647
        #       do with. So instead, we just call toggle directly, and assume
579
648
        #       that toggle is hooked in correctly
580
649
        # column = dlg._treeview_files.get_column(0)
581
 
        # renderer = column.get_cell_renderers()[0]
 
650
        # renderer = column.get_cells()[0]
582
651
 
583
652
        # Toggle a single entry should set just that entry to False
584
653
        dlg._toggle_commit(None, 1, dlg._files_store)
585
 
        self.assertEqual([(None, None, True),
 
654
        self.assertEqual([("", "", True),
586
655
                          ('a-id', 'a', False),
587
656
                          ('b-id', 'b', True),
588
657
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
589
658
 
590
659
        # Toggling the main entry should set all entries
591
660
        dlg._toggle_commit(None, 0, dlg._files_store)
592
 
        self.assertEqual([(None, None, False),
 
661
        self.assertEqual([("", "", False),
593
662
                          ('a-id', 'a', False),
594
663
                          ('b-id', 'b', False),
595
664
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
596
665
 
597
666
        dlg._toggle_commit(None, 2, dlg._files_store)
598
 
        self.assertEqual([(None, None, False),
 
667
        self.assertEqual([("", "", False),
599
668
                          ('a-id', 'a', False),
600
669
                          ('b-id', 'b', True),
601
670
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
602
671
 
603
672
        dlg._toggle_commit(None, 0, dlg._files_store)
604
 
        self.assertEqual([(None, None, True),
 
673
        self.assertEqual([("", "", True),
605
674
                          ('a-id', 'a', True),
606
675
                          ('b-id', 'b', True),
607
676
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
631
700
        dlg._commit_selected_radio.set_active(True)
632
701
        self.assertEqual((['a_file', 'b_dir'], []), dlg._get_specific_files())
633
702
 
634
 
        dlg._treeview_files.set_cursor((1,))
 
703
        dlg._treeview_files.set_cursor(
 
704
            Gtk.TreePath(path=1), None, False)
635
705
        dlg._set_file_commit_message('Test\nmessage\nfor a_file\n')
636
 
        dlg._treeview_files.set_cursor((2,))
 
706
        dlg._treeview_files.set_cursor(
 
707
            Gtk.TreePath(path=2), None, False)
637
708
        dlg._set_file_commit_message('message\nfor b_dir\n')
638
709
 
639
710
        self.assertEqual((['a_file', 'b_dir'],
659
730
        dlg._commit_selected_radio.set_active(True)
660
731
        self.assertEqual((['a_file', 'b_dir'], []), dlg._get_specific_files())
661
732
 
662
 
        dlg._treeview_files.set_cursor((1,))
 
733
        dlg._treeview_files.set_cursor(
 
734
            Gtk.TreePath(path=1), None, False)
663
735
        dlg._set_file_commit_message('Test\r\nmessage\rfor a_file\n')
664
 
        dlg._treeview_files.set_cursor((2,))
 
736
        dlg._treeview_files.set_cursor(
 
737
            Gtk.TreePath(path=2), None, False)
665
738
        dlg._set_file_commit_message('message\r\nfor\nb_dir\r')
666
739
 
667
740
        self.assertEqual((['a_file', 'b_dir'],
680
753
        def _question_yes(*args, **kwargs):
681
754
            self.questions.append(args)
682
755
            self.questions.append('YES')
683
 
            return gtk.RESPONSE_YES
 
756
            return Gtk.ResponseType.YES
684
757
        dlg._question_dialog = _question_yes
685
758
 
686
759
    def _set_question_no(self, dlg):
689
762
        def _question_no(*args, **kwargs):
690
763
            self.questions.append(args)
691
764
            self.questions.append('NO')
692
 
            return gtk.RESPONSE_NO
 
765
            return Gtk.ResponseType.NO
693
766
        dlg._question_dialog = _question_no
694
767
 
695
768
 
974
1047
 
975
1048
        dlg = commit.CommitDialog(tree)
976
1049
        dlg._commit_selected_radio.set_active(True) # enable partial
977
 
        dlg._treeview_files.set_cursor((1,))
 
1050
        dlg._treeview_files.set_cursor(
 
1051
            Gtk.TreePath(path=1), None, False)
978
1052
        dlg._set_file_commit_message('Message for A\n')
979
 
        dlg._treeview_files.set_cursor((2,))
 
1053
        dlg._treeview_files.set_cursor(
 
1054
            Gtk.TreePath(path=2), None, False)
980
1055
        dlg._set_file_commit_message('Message for B\n')
981
1056
        dlg._toggle_commit(None, 2, dlg._files_store) # unset 'b'
982
1057
        dlg._set_global_commit_message('Commit just "a"')
988
1063
        rev = tree.branch.repository.get_revision(rev_id2)
989
1064
        self.assertEqual('Commit just "a"', rev.message)
990
1065
        file_info = rev.properties['file-info']
991
 
        self.assertEqual('ld7:file_id4:a-id'
992
 
                           '7:message14:Message for A\n'
993
 
                           '4:path1:a'
994
 
                         'ee', file_info)
 
1066
        self.assertEqual(u'ld7:file_id4:a-id'
 
1067
                         '7:message14:Message for A\n'
 
1068
                         '4:path1:a'
 
1069
                         'ee',
 
1070
                         file_info)
995
1071
        self.assertEqual([{'path':'a', 'file_id':'a-id',
996
 
                           'message':'Message for A\n'},
997
 
                         ], bencode.bdecode(file_info))
 
1072
                           'message':'Message for A\n'},],
 
1073
                         bencode.bdecode(file_info.encode('UTF-8')))
998
1074
 
999
1075
    def test_commit_messages_after_merge(self):
1000
1076
        tree = self.make_branch_and_tree('tree')
1008
1084
        tree.merge_from_branch(tree2.branch)
1009
1085
 
1010
1086
        dlg = commit.CommitDialog(tree)
1011
 
        dlg._treeview_files.set_cursor((1,)) # 'a'
 
1087
        dlg._treeview_files.set_cursor(
 
1088
            Gtk.TreePath(path=1), None, False) # 'a'
1012
1089
        dlg._set_file_commit_message('Message for A\n')
1013
1090
        # No message for 'B'
1014
1091
        dlg._set_global_commit_message('Merging from "tree2"\n')
1021
1098
        self.assertEqual('Merging from "tree2"\n', rev.message)
1022
1099
        self.assertEqual([rev_id1, rev_id2], rev.parent_ids)
1023
1100
        file_info = rev.properties['file-info']
1024
 
        self.assertEqual('ld7:file_id4:a-id'
1025
 
                           '7:message14:Message for A\n'
1026
 
                           '4:path1:a'
1027
 
                         'ee', file_info)
 
1101
        self.assertEqual(u'ld7:file_id4:a-id'
 
1102
                         '7:message14:Message for A\n'
 
1103
                         '4:path1:a'
 
1104
                         'ee',
 
1105
                         file_info)
1028
1106
        self.assertEqual([{'path':'a', 'file_id':'a-id',
1029
 
                           'message':'Message for A\n'},
1030
 
                         ], bencode.bdecode(file_info))
 
1107
                           'message':'Message for A\n'},],
 
1108
                         bencode.bdecode(file_info.encode('UTF-8')))
1031
1109
 
1032
1110
    def test_commit_unicode_messages(self):
1033
 
        self.requireFeature(tests.UnicodeFilenameFeature)
 
1111
        self.requireFeature(UnicodeFilenameFeature)
1034
1112
 
1035
1113
        tree = self.make_branch_and_tree('tree')
1036
1114
        tree.branch.get_config().set_user_option('per_file_commits', 'true')
1038
1116
        tree.add(['a', u'\u03a9'], ['a-id', 'omega-id'])
1039
1117
 
1040
1118
        dlg = commit.CommitDialog(tree)
1041
 
        dlg._treeview_files.set_cursor((1,)) # 'a'
 
1119
        dlg._treeview_files.set_cursor(
 
1120
            Gtk.TreePath(path=1), None, False) # 'a'
1042
1121
        dlg._set_file_commit_message(u'Test \xfan\xecc\xf6de\n')
1043
 
        dlg._treeview_files.set_cursor((2,)) # omega
 
1122
        dlg._treeview_files.set_cursor(
 
1123
            Gtk.TreePath(path=2), None, False) # omega
1044
1124
        dlg._set_file_commit_message(u'\u03a9 is the end of all things.\n')
1045
1125
        dlg._set_global_commit_message(u'\u03a9 and \xfan\xecc\xf6de\n')
1046
1126
 
1102
1182
        super(TestSavedCommitMessages, self).setUp()
1103
1183
        # Install our hook
1104
1184
        branch.Branch.hooks.install_named_hook(
1105
 
            'post_uncommit', commit.save_commit_messages, None)
 
1185
            'post_uncommit', commitmsgs.save_commit_messages, None)
1106
1186
 
1107
1187
    def _get_file_info_dict(self, rank):
1108
1188
        file_info = [dict(path='a', file_id='a-id', message='a msg %d' % rank),
1225
1305
        self.assertEquals(u'', self._get_commit_message())
1226
1306
        self.assertEquals(u'de',
1227
1307
                          self._get_file_commit_messages())
 
1308
 
 
1309
 
 
1310
class BzrHandlePatchTestCase(tests.TestCase):
 
1311
 
 
1312
    def setUp(self):
 
1313
        top = os.path.abspath(os.path.join(
 
1314
            os.path.dirname(__file__), os.pardir))
 
1315
        self.script = os.path.join(top, 'bzr-handle-patch')
 
1316
        self.env = dict(os.environ)
 
1317
        self.env['BZR_PLUGINS_AT'] = 'gtk@%s' % top
 
1318
        self.patch = NamedTemporaryFile()
 
1319
        self.patch.write('\n'.join([
 
1320
            "=== added file '_test.txt'",
 
1321
            "--- _test.txt      1970-01-01 00:00:00 +0000",
 
1322
            "+++ _test.txt      2012-02-03 20:00:34 +0000",
 
1323
            "@@ -0,0 +1,1 @@",
 
1324
            "+hello",
 
1325
            ]))
 
1326
        self.patch.flush()
 
1327
        super(BzrHandlePatchTestCase, self).setUp()
 
1328
 
 
1329
    def test_smoketest(self):
 
1330
        # This is a smoke test to verify the process starts.
 
1331
        bzr_notify = subprocess.Popen(
 
1332
            [self.script, self.patch.name, 'test'],
 
1333
            stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=self.env)
 
1334
        stdout, stderr = bzr_notify.communicate()
 
1335
        self.assertEqual('', stdout)
 
1336
        self.assertEqual('', stderr)