/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-03-05 14:02:16 UTC
  • Revision ID: jelmer@samba.org-20120305140216-kin6qx701t4205ej
Only show annotate option for files in nautilus-bzr.

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
23
from gi.repository import Gtk
22
24
 
26
28
    uncommit,
27
29
    )
28
30
try:
29
 
    from bzrlib import bencode
30
 
except ImportError:
31
 
    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
32
35
 
33
 
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
34
42
 
35
43
 
36
44
# TODO: All we need is basic ancestry code to test this, we shouldn't need a
42
50
        tree = self.make_branch_and_tree('.')
43
51
        tree.commit('one')
44
52
 
45
 
        self.assertIs(None, commit.pending_revisions(tree))
 
53
        self.addCleanup(tree.lock_read().unlock)
 
54
        self.assertEquals([], list(commit.pending_revisions(tree)))
46
55
 
47
56
    def test_pending_revisions_simple(self):
48
57
        tree = self.make_branch_and_tree('tree')
52
61
        tree.merge_from_branch(tree2.branch)
53
62
        self.assertEqual([rev_id1, rev_id2], tree.get_parent_ids())
54
63
 
55
 
        pending_revisions = commit.pending_revisions(tree)
 
64
        self.addCleanup(tree.lock_read().unlock)
 
65
        pending_revisions = list(commit.pending_revisions(tree))
56
66
        # One primary merge
57
67
        self.assertEqual(1, len(pending_revisions))
58
68
        # Revision == rev_id2
70
80
        tree.merge_from_branch(tree2.branch)
71
81
        self.assertEqual([rev_id1, rev_id4], tree.get_parent_ids())
72
82
 
73
 
        pending_revisions = commit.pending_revisions(tree)
 
83
        self.addCleanup(tree.lock_read().unlock)
 
84
        pending_revisions = list(commit.pending_revisions(tree))
74
85
        # One primary merge
75
86
        self.assertEqual(1, len(pending_revisions))
76
87
        # Revision == rev_id2
93
104
        tree.merge_from_branch(tree3.branch, force=True)
94
105
        self.assertEqual([rev_id1, rev_id3, rev_id5], tree.get_parent_ids())
95
106
 
96
 
        pending_revisions = commit.pending_revisions(tree)
 
107
        self.addCleanup(tree.lock_read().unlock)
 
108
        pending_revisions = list(commit.pending_revisions(tree))
97
109
        # Two primary merges
98
110
        self.assertEqual(2, len(pending_revisions))
99
111
        # Revision == rev_id2
136
148
 
137
149
class TestCommitDialogSimple(tests.TestCaseWithTransport):
138
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
 
139
171
    def test_setup_parameters_no_pending(self):
140
172
        tree = self.make_branch_and_tree('tree')
141
173
        rev_id = tree.commit('first')
142
174
 
143
175
        dlg = CommitDialogNoWidgets(tree)
144
176
        self.assertEqual(rev_id, dlg._basis_tree.get_revision_id())
145
 
        self.assertIs(None, dlg._pending)
 
177
        self.assertEquals([], dlg._pending)
146
178
        self.assertFalse(dlg._is_checkout)
147
179
 
148
180
    def test_setup_parameters_checkout(self):
153
185
 
154
186
        dlg = CommitDialogNoWidgets(tree2)
155
187
        self.assertEqual(rev_id, dlg._basis_tree.get_revision_id())
156
 
        self.assertIs(None, dlg._pending)
 
188
        self.assertEquals([], dlg._pending)
157
189
        self.assertTrue(dlg._is_checkout)
158
190
 
159
191
    def test_setup_parameters_pending(self):
184
216
        self.assertEqual([], delta.removed)
185
217
        self.assertEqual([(u'a', 'a-id', 'file')], delta.added)
186
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
 
187
238
 
188
239
class TestCommitDialog(tests.TestCaseWithTransport):
189
240
 
211
262
 
212
263
        commit_col = dlg._treeview_files.get_column(0)
213
264
        self.assertEqual('Commit', commit_col.get_title())
214
 
        renderer = commit_col.get_cell_renderers()[0]
 
265
        renderer = commit_col.get_cells()[0]
215
266
        self.assertTrue(renderer.get_property('activatable'))
216
267
 
217
268
        self.assertEqual('Commit all changes',
236
287
 
237
288
        commit_col = dlg._treeview_files.get_column(0)
238
289
        self.assertEqual('Commit*', commit_col.get_title())
239
 
        renderer = commit_col.get_cell_renderers()[0]
 
290
        renderer = commit_col.get_cells()[0]
240
291
        self.assertFalse(renderer.get_property('activatable'))
241
292
 
242
293
        values = [(r[0], r[1], r[2], r[3]) for r in dlg._pending_store]
288
339
 
289
340
        dlg = commit.CommitDialog(tree)
290
341
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
291
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
342
        self.assertEqual([("", "", True, 'All Files', ''),
292
343
                          ('a-id', 'a', True, 'a', 'added'),
293
344
                          ('b-id', 'b', True, 'b/', 'added'),
294
345
                          ('c-id', 'b/c', True, 'b/c', 'added'),
305
356
 
306
357
        dlg = commit.CommitDialog(tree)
307
358
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
308
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
359
        self.assertEqual([("", "", True, 'All Files', ''),
309
360
                          ('b-id', 'd', True, 'b/ => d/', 'renamed'),
310
361
                          ('a-id', 'd/a', True, 'a => d/a', 'renamed'),
311
362
                         ], values)
320
371
 
321
372
        dlg = commit.CommitDialog(tree)
322
373
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
323
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
374
        self.assertEqual([("", "", True, 'All Files', ''),
324
375
                          ('a-id', 'a', True, 'a', 'modified'),
325
376
                         ], values)
326
377
 
340
391
 
341
392
        dlg = commit.CommitDialog(tree)
342
393
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
343
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
394
        self.assertEqual([("", "", True, 'All Files', ''),
344
395
                          ('b-id', 'd', True, 'b/ => d/', 'renamed'),
345
396
                          ('a-id', 'd/a', True, 'a => d/a', 'renamed and modified'),
346
397
                          ('c-id', 'd/c', True, 'd/c', 'modified'),
363
414
 
364
415
        dlg = commit.CommitDialog(tree)
365
416
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
366
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
417
        self.assertEqual([("", "", True, 'All Files', ''),
367
418
                          ('a-id', 'a', True, 'a => a/', 'kind changed'),
368
419
                          # ('b-id', 'c', True, 'b => c/', 'renamed and modified'),
369
420
                         ], values)
379
430
 
380
431
        dlg = commit.CommitDialog(tree)
381
432
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
382
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
433
        self.assertEqual([("", "", True, 'All Files', ''),
383
434
                          ('a-id', 'a', True, 'a', 'removed'),
384
435
                          ('b-id', 'b', True, 'b/', 'removed'),
385
436
                         ], values)
386
437
        # All Files should be selected
387
 
        self.assertEqual(((0,), None), dlg._treeview_files.get_cursor())
 
438
        self.assertEqual(
 
439
            (Gtk.TreePath(path=0), None), dlg._treeview_files.get_cursor())
388
440
 
389
441
    def test_filelist_with_selected(self):
390
442
        tree = self.make_branch_and_tree('tree')
393
445
 
394
446
        dlg = commit.CommitDialog(tree, selected='a')
395
447
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
396
 
        self.assertEqual([(None, None, False, 'All Files', ''),
 
448
        self.assertEqual([("", "", False, 'All Files', ''),
397
449
                          ('a-id', 'a', True, 'a', 'added'),
398
450
                          ('b-id', 'b', False, 'b/', 'added'),
399
451
                         ], values)
400
452
        # This file should also be selected in the file list, rather than the
401
453
        # 'All Files' selection
402
 
        self.assertEqual(((1,), None), dlg._treeview_files.get_cursor())
 
454
        self.assertEqual(
 
455
            (Gtk.TreePath(path=1), None), dlg._treeview_files.get_cursor())
403
456
 
404
457
    def test_diff_view(self):
405
458
        tree = self.make_branch_and_tree('tree')
413
466
        dlg = commit.CommitDialog(tree)
414
467
        diff_buffer = dlg._diff_view.buffer
415
468
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
416
 
                                    diff_buffer.get_end_iter()).splitlines(True)
 
469
                                    diff_buffer.get_end_iter(),
 
470
                                    True).splitlines(True)
417
471
 
418
472
        self.assertEqual("=== modified file 'a'\n", text[0])
419
473
        self.assertContainsRe(text[1],
464
518
        self.assertFalse(dlg._file_message_expander.get_expanded())
465
519
        self.assertFalse(dlg._file_message_expander.get_property('sensitive'))
466
520
 
467
 
        dlg._treeview_files.set_cursor((1,))
 
521
        dlg._treeview_files.set_cursor(
 
522
            Gtk.TreePath(path=1), None, False)
468
523
        self.assertEqual('Diff for a', dlg._diff_label.get_text())
469
524
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
470
 
                                    diff_buffer.get_end_iter()).splitlines(True)
 
525
                                    diff_buffer.get_end_iter(),
 
526
                                    True).splitlines(True)
471
527
        self.assertEqual("=== added file 'a'\n", text[0])
472
528
        self.assertContainsRe(text[1],
473
529
            r"--- a\t\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d [+-]\d\d\d\d")
481
537
        self.assertTrue(dlg._file_message_expander.get_expanded())
482
538
        self.assertTrue(dlg._file_message_expander.get_property('sensitive'))
483
539
 
484
 
        dlg._treeview_files.set_cursor((2,))
 
540
        dlg._treeview_files.set_cursor(
 
541
            Gtk.TreePath(path=2), None, False)
485
542
        self.assertEqual('Diff for b', dlg._diff_label.get_text())
486
543
        text = diff_buffer.get_text(diff_buffer.get_start_iter(),
487
 
                                    diff_buffer.get_end_iter()).splitlines(True)
 
544
                                    diff_buffer.get_end_iter(),
 
545
                                    True).splitlines(True)
488
546
        self.assertEqual("=== added file 'b'\n", text[0])
489
547
        self.assertContainsRe(text[1],
490
548
            r"--- b\t\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d [+-]\d\d\d\d")
498
556
        self.assertTrue(dlg._file_message_expander.get_expanded())
499
557
        self.assertTrue(dlg._file_message_expander.get_property('sensitive'))
500
558
 
501
 
        dlg._treeview_files.set_cursor((0,))
 
559
        dlg._treeview_files.set_cursor(
 
560
            Gtk.TreePath(path=0), None, False)
502
561
        self.assertEqual('Diff for All Files', dlg._diff_label.get_text())
503
562
        self.assertEqual('File commit message',
504
563
                         dlg._file_message_expander.get_label())
514
573
 
515
574
        def get_file_text():
516
575
            buf = dlg._file_message_text_view.get_buffer()
517
 
            return buf.get_text(buf.get_start_iter(), buf.get_end_iter())
 
576
            return buf.get_text(
 
577
                buf.get_start_iter(), buf.get_end_iter(), True)
518
578
 
519
579
        def get_saved_text(path):
520
580
            """Get the saved text for a given record."""
527
587
        self.assertFalse(dlg._file_message_expander.get_property('sensitive'))
528
588
        self.assertEqual('', get_file_text())
529
589
 
530
 
        dlg._treeview_files.set_cursor((1,))
 
590
        dlg._treeview_files.set_cursor(
 
591
            Gtk.TreePath(path=1), None, False)
531
592
        self.assertEqual('Commit message for a',
532
593
                         dlg._file_message_expander.get_label())
533
594
        self.assertTrue(dlg._file_message_expander.get_expanded())
540
601
        # We should have updated the ListStore with the new file commit info
541
602
        self.assertEqual('Some text\nfor a\n', get_saved_text(1))
542
603
 
543
 
        dlg._treeview_files.set_cursor((2,))
 
604
        dlg._treeview_files.set_cursor(
 
605
            Gtk.TreePath(path=2), None, False)
544
606
        self.assertEqual('Commit message for b/',
545
607
                         dlg._file_message_expander.get_label())
546
608
        self.assertTrue(dlg._file_message_expander.get_expanded())
551
613
        dlg._set_file_commit_message('More text\nfor b\n')
552
614
        # Now switch back to 'a'. The message should be saved, and the buffer
553
615
        # should be updated with the other text
554
 
        dlg._treeview_files.set_cursor((1,))
 
616
        dlg._treeview_files.set_cursor(
 
617
            Gtk.TreePath(path=1), None, False)
555
618
        self.assertEqual('More text\nfor b\n', get_saved_text(2))
556
619
        self.assertEqual('Commit message for a',
557
620
                         dlg._file_message_expander.get_label())
566
629
        tree.add(['a', 'b'], ['a-id', 'b-id'])
567
630
 
568
631
        dlg = commit.CommitDialog(tree)
569
 
        self.assertEqual([(None, None, True),
 
632
        self.assertEqual([("", "", True),
570
633
                          ('a-id', 'a', True),
571
634
                          ('b-id', 'b', True),
572
635
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
577
640
        #       do with. So instead, we just call toggle directly, and assume
578
641
        #       that toggle is hooked in correctly
579
642
        # column = dlg._treeview_files.get_column(0)
580
 
        # renderer = column.get_cell_renderers()[0]
 
643
        # renderer = column.get_cells()[0]
581
644
 
582
645
        # Toggle a single entry should set just that entry to False
583
646
        dlg._toggle_commit(None, 1, dlg._files_store)
584
 
        self.assertEqual([(None, None, True),
 
647
        self.assertEqual([("", "", True),
585
648
                          ('a-id', 'a', False),
586
649
                          ('b-id', 'b', True),
587
650
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
588
651
 
589
652
        # Toggling the main entry should set all entries
590
653
        dlg._toggle_commit(None, 0, dlg._files_store)
591
 
        self.assertEqual([(None, None, False),
 
654
        self.assertEqual([("", "", False),
592
655
                          ('a-id', 'a', False),
593
656
                          ('b-id', 'b', False),
594
657
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
595
658
 
596
659
        dlg._toggle_commit(None, 2, dlg._files_store)
597
 
        self.assertEqual([(None, None, False),
 
660
        self.assertEqual([("", "", False),
598
661
                          ('a-id', 'a', False),
599
662
                          ('b-id', 'b', True),
600
663
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
601
664
 
602
665
        dlg._toggle_commit(None, 0, dlg._files_store)
603
 
        self.assertEqual([(None, None, True),
 
666
        self.assertEqual([("", "", True),
604
667
                          ('a-id', 'a', True),
605
668
                          ('b-id', 'b', True),
606
669
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
630
693
        dlg._commit_selected_radio.set_active(True)
631
694
        self.assertEqual((['a_file', 'b_dir'], []), dlg._get_specific_files())
632
695
 
633
 
        dlg._treeview_files.set_cursor((1,))
 
696
        dlg._treeview_files.set_cursor(
 
697
            Gtk.TreePath(path=1), None, False)
634
698
        dlg._set_file_commit_message('Test\nmessage\nfor a_file\n')
635
 
        dlg._treeview_files.set_cursor((2,))
 
699
        dlg._treeview_files.set_cursor(
 
700
            Gtk.TreePath(path=2), None, False)
636
701
        dlg._set_file_commit_message('message\nfor b_dir\n')
637
702
 
638
703
        self.assertEqual((['a_file', 'b_dir'],
658
723
        dlg._commit_selected_radio.set_active(True)
659
724
        self.assertEqual((['a_file', 'b_dir'], []), dlg._get_specific_files())
660
725
 
661
 
        dlg._treeview_files.set_cursor((1,))
 
726
        dlg._treeview_files.set_cursor(
 
727
            Gtk.TreePath(path=1), None, False)
662
728
        dlg._set_file_commit_message('Test\r\nmessage\rfor a_file\n')
663
 
        dlg._treeview_files.set_cursor((2,))
 
729
        dlg._treeview_files.set_cursor(
 
730
            Gtk.TreePath(path=2), None, False)
664
731
        dlg._set_file_commit_message('message\r\nfor\nb_dir\r')
665
732
 
666
733
        self.assertEqual((['a_file', 'b_dir'],
973
1040
 
974
1041
        dlg = commit.CommitDialog(tree)
975
1042
        dlg._commit_selected_radio.set_active(True) # enable partial
976
 
        dlg._treeview_files.set_cursor((1,))
 
1043
        dlg._treeview_files.set_cursor(
 
1044
            Gtk.TreePath(path=1), None, False)
977
1045
        dlg._set_file_commit_message('Message for A\n')
978
 
        dlg._treeview_files.set_cursor((2,))
 
1046
        dlg._treeview_files.set_cursor(
 
1047
            Gtk.TreePath(path=2), None, False)
979
1048
        dlg._set_file_commit_message('Message for B\n')
980
1049
        dlg._toggle_commit(None, 2, dlg._files_store) # unset 'b'
981
1050
        dlg._set_global_commit_message('Commit just "a"')
1008
1077
        tree.merge_from_branch(tree2.branch)
1009
1078
 
1010
1079
        dlg = commit.CommitDialog(tree)
1011
 
        dlg._treeview_files.set_cursor((1,)) # 'a'
 
1080
        dlg._treeview_files.set_cursor(
 
1081
            Gtk.TreePath(path=1), None, False) # 'a'
1012
1082
        dlg._set_file_commit_message('Message for A\n')
1013
1083
        # No message for 'B'
1014
1084
        dlg._set_global_commit_message('Merging from "tree2"\n')
1031
1101
                         bencode.bdecode(file_info.encode('UTF-8')))
1032
1102
 
1033
1103
    def test_commit_unicode_messages(self):
1034
 
        self.requireFeature(tests.UnicodeFilenameFeature)
 
1104
        self.requireFeature(UnicodeFilenameFeature)
1035
1105
 
1036
1106
        tree = self.make_branch_and_tree('tree')
1037
1107
        tree.branch.get_config().set_user_option('per_file_commits', 'true')
1039
1109
        tree.add(['a', u'\u03a9'], ['a-id', 'omega-id'])
1040
1110
 
1041
1111
        dlg = commit.CommitDialog(tree)
1042
 
        dlg._treeview_files.set_cursor((1,)) # 'a'
 
1112
        dlg._treeview_files.set_cursor(
 
1113
            Gtk.TreePath(path=1), None, False) # 'a'
1043
1114
        dlg._set_file_commit_message(u'Test \xfan\xecc\xf6de\n')
1044
 
        dlg._treeview_files.set_cursor((2,)) # omega
 
1115
        dlg._treeview_files.set_cursor(
 
1116
            Gtk.TreePath(path=2), None, False) # omega
1045
1117
        dlg._set_file_commit_message(u'\u03a9 is the end of all things.\n')
1046
1118
        dlg._set_global_commit_message(u'\u03a9 and \xfan\xecc\xf6de\n')
1047
1119
 
1103
1175
        super(TestSavedCommitMessages, self).setUp()
1104
1176
        # Install our hook
1105
1177
        branch.Branch.hooks.install_named_hook(
1106
 
            'post_uncommit', commit.save_commit_messages, None)
 
1178
            'post_uncommit', commitmsgs.save_commit_messages, None)
1107
1179
 
1108
1180
    def _get_file_info_dict(self, rank):
1109
1181
        file_info = [dict(path='a', file_id='a-id', message='a msg %d' % rank),
1226
1298
        self.assertEquals(u'', self._get_commit_message())
1227
1299
        self.assertEquals(u'de',
1228
1300
                          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)