/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: 2009-06-05 12:18:50 UTC
  • Revision ID: jelmer@samba.org-20090605121850-d139huhca7le1sxp
Use get_apparent_authors() rather than deprecated get_apparent_author().

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
22
20
 
23
 
from gi.repository import Gtk
 
21
import gtk
24
22
 
25
23
from bzrlib import (
26
24
    branch,
 
25
    revision,
27
26
    tests,
28
27
    uncommit,
29
28
    )
30
 
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.util import bencode
35
30
 
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
 
31
from bzrlib.plugins.gtk import commit
42
32
 
43
33
 
44
34
# TODO: All we need is basic ancestry code to test this, we shouldn't need a
50
40
        tree = self.make_branch_and_tree('.')
51
41
        tree.commit('one')
52
42
 
53
 
        self.addCleanup(tree.lock_read().unlock)
54
 
        self.assertEquals([], list(commit.pending_revisions(tree)))
 
43
        self.assertIs(None, commit.pending_revisions(tree))
55
44
 
56
45
    def test_pending_revisions_simple(self):
57
46
        tree = self.make_branch_and_tree('tree')
61
50
        tree.merge_from_branch(tree2.branch)
62
51
        self.assertEqual([rev_id1, rev_id2], tree.get_parent_ids())
63
52
 
64
 
        self.addCleanup(tree.lock_read().unlock)
65
 
        pending_revisions = list(commit.pending_revisions(tree))
 
53
        pending_revisions = commit.pending_revisions(tree)
66
54
        # One primary merge
67
55
        self.assertEqual(1, len(pending_revisions))
68
56
        # Revision == rev_id2
80
68
        tree.merge_from_branch(tree2.branch)
81
69
        self.assertEqual([rev_id1, rev_id4], tree.get_parent_ids())
82
70
 
83
 
        self.addCleanup(tree.lock_read().unlock)
84
 
        pending_revisions = list(commit.pending_revisions(tree))
 
71
        pending_revisions = commit.pending_revisions(tree)
85
72
        # One primary merge
86
73
        self.assertEqual(1, len(pending_revisions))
87
74
        # Revision == rev_id2
101
88
        rev_id4 = tree3.commit('four')
102
89
        rev_id5 = tree3.commit('five')
103
90
        tree.merge_from_branch(tree2.branch)
104
 
        tree.merge_from_branch(tree3.branch, force=True)
 
91
        tree.merge_from_branch(tree3.branch)
105
92
        self.assertEqual([rev_id1, rev_id3, rev_id5], tree.get_parent_ids())
106
93
 
107
 
        self.addCleanup(tree.lock_read().unlock)
108
 
        pending_revisions = list(commit.pending_revisions(tree))
 
94
        pending_revisions = commit.pending_revisions(tree)
109
95
        # Two primary merges
110
96
        self.assertEqual(2, len(pending_revisions))
111
97
        # Revision == rev_id2
148
134
 
149
135
class TestCommitDialogSimple(tests.TestCaseWithTransport):
150
136
 
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
137
    def test_setup_parameters_no_pending(self):
172
138
        tree = self.make_branch_and_tree('tree')
173
139
        rev_id = tree.commit('first')
174
140
 
175
141
        dlg = CommitDialogNoWidgets(tree)
176
142
        self.assertEqual(rev_id, dlg._basis_tree.get_revision_id())
177
 
        self.assertEquals([], dlg._pending)
 
143
        self.assertIs(None, dlg._pending)
178
144
        self.assertFalse(dlg._is_checkout)
179
145
 
180
146
    def test_setup_parameters_checkout(self):
185
151
 
186
152
        dlg = CommitDialogNoWidgets(tree2)
187
153
        self.assertEqual(rev_id, dlg._basis_tree.get_revision_id())
188
 
        self.assertEquals([], dlg._pending)
 
154
        self.assertIs(None, dlg._pending)
189
155
        self.assertTrue(dlg._is_checkout)
190
156
 
191
157
    def test_setup_parameters_pending(self):
216
182
        self.assertEqual([], delta.removed)
217
183
        self.assertEqual([(u'a', 'a-id', 'file')], delta.added)
218
184
 
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
185
 
246
186
class TestCommitDialog(tests.TestCaseWithTransport):
247
187
 
269
209
 
270
210
        commit_col = dlg._treeview_files.get_column(0)
271
211
        self.assertEqual('Commit', commit_col.get_title())
272
 
        renderer = commit_col.get_cells()[0]
 
212
        renderer = commit_col.get_cell_renderers()[0]
273
213
        self.assertTrue(renderer.get_property('activatable'))
274
214
 
275
215
        self.assertEqual('Commit all changes',
294
234
 
295
235
        commit_col = dlg._treeview_files.get_column(0)
296
236
        self.assertEqual('Commit*', commit_col.get_title())
297
 
        renderer = commit_col.get_cells()[0]
 
237
        renderer = commit_col.get_cell_renderers()[0]
298
238
        self.assertFalse(renderer.get_property('activatable'))
299
239
 
300
240
        values = [(r[0], r[1], r[2], r[3]) for r in dlg._pending_store]
328
268
                               committer='Jerry Foo <jerry@foo.com>',
329
269
                               timestamp=1191372278.05,
330
270
                               timezone=+7200)
331
 
        tree.merge_from_branch(tree3.branch, force=True)
 
271
        tree.merge_from_branch(tree3.branch)
332
272
 
333
273
        dlg = commit.CommitDialog(tree)
334
274
        # TODO: assert that the pending box is set to show
346
286
 
347
287
        dlg = commit.CommitDialog(tree)
348
288
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
349
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
289
        self.assertEqual([(None, None, True, 'All Files', ''),
350
290
                          ('a-id', 'a', True, 'a', 'added'),
351
291
                          ('b-id', 'b', True, 'b/', 'added'),
352
292
                          ('c-id', 'b/c', True, 'b/c', 'added'),
363
303
 
364
304
        dlg = commit.CommitDialog(tree)
365
305
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
366
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
306
        self.assertEqual([(None, None, True, 'All Files', ''),
367
307
                          ('b-id', 'd', True, 'b/ => d/', 'renamed'),
368
308
                          ('a-id', 'd/a', True, 'a => d/a', 'renamed'),
369
309
                         ], values)
378
318
 
379
319
        dlg = commit.CommitDialog(tree)
380
320
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
381
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
321
        self.assertEqual([(None, None, True, 'All Files', ''),
382
322
                          ('a-id', 'a', True, 'a', 'modified'),
383
323
                         ], values)
384
324
 
398
338
 
399
339
        dlg = commit.CommitDialog(tree)
400
340
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
401
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
341
        self.assertEqual([(None, None, True, 'All Files', ''),
402
342
                          ('b-id', 'd', True, 'b/ => d/', 'renamed'),
403
343
                          ('a-id', 'd/a', True, 'a => d/a', 'renamed and modified'),
404
344
                          ('c-id', 'd/c', True, 'd/c', 'modified'),
421
361
 
422
362
        dlg = commit.CommitDialog(tree)
423
363
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
424
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
364
        self.assertEqual([(None, None, True, 'All Files', ''),
425
365
                          ('a-id', 'a', True, 'a => a/', 'kind changed'),
426
366
                          # ('b-id', 'c', True, 'b => c/', 'renamed and modified'),
427
367
                         ], values)
437
377
 
438
378
        dlg = commit.CommitDialog(tree)
439
379
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
440
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
380
        self.assertEqual([(None, None, True, 'All Files', ''),
441
381
                          ('a-id', 'a', True, 'a', 'removed'),
442
382
                          ('b-id', 'b', True, 'b/', 'removed'),
443
383
                         ], values)
444
384
        # All Files should be selected
445
 
        self.assertEqual(
446
 
            (Gtk.TreePath(path=0), None), dlg._treeview_files.get_cursor())
 
385
        self.assertEqual(((0,), None), dlg._treeview_files.get_cursor())
447
386
 
448
387
    def test_filelist_with_selected(self):
449
388
        tree = self.make_branch_and_tree('tree')
452
391
 
453
392
        dlg = commit.CommitDialog(tree, selected='a')
454
393
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
455
 
        self.assertEqual([("", "", False, 'All Files', ''),
 
394
        self.assertEqual([(None, None, False, 'All Files', ''),
456
395
                          ('a-id', 'a', True, 'a', 'added'),
457
396
                          ('b-id', 'b', False, 'b/', 'added'),
458
397
                         ], values)
459
398
        # This file should also be selected in the file list, rather than the
460
399
        # 'All Files' selection
461
 
        self.assertEqual(
462
 
            (Gtk.TreePath(path=1), None), dlg._treeview_files.get_cursor())
 
400
        self.assertEqual(((1,), None), dlg._treeview_files.get_cursor())
463
401
 
464
402
    def test_diff_view(self):
465
403
        tree = self.make_branch_and_tree('tree')
473
411
        dlg = commit.CommitDialog(tree)
474
412
        diff_buffer = dlg._diff_view.buffer
475
413
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
476
 
                                    diff_buffer.get_end_iter(),
477
 
                                    True).splitlines(True)
 
414
                                    diff_buffer.get_end_iter()).splitlines(True)
478
415
 
479
416
        self.assertEqual("=== modified file 'a'\n", text[0])
480
417
        self.assertContainsRe(text[1],
525
462
        self.assertFalse(dlg._file_message_expander.get_expanded())
526
463
        self.assertFalse(dlg._file_message_expander.get_property('sensitive'))
527
464
 
528
 
        dlg._treeview_files.set_cursor(
529
 
            Gtk.TreePath(path=1), None, False)
 
465
        dlg._treeview_files.set_cursor((1,))
530
466
        self.assertEqual('Diff for a', dlg._diff_label.get_text())
531
467
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
532
 
                                    diff_buffer.get_end_iter(),
533
 
                                    True).splitlines(True)
 
468
                                    diff_buffer.get_end_iter()).splitlines(True)
534
469
        self.assertEqual("=== added file 'a'\n", text[0])
535
470
        self.assertContainsRe(text[1],
536
471
            r"--- a\t\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d [+-]\d\d\d\d")
544
479
        self.assertTrue(dlg._file_message_expander.get_expanded())
545
480
        self.assertTrue(dlg._file_message_expander.get_property('sensitive'))
546
481
 
547
 
        dlg._treeview_files.set_cursor(
548
 
            Gtk.TreePath(path=2), None, False)
 
482
        dlg._treeview_files.set_cursor((2,))
549
483
        self.assertEqual('Diff for b', dlg._diff_label.get_text())
550
484
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
551
 
                                    diff_buffer.get_end_iter(),
552
 
                                    True).splitlines(True)
 
485
                                    diff_buffer.get_end_iter()).splitlines(True)
553
486
        self.assertEqual("=== added file 'b'\n", text[0])
554
487
        self.assertContainsRe(text[1],
555
488
            r"--- b\t\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d [+-]\d\d\d\d")
563
496
        self.assertTrue(dlg._file_message_expander.get_expanded())
564
497
        self.assertTrue(dlg._file_message_expander.get_property('sensitive'))
565
498
 
566
 
        dlg._treeview_files.set_cursor(
567
 
            Gtk.TreePath(path=0), None, False)
 
499
        dlg._treeview_files.set_cursor((0,))
568
500
        self.assertEqual('Diff for All Files', dlg._diff_label.get_text())
569
501
        self.assertEqual('File commit message',
570
502
                         dlg._file_message_expander.get_label())
580
512
 
581
513
        def get_file_text():
582
514
            buf = dlg._file_message_text_view.get_buffer()
583
 
            return buf.get_text(
584
 
                buf.get_start_iter(), buf.get_end_iter(), True)
 
515
            return buf.get_text(buf.get_start_iter(), buf.get_end_iter())
585
516
 
586
517
        def get_saved_text(path):
587
518
            """Get the saved text for a given record."""
594
525
        self.assertFalse(dlg._file_message_expander.get_property('sensitive'))
595
526
        self.assertEqual('', get_file_text())
596
527
 
597
 
        dlg._treeview_files.set_cursor(
598
 
            Gtk.TreePath(path=1), None, False)
 
528
        dlg._treeview_files.set_cursor((1,))
599
529
        self.assertEqual('Commit message for a',
600
530
                         dlg._file_message_expander.get_label())
601
531
        self.assertTrue(dlg._file_message_expander.get_expanded())
608
538
        # We should have updated the ListStore with the new file commit info
609
539
        self.assertEqual('Some text\nfor a\n', get_saved_text(1))
610
540
 
611
 
        dlg._treeview_files.set_cursor(
612
 
            Gtk.TreePath(path=2), None, False)
 
541
        dlg._treeview_files.set_cursor((2,))
613
542
        self.assertEqual('Commit message for b/',
614
543
                         dlg._file_message_expander.get_label())
615
544
        self.assertTrue(dlg._file_message_expander.get_expanded())
620
549
        dlg._set_file_commit_message('More text\nfor b\n')
621
550
        # Now switch back to 'a'. The message should be saved, and the buffer
622
551
        # should be updated with the other text
623
 
        dlg._treeview_files.set_cursor(
624
 
            Gtk.TreePath(path=1), None, False)
 
552
        dlg._treeview_files.set_cursor((1,))
625
553
        self.assertEqual('More text\nfor b\n', get_saved_text(2))
626
554
        self.assertEqual('Commit message for a',
627
555
                         dlg._file_message_expander.get_label())
636
564
        tree.add(['a', 'b'], ['a-id', 'b-id'])
637
565
 
638
566
        dlg = commit.CommitDialog(tree)
639
 
        self.assertEqual([("", "", True),
 
567
        self.assertEqual([(None, None, True),
640
568
                          ('a-id', 'a', True),
641
569
                          ('b-id', 'b', True),
642
570
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
647
575
        #       do with. So instead, we just call toggle directly, and assume
648
576
        #       that toggle is hooked in correctly
649
577
        # column = dlg._treeview_files.get_column(0)
650
 
        # renderer = column.get_cells()[0]
 
578
        # renderer = column.get_cell_renderers()[0]
651
579
 
652
580
        # Toggle a single entry should set just that entry to False
653
581
        dlg._toggle_commit(None, 1, dlg._files_store)
654
 
        self.assertEqual([("", "", True),
 
582
        self.assertEqual([(None, None, True),
655
583
                          ('a-id', 'a', False),
656
584
                          ('b-id', 'b', True),
657
585
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
658
586
 
659
587
        # Toggling the main entry should set all entries
660
588
        dlg._toggle_commit(None, 0, dlg._files_store)
661
 
        self.assertEqual([("", "", False),
 
589
        self.assertEqual([(None, None, False),
662
590
                          ('a-id', 'a', False),
663
591
                          ('b-id', 'b', False),
664
592
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
665
593
 
666
594
        dlg._toggle_commit(None, 2, dlg._files_store)
667
 
        self.assertEqual([("", "", False),
 
595
        self.assertEqual([(None, None, False),
668
596
                          ('a-id', 'a', False),
669
597
                          ('b-id', 'b', True),
670
598
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
671
599
 
672
600
        dlg._toggle_commit(None, 0, dlg._files_store)
673
 
        self.assertEqual([("", "", True),
 
601
        self.assertEqual([(None, None, True),
674
602
                          ('a-id', 'a', True),
675
603
                          ('b-id', 'b', True),
676
604
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
700
628
        dlg._commit_selected_radio.set_active(True)
701
629
        self.assertEqual((['a_file', 'b_dir'], []), dlg._get_specific_files())
702
630
 
703
 
        dlg._treeview_files.set_cursor(
704
 
            Gtk.TreePath(path=1), None, False)
 
631
        dlg._treeview_files.set_cursor((1,))
705
632
        dlg._set_file_commit_message('Test\nmessage\nfor a_file\n')
706
 
        dlg._treeview_files.set_cursor(
707
 
            Gtk.TreePath(path=2), None, False)
 
633
        dlg._treeview_files.set_cursor((2,))
708
634
        dlg._set_file_commit_message('message\nfor b_dir\n')
709
635
 
710
636
        self.assertEqual((['a_file', 'b_dir'],
730
656
        dlg._commit_selected_radio.set_active(True)
731
657
        self.assertEqual((['a_file', 'b_dir'], []), dlg._get_specific_files())
732
658
 
733
 
        dlg._treeview_files.set_cursor(
734
 
            Gtk.TreePath(path=1), None, False)
 
659
        dlg._treeview_files.set_cursor((1,))
735
660
        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)
 
661
        dlg._treeview_files.set_cursor((2,))
738
662
        dlg._set_file_commit_message('message\r\nfor\nb_dir\r')
739
663
 
740
664
        self.assertEqual((['a_file', 'b_dir'],
753
677
        def _question_yes(*args, **kwargs):
754
678
            self.questions.append(args)
755
679
            self.questions.append('YES')
756
 
            return Gtk.ResponseType.YES
 
680
            return gtk.RESPONSE_YES
757
681
        dlg._question_dialog = _question_yes
758
682
 
759
683
    def _set_question_no(self, dlg):
762
686
        def _question_no(*args, **kwargs):
763
687
            self.questions.append(args)
764
688
            self.questions.append('NO')
765
 
            return Gtk.ResponseType.NO
 
689
            return gtk.RESPONSE_NO
766
690
        dlg._question_dialog = _question_no
767
691
 
768
692
 
1047
971
 
1048
972
        dlg = commit.CommitDialog(tree)
1049
973
        dlg._commit_selected_radio.set_active(True) # enable partial
1050
 
        dlg._treeview_files.set_cursor(
1051
 
            Gtk.TreePath(path=1), None, False)
 
974
        dlg._treeview_files.set_cursor((1,))
1052
975
        dlg._set_file_commit_message('Message for A\n')
1053
 
        dlg._treeview_files.set_cursor(
1054
 
            Gtk.TreePath(path=2), None, False)
 
976
        dlg._treeview_files.set_cursor((2,))
1055
977
        dlg._set_file_commit_message('Message for B\n')
1056
978
        dlg._toggle_commit(None, 2, dlg._files_store) # unset 'b'
1057
979
        dlg._set_global_commit_message('Commit just "a"')
1063
985
        rev = tree.branch.repository.get_revision(rev_id2)
1064
986
        self.assertEqual('Commit just "a"', rev.message)
1065
987
        file_info = rev.properties['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)
 
988
        self.assertEqual('ld7:file_id4:a-id'
 
989
                           '7:message14:Message for A\n'
 
990
                           '4:path1:a'
 
991
                         'ee', file_info)
1071
992
        self.assertEqual([{'path':'a', 'file_id':'a-id',
1072
 
                           'message':'Message for A\n'},],
1073
 
                         bencode.bdecode(file_info.encode('UTF-8')))
 
993
                           'message':'Message for A\n'},
 
994
                         ], bencode.bdecode(file_info))
1074
995
 
1075
996
    def test_commit_messages_after_merge(self):
1076
997
        tree = self.make_branch_and_tree('tree')
1084
1005
        tree.merge_from_branch(tree2.branch)
1085
1006
 
1086
1007
        dlg = commit.CommitDialog(tree)
1087
 
        dlg._treeview_files.set_cursor(
1088
 
            Gtk.TreePath(path=1), None, False) # 'a'
 
1008
        dlg._treeview_files.set_cursor((1,)) # 'a'
1089
1009
        dlg._set_file_commit_message('Message for A\n')
1090
1010
        # No message for 'B'
1091
1011
        dlg._set_global_commit_message('Merging from "tree2"\n')
1098
1018
        self.assertEqual('Merging from "tree2"\n', rev.message)
1099
1019
        self.assertEqual([rev_id1, rev_id2], rev.parent_ids)
1100
1020
        file_info = rev.properties['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)
 
1021
        self.assertEqual('ld7:file_id4:a-id'
 
1022
                           '7:message14:Message for A\n'
 
1023
                           '4:path1:a'
 
1024
                         'ee', file_info)
1106
1025
        self.assertEqual([{'path':'a', 'file_id':'a-id',
1107
 
                           'message':'Message for A\n'},],
1108
 
                         bencode.bdecode(file_info.encode('UTF-8')))
 
1026
                           'message':'Message for A\n'},
 
1027
                         ], bencode.bdecode(file_info))
1109
1028
 
1110
1029
    def test_commit_unicode_messages(self):
1111
 
        self.requireFeature(UnicodeFilenameFeature)
 
1030
        self.requireFeature(tests.UnicodeFilenameFeature)
1112
1031
 
1113
1032
        tree = self.make_branch_and_tree('tree')
1114
1033
        tree.branch.get_config().set_user_option('per_file_commits', 'true')
1116
1035
        tree.add(['a', u'\u03a9'], ['a-id', 'omega-id'])
1117
1036
 
1118
1037
        dlg = commit.CommitDialog(tree)
1119
 
        dlg._treeview_files.set_cursor(
1120
 
            Gtk.TreePath(path=1), None, False) # 'a'
 
1038
        dlg._treeview_files.set_cursor((1,)) # 'a'
1121
1039
        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
 
1040
        dlg._treeview_files.set_cursor((2,)) # omega
1124
1041
        dlg._set_file_commit_message(u'\u03a9 is the end of all things.\n')
1125
1042
        dlg._set_global_commit_message(u'\u03a9 and \xfan\xecc\xf6de\n')
1126
1043
 
1182
1099
        super(TestSavedCommitMessages, self).setUp()
1183
1100
        # Install our hook
1184
1101
        branch.Branch.hooks.install_named_hook(
1185
 
            'post_uncommit', commitmsgs.save_commit_messages, None)
 
1102
            'post_uncommit', commit.save_commit_messages, None)
1186
1103
 
1187
1104
    def _get_file_info_dict(self, rank):
1188
1105
        file_info = [dict(path='a', file_id='a-id', message='a msg %d' % rank),
1305
1222
        self.assertEquals(u'', self._get_commit_message())
1306
1223
        self.assertEquals(u'de',
1307
1224
                          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)