/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: Mark Lee
  • Date: 2009-07-11 18:39:14 UTC
  • mto: This revision was merged to the branch mainline in revision 661.
  • Revision ID: bzr@lazymalevolence.com-20090711183914-zuii3et5skiv2njo
Re-ignore credits.pickle.

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
29
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
 
30
    from bzrlib import bencode
 
31
except ImportError:
 
32
    from bzrlib.util import bencode
35
33
 
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
 
34
from bzrlib.plugins.gtk import commit
42
35
 
43
36
 
44
37
# TODO: All we need is basic ancestry code to test this, we shouldn't need a
50
43
        tree = self.make_branch_and_tree('.')
51
44
        tree.commit('one')
52
45
 
53
 
        self.addCleanup(tree.lock_read().unlock)
54
 
        self.assertEquals([], list(commit.pending_revisions(tree)))
 
46
        self.assertIs(None, commit.pending_revisions(tree))
55
47
 
56
48
    def test_pending_revisions_simple(self):
57
49
        tree = self.make_branch_and_tree('tree')
61
53
        tree.merge_from_branch(tree2.branch)
62
54
        self.assertEqual([rev_id1, rev_id2], tree.get_parent_ids())
63
55
 
64
 
        self.addCleanup(tree.lock_read().unlock)
65
 
        pending_revisions = list(commit.pending_revisions(tree))
 
56
        pending_revisions = commit.pending_revisions(tree)
66
57
        # One primary merge
67
58
        self.assertEqual(1, len(pending_revisions))
68
59
        # Revision == rev_id2
80
71
        tree.merge_from_branch(tree2.branch)
81
72
        self.assertEqual([rev_id1, rev_id4], tree.get_parent_ids())
82
73
 
83
 
        self.addCleanup(tree.lock_read().unlock)
84
 
        pending_revisions = list(commit.pending_revisions(tree))
 
74
        pending_revisions = commit.pending_revisions(tree)
85
75
        # One primary merge
86
76
        self.assertEqual(1, len(pending_revisions))
87
77
        # Revision == rev_id2
101
91
        rev_id4 = tree3.commit('four')
102
92
        rev_id5 = tree3.commit('five')
103
93
        tree.merge_from_branch(tree2.branch)
104
 
        tree.merge_from_branch(tree3.branch, force=True)
 
94
        tree.merge_from_branch(tree3.branch)
105
95
        self.assertEqual([rev_id1, rev_id3, rev_id5], tree.get_parent_ids())
106
96
 
107
 
        self.addCleanup(tree.lock_read().unlock)
108
 
        pending_revisions = list(commit.pending_revisions(tree))
 
97
        pending_revisions = commit.pending_revisions(tree)
109
98
        # Two primary merges
110
99
        self.assertEqual(2, len(pending_revisions))
111
100
        # Revision == rev_id2
148
137
 
149
138
class TestCommitDialogSimple(tests.TestCaseWithTransport):
150
139
 
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
140
    def test_setup_parameters_no_pending(self):
172
141
        tree = self.make_branch_and_tree('tree')
173
142
        rev_id = tree.commit('first')
174
143
 
175
144
        dlg = CommitDialogNoWidgets(tree)
176
145
        self.assertEqual(rev_id, dlg._basis_tree.get_revision_id())
177
 
        self.assertEquals([], dlg._pending)
 
146
        self.assertIs(None, dlg._pending)
178
147
        self.assertFalse(dlg._is_checkout)
179
148
 
180
149
    def test_setup_parameters_checkout(self):
185
154
 
186
155
        dlg = CommitDialogNoWidgets(tree2)
187
156
        self.assertEqual(rev_id, dlg._basis_tree.get_revision_id())
188
 
        self.assertEquals([], dlg._pending)
 
157
        self.assertIs(None, dlg._pending)
189
158
        self.assertTrue(dlg._is_checkout)
190
159
 
191
160
    def test_setup_parameters_pending(self):
216
185
        self.assertEqual([], delta.removed)
217
186
        self.assertEqual([(u'a', 'a-id', 'file')], delta.added)
218
187
 
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
188
 
239
189
class TestCommitDialog(tests.TestCaseWithTransport):
240
190
 
262
212
 
263
213
        commit_col = dlg._treeview_files.get_column(0)
264
214
        self.assertEqual('Commit', commit_col.get_title())
265
 
        renderer = commit_col.get_cells()[0]
 
215
        renderer = commit_col.get_cell_renderers()[0]
266
216
        self.assertTrue(renderer.get_property('activatable'))
267
217
 
268
218
        self.assertEqual('Commit all changes',
287
237
 
288
238
        commit_col = dlg._treeview_files.get_column(0)
289
239
        self.assertEqual('Commit*', commit_col.get_title())
290
 
        renderer = commit_col.get_cells()[0]
 
240
        renderer = commit_col.get_cell_renderers()[0]
291
241
        self.assertFalse(renderer.get_property('activatable'))
292
242
 
293
243
        values = [(r[0], r[1], r[2], r[3]) for r in dlg._pending_store]
321
271
                               committer='Jerry Foo <jerry@foo.com>',
322
272
                               timestamp=1191372278.05,
323
273
                               timezone=+7200)
324
 
        tree.merge_from_branch(tree3.branch, force=True)
 
274
        tree.merge_from_branch(tree3.branch)
325
275
 
326
276
        dlg = commit.CommitDialog(tree)
327
277
        # TODO: assert that the pending box is set to show
339
289
 
340
290
        dlg = commit.CommitDialog(tree)
341
291
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
342
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
292
        self.assertEqual([(None, None, True, 'All Files', ''),
343
293
                          ('a-id', 'a', True, 'a', 'added'),
344
294
                          ('b-id', 'b', True, 'b/', 'added'),
345
295
                          ('c-id', 'b/c', True, 'b/c', 'added'),
356
306
 
357
307
        dlg = commit.CommitDialog(tree)
358
308
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
359
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
309
        self.assertEqual([(None, None, True, 'All Files', ''),
360
310
                          ('b-id', 'd', True, 'b/ => d/', 'renamed'),
361
311
                          ('a-id', 'd/a', True, 'a => d/a', 'renamed'),
362
312
                         ], values)
371
321
 
372
322
        dlg = commit.CommitDialog(tree)
373
323
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
374
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
324
        self.assertEqual([(None, None, True, 'All Files', ''),
375
325
                          ('a-id', 'a', True, 'a', 'modified'),
376
326
                         ], values)
377
327
 
391
341
 
392
342
        dlg = commit.CommitDialog(tree)
393
343
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
394
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
344
        self.assertEqual([(None, None, True, 'All Files', ''),
395
345
                          ('b-id', 'd', True, 'b/ => d/', 'renamed'),
396
346
                          ('a-id', 'd/a', True, 'a => d/a', 'renamed and modified'),
397
347
                          ('c-id', 'd/c', True, 'd/c', 'modified'),
414
364
 
415
365
        dlg = commit.CommitDialog(tree)
416
366
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
417
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
367
        self.assertEqual([(None, None, True, 'All Files', ''),
418
368
                          ('a-id', 'a', True, 'a => a/', 'kind changed'),
419
369
                          # ('b-id', 'c', True, 'b => c/', 'renamed and modified'),
420
370
                         ], values)
430
380
 
431
381
        dlg = commit.CommitDialog(tree)
432
382
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
433
 
        self.assertEqual([("", "", True, 'All Files', ''),
 
383
        self.assertEqual([(None, None, True, 'All Files', ''),
434
384
                          ('a-id', 'a', True, 'a', 'removed'),
435
385
                          ('b-id', 'b', True, 'b/', 'removed'),
436
386
                         ], values)
437
387
        # All Files should be selected
438
 
        self.assertEqual(
439
 
            (Gtk.TreePath(path=0), None), dlg._treeview_files.get_cursor())
 
388
        self.assertEqual(((0,), None), dlg._treeview_files.get_cursor())
440
389
 
441
390
    def test_filelist_with_selected(self):
442
391
        tree = self.make_branch_and_tree('tree')
445
394
 
446
395
        dlg = commit.CommitDialog(tree, selected='a')
447
396
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
448
 
        self.assertEqual([("", "", False, 'All Files', ''),
 
397
        self.assertEqual([(None, None, False, 'All Files', ''),
449
398
                          ('a-id', 'a', True, 'a', 'added'),
450
399
                          ('b-id', 'b', False, 'b/', 'added'),
451
400
                         ], values)
452
401
        # This file should also be selected in the file list, rather than the
453
402
        # 'All Files' selection
454
 
        self.assertEqual(
455
 
            (Gtk.TreePath(path=1), None), dlg._treeview_files.get_cursor())
 
403
        self.assertEqual(((1,), None), dlg._treeview_files.get_cursor())
456
404
 
457
405
    def test_diff_view(self):
458
406
        tree = self.make_branch_and_tree('tree')
466
414
        dlg = commit.CommitDialog(tree)
467
415
        diff_buffer = dlg._diff_view.buffer
468
416
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
469
 
                                    diff_buffer.get_end_iter(),
470
 
                                    True).splitlines(True)
 
417
                                    diff_buffer.get_end_iter()).splitlines(True)
471
418
 
472
419
        self.assertEqual("=== modified file 'a'\n", text[0])
473
420
        self.assertContainsRe(text[1],
518
465
        self.assertFalse(dlg._file_message_expander.get_expanded())
519
466
        self.assertFalse(dlg._file_message_expander.get_property('sensitive'))
520
467
 
521
 
        dlg._treeview_files.set_cursor(
522
 
            Gtk.TreePath(path=1), None, False)
 
468
        dlg._treeview_files.set_cursor((1,))
523
469
        self.assertEqual('Diff for a', dlg._diff_label.get_text())
524
470
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
525
 
                                    diff_buffer.get_end_iter(),
526
 
                                    True).splitlines(True)
 
471
                                    diff_buffer.get_end_iter()).splitlines(True)
527
472
        self.assertEqual("=== added file 'a'\n", text[0])
528
473
        self.assertContainsRe(text[1],
529
474
            r"--- a\t\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d [+-]\d\d\d\d")
537
482
        self.assertTrue(dlg._file_message_expander.get_expanded())
538
483
        self.assertTrue(dlg._file_message_expander.get_property('sensitive'))
539
484
 
540
 
        dlg._treeview_files.set_cursor(
541
 
            Gtk.TreePath(path=2), None, False)
 
485
        dlg._treeview_files.set_cursor((2,))
542
486
        self.assertEqual('Diff for b', dlg._diff_label.get_text())
543
487
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
544
 
                                    diff_buffer.get_end_iter(),
545
 
                                    True).splitlines(True)
 
488
                                    diff_buffer.get_end_iter()).splitlines(True)
546
489
        self.assertEqual("=== added file 'b'\n", text[0])
547
490
        self.assertContainsRe(text[1],
548
491
            r"--- b\t\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d [+-]\d\d\d\d")
556
499
        self.assertTrue(dlg._file_message_expander.get_expanded())
557
500
        self.assertTrue(dlg._file_message_expander.get_property('sensitive'))
558
501
 
559
 
        dlg._treeview_files.set_cursor(
560
 
            Gtk.TreePath(path=0), None, False)
 
502
        dlg._treeview_files.set_cursor((0,))
561
503
        self.assertEqual('Diff for All Files', dlg._diff_label.get_text())
562
504
        self.assertEqual('File commit message',
563
505
                         dlg._file_message_expander.get_label())
573
515
 
574
516
        def get_file_text():
575
517
            buf = dlg._file_message_text_view.get_buffer()
576
 
            return buf.get_text(
577
 
                buf.get_start_iter(), buf.get_end_iter(), True)
 
518
            return buf.get_text(buf.get_start_iter(), buf.get_end_iter())
578
519
 
579
520
        def get_saved_text(path):
580
521
            """Get the saved text for a given record."""
587
528
        self.assertFalse(dlg._file_message_expander.get_property('sensitive'))
588
529
        self.assertEqual('', get_file_text())
589
530
 
590
 
        dlg._treeview_files.set_cursor(
591
 
            Gtk.TreePath(path=1), None, False)
 
531
        dlg._treeview_files.set_cursor((1,))
592
532
        self.assertEqual('Commit message for a',
593
533
                         dlg._file_message_expander.get_label())
594
534
        self.assertTrue(dlg._file_message_expander.get_expanded())
601
541
        # We should have updated the ListStore with the new file commit info
602
542
        self.assertEqual('Some text\nfor a\n', get_saved_text(1))
603
543
 
604
 
        dlg._treeview_files.set_cursor(
605
 
            Gtk.TreePath(path=2), None, False)
 
544
        dlg._treeview_files.set_cursor((2,))
606
545
        self.assertEqual('Commit message for b/',
607
546
                         dlg._file_message_expander.get_label())
608
547
        self.assertTrue(dlg._file_message_expander.get_expanded())
613
552
        dlg._set_file_commit_message('More text\nfor b\n')
614
553
        # Now switch back to 'a'. The message should be saved, and the buffer
615
554
        # should be updated with the other text
616
 
        dlg._treeview_files.set_cursor(
617
 
            Gtk.TreePath(path=1), None, False)
 
555
        dlg._treeview_files.set_cursor((1,))
618
556
        self.assertEqual('More text\nfor b\n', get_saved_text(2))
619
557
        self.assertEqual('Commit message for a',
620
558
                         dlg._file_message_expander.get_label())
629
567
        tree.add(['a', 'b'], ['a-id', 'b-id'])
630
568
 
631
569
        dlg = commit.CommitDialog(tree)
632
 
        self.assertEqual([("", "", True),
 
570
        self.assertEqual([(None, None, True),
633
571
                          ('a-id', 'a', True),
634
572
                          ('b-id', 'b', True),
635
573
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
640
578
        #       do with. So instead, we just call toggle directly, and assume
641
579
        #       that toggle is hooked in correctly
642
580
        # column = dlg._treeview_files.get_column(0)
643
 
        # renderer = column.get_cells()[0]
 
581
        # renderer = column.get_cell_renderers()[0]
644
582
 
645
583
        # Toggle a single entry should set just that entry to False
646
584
        dlg._toggle_commit(None, 1, dlg._files_store)
647
 
        self.assertEqual([("", "", True),
 
585
        self.assertEqual([(None, None, True),
648
586
                          ('a-id', 'a', False),
649
587
                          ('b-id', 'b', True),
650
588
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
651
589
 
652
590
        # Toggling the main entry should set all entries
653
591
        dlg._toggle_commit(None, 0, dlg._files_store)
654
 
        self.assertEqual([("", "", False),
 
592
        self.assertEqual([(None, None, False),
655
593
                          ('a-id', 'a', False),
656
594
                          ('b-id', 'b', False),
657
595
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
658
596
 
659
597
        dlg._toggle_commit(None, 2, dlg._files_store)
660
 
        self.assertEqual([("", "", False),
 
598
        self.assertEqual([(None, None, False),
661
599
                          ('a-id', 'a', False),
662
600
                          ('b-id', 'b', True),
663
601
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
664
602
 
665
603
        dlg._toggle_commit(None, 0, dlg._files_store)
666
 
        self.assertEqual([("", "", True),
 
604
        self.assertEqual([(None, None, True),
667
605
                          ('a-id', 'a', True),
668
606
                          ('b-id', 'b', True),
669
607
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
693
631
        dlg._commit_selected_radio.set_active(True)
694
632
        self.assertEqual((['a_file', 'b_dir'], []), dlg._get_specific_files())
695
633
 
696
 
        dlg._treeview_files.set_cursor(
697
 
            Gtk.TreePath(path=1), None, False)
 
634
        dlg._treeview_files.set_cursor((1,))
698
635
        dlg._set_file_commit_message('Test\nmessage\nfor a_file\n')
699
 
        dlg._treeview_files.set_cursor(
700
 
            Gtk.TreePath(path=2), None, False)
 
636
        dlg._treeview_files.set_cursor((2,))
701
637
        dlg._set_file_commit_message('message\nfor b_dir\n')
702
638
 
703
639
        self.assertEqual((['a_file', 'b_dir'],
723
659
        dlg._commit_selected_radio.set_active(True)
724
660
        self.assertEqual((['a_file', 'b_dir'], []), dlg._get_specific_files())
725
661
 
726
 
        dlg._treeview_files.set_cursor(
727
 
            Gtk.TreePath(path=1), None, False)
 
662
        dlg._treeview_files.set_cursor((1,))
728
663
        dlg._set_file_commit_message('Test\r\nmessage\rfor a_file\n')
729
 
        dlg._treeview_files.set_cursor(
730
 
            Gtk.TreePath(path=2), None, False)
 
664
        dlg._treeview_files.set_cursor((2,))
731
665
        dlg._set_file_commit_message('message\r\nfor\nb_dir\r')
732
666
 
733
667
        self.assertEqual((['a_file', 'b_dir'],
746
680
        def _question_yes(*args, **kwargs):
747
681
            self.questions.append(args)
748
682
            self.questions.append('YES')
749
 
            return Gtk.ResponseType.YES
 
683
            return gtk.RESPONSE_YES
750
684
        dlg._question_dialog = _question_yes
751
685
 
752
686
    def _set_question_no(self, dlg):
755
689
        def _question_no(*args, **kwargs):
756
690
            self.questions.append(args)
757
691
            self.questions.append('NO')
758
 
            return Gtk.ResponseType.NO
 
692
            return gtk.RESPONSE_NO
759
693
        dlg._question_dialog = _question_no
760
694
 
761
695
 
1040
974
 
1041
975
        dlg = commit.CommitDialog(tree)
1042
976
        dlg._commit_selected_radio.set_active(True) # enable partial
1043
 
        dlg._treeview_files.set_cursor(
1044
 
            Gtk.TreePath(path=1), None, False)
 
977
        dlg._treeview_files.set_cursor((1,))
1045
978
        dlg._set_file_commit_message('Message for A\n')
1046
 
        dlg._treeview_files.set_cursor(
1047
 
            Gtk.TreePath(path=2), None, False)
 
979
        dlg._treeview_files.set_cursor((2,))
1048
980
        dlg._set_file_commit_message('Message for B\n')
1049
981
        dlg._toggle_commit(None, 2, dlg._files_store) # unset 'b'
1050
982
        dlg._set_global_commit_message('Commit just "a"')
1056
988
        rev = tree.branch.repository.get_revision(rev_id2)
1057
989
        self.assertEqual('Commit just "a"', rev.message)
1058
990
        file_info = rev.properties['file-info']
1059
 
        self.assertEqual(u'ld7:file_id4:a-id'
1060
 
                         '7:message14:Message for A\n'
1061
 
                         '4:path1:a'
1062
 
                         'ee',
1063
 
                         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)
1064
995
        self.assertEqual([{'path':'a', 'file_id':'a-id',
1065
 
                           'message':'Message for A\n'},],
1066
 
                         bencode.bdecode(file_info.encode('UTF-8')))
 
996
                           'message':'Message for A\n'},
 
997
                         ], bencode.bdecode(file_info))
1067
998
 
1068
999
    def test_commit_messages_after_merge(self):
1069
1000
        tree = self.make_branch_and_tree('tree')
1077
1008
        tree.merge_from_branch(tree2.branch)
1078
1009
 
1079
1010
        dlg = commit.CommitDialog(tree)
1080
 
        dlg._treeview_files.set_cursor(
1081
 
            Gtk.TreePath(path=1), None, False) # 'a'
 
1011
        dlg._treeview_files.set_cursor((1,)) # 'a'
1082
1012
        dlg._set_file_commit_message('Message for A\n')
1083
1013
        # No message for 'B'
1084
1014
        dlg._set_global_commit_message('Merging from "tree2"\n')
1091
1021
        self.assertEqual('Merging from "tree2"\n', rev.message)
1092
1022
        self.assertEqual([rev_id1, rev_id2], rev.parent_ids)
1093
1023
        file_info = rev.properties['file-info']
1094
 
        self.assertEqual(u'ld7:file_id4:a-id'
1095
 
                         '7:message14:Message for A\n'
1096
 
                         '4:path1:a'
1097
 
                         'ee',
1098
 
                         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)
1099
1028
        self.assertEqual([{'path':'a', 'file_id':'a-id',
1100
 
                           'message':'Message for A\n'},],
1101
 
                         bencode.bdecode(file_info.encode('UTF-8')))
 
1029
                           'message':'Message for A\n'},
 
1030
                         ], bencode.bdecode(file_info))
1102
1031
 
1103
1032
    def test_commit_unicode_messages(self):
1104
 
        self.requireFeature(UnicodeFilenameFeature)
 
1033
        self.requireFeature(tests.UnicodeFilenameFeature)
1105
1034
 
1106
1035
        tree = self.make_branch_and_tree('tree')
1107
1036
        tree.branch.get_config().set_user_option('per_file_commits', 'true')
1109
1038
        tree.add(['a', u'\u03a9'], ['a-id', 'omega-id'])
1110
1039
 
1111
1040
        dlg = commit.CommitDialog(tree)
1112
 
        dlg._treeview_files.set_cursor(
1113
 
            Gtk.TreePath(path=1), None, False) # 'a'
 
1041
        dlg._treeview_files.set_cursor((1,)) # 'a'
1114
1042
        dlg._set_file_commit_message(u'Test \xfan\xecc\xf6de\n')
1115
 
        dlg._treeview_files.set_cursor(
1116
 
            Gtk.TreePath(path=2), None, False) # omega
 
1043
        dlg._treeview_files.set_cursor((2,)) # omega
1117
1044
        dlg._set_file_commit_message(u'\u03a9 is the end of all things.\n')
1118
1045
        dlg._set_global_commit_message(u'\u03a9 and \xfan\xecc\xf6de\n')
1119
1046
 
1175
1102
        super(TestSavedCommitMessages, self).setUp()
1176
1103
        # Install our hook
1177
1104
        branch.Branch.hooks.install_named_hook(
1178
 
            'post_uncommit', commitmsgs.save_commit_messages, None)
 
1105
            'post_uncommit', commit.save_commit_messages, None)
1179
1106
 
1180
1107
    def _get_file_info_dict(self, rank):
1181
1108
        file_info = [dict(path='a', file_id='a-id', message='a msg %d' % rank),
1298
1225
        self.assertEquals(u'', self._get_commit_message())
1299
1226
        self.assertEquals(u'de',
1300
1227
                          self._get_file_commit_messages())
1301
 
 
1302
 
 
1303
 
class BzrHandlePatchTestCase(tests.TestCase):
1304
 
 
1305
 
    def setUp(self):
1306
 
        top = os.path.abspath(os.path.join(
1307
 
            os.path.dirname(__file__), os.pardir))
1308
 
        self.script = os.path.join(top, 'bzr-handle-patch')
1309
 
        self.env = dict(os.environ)
1310
 
        self.env['BZR_PLUGINS_AT'] = 'gtk@%s' % top
1311
 
        self.patch = NamedTemporaryFile()
1312
 
        self.patch.write('\n'.join([
1313
 
            "=== added file '_test.txt'",
1314
 
            "--- _test.txt      1970-01-01 00:00:00 +0000",
1315
 
            "+++ _test.txt      2012-02-03 20:00:34 +0000",
1316
 
            "@@ -0,0 +1,1 @@",
1317
 
            "+hello",
1318
 
            ]))
1319
 
        self.patch.flush()
1320
 
        super(BzrHandlePatchTestCase, self).setUp()
1321
 
 
1322
 
    def test_smoketest(self):
1323
 
        # This is a smoke test to verify the process starts.
1324
 
        bzr_notify = subprocess.Popen(
1325
 
            [self.script, self.patch.name, 'test'],
1326
 
            stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=self.env)
1327
 
        stdout, stderr = bzr_notify.communicate()
1328
 
        self.assertEqual('', stdout)
1329
 
        self.assertEqual('', stderr)