/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to tests/test_commit.py

  • Committer: Curtis Hovey
  • Date: 2012-03-20 12:39:08 UTC
  • mfrom: (776.3.23 gpush-do-push)
  • Revision ID: sinzui.is@verizon.net-20120320123908-lclvaiasu0e50odg
Merged faster push.

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
 
29
31
    from bzrlib.tests.features import UnicodeFilenameFeature
30
32
except ImportError: # bzr < 2.5
31
33
    from bzrlib.tests import UnicodeFilenameFeature
32
 
try:
33
 
    from bzrlib import bencode
34
 
except ImportError:
35
 
    from bzrlib.util import bencode
 
34
from bzrlib import bencode
36
35
 
37
 
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
38
42
 
39
43
 
40
44
# TODO: All we need is basic ancestry code to test this, we shouldn't need a
46
50
        tree = self.make_branch_and_tree('.')
47
51
        tree.commit('one')
48
52
 
49
 
        self.assertIs(None, commit.pending_revisions(tree))
 
53
        self.addCleanup(tree.lock_read().unlock)
 
54
        self.assertEquals([], list(commit.pending_revisions(tree)))
50
55
 
51
56
    def test_pending_revisions_simple(self):
52
57
        tree = self.make_branch_and_tree('tree')
56
61
        tree.merge_from_branch(tree2.branch)
57
62
        self.assertEqual([rev_id1, rev_id2], tree.get_parent_ids())
58
63
 
59
 
        pending_revisions = commit.pending_revisions(tree)
 
64
        self.addCleanup(tree.lock_read().unlock)
 
65
        pending_revisions = list(commit.pending_revisions(tree))
60
66
        # One primary merge
61
67
        self.assertEqual(1, len(pending_revisions))
62
68
        # Revision == rev_id2
74
80
        tree.merge_from_branch(tree2.branch)
75
81
        self.assertEqual([rev_id1, rev_id4], tree.get_parent_ids())
76
82
 
77
 
        pending_revisions = commit.pending_revisions(tree)
 
83
        self.addCleanup(tree.lock_read().unlock)
 
84
        pending_revisions = list(commit.pending_revisions(tree))
78
85
        # One primary merge
79
86
        self.assertEqual(1, len(pending_revisions))
80
87
        # Revision == rev_id2
97
104
        tree.merge_from_branch(tree3.branch, force=True)
98
105
        self.assertEqual([rev_id1, rev_id3, rev_id5], tree.get_parent_ids())
99
106
 
100
 
        pending_revisions = commit.pending_revisions(tree)
 
107
        self.addCleanup(tree.lock_read().unlock)
 
108
        pending_revisions = list(commit.pending_revisions(tree))
101
109
        # Two primary merges
102
110
        self.assertEqual(2, len(pending_revisions))
103
111
        # Revision == rev_id2
140
148
 
141
149
class TestCommitDialogSimple(tests.TestCaseWithTransport):
142
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
 
143
171
    def test_setup_parameters_no_pending(self):
144
172
        tree = self.make_branch_and_tree('tree')
145
173
        rev_id = tree.commit('first')
146
174
 
147
175
        dlg = CommitDialogNoWidgets(tree)
148
176
        self.assertEqual(rev_id, dlg._basis_tree.get_revision_id())
149
 
        self.assertIs(None, dlg._pending)
 
177
        self.assertEquals([], dlg._pending)
150
178
        self.assertFalse(dlg._is_checkout)
151
179
 
152
180
    def test_setup_parameters_checkout(self):
157
185
 
158
186
        dlg = CommitDialogNoWidgets(tree2)
159
187
        self.assertEqual(rev_id, dlg._basis_tree.get_revision_id())
160
 
        self.assertIs(None, dlg._pending)
 
188
        self.assertEquals([], dlg._pending)
161
189
        self.assertTrue(dlg._is_checkout)
162
190
 
163
191
    def test_setup_parameters_pending(self):
188
216
        self.assertEqual([], delta.removed)
189
217
        self.assertEqual([(u'a', 'a-id', 'file')], delta.added)
190
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
 
191
238
 
192
239
class TestCommitDialog(tests.TestCaseWithTransport):
193
240
 
292
339
 
293
340
        dlg = commit.CommitDialog(tree)
294
341
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
295
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
342
        self.assertEqual([("", "", True, 'All Files', ''),
296
343
                          ('a-id', 'a', True, 'a', 'added'),
297
344
                          ('b-id', 'b', True, 'b/', 'added'),
298
345
                          ('c-id', 'b/c', True, 'b/c', 'added'),
309
356
 
310
357
        dlg = commit.CommitDialog(tree)
311
358
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
312
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
359
        self.assertEqual([("", "", True, 'All Files', ''),
313
360
                          ('b-id', 'd', True, 'b/ => d/', 'renamed'),
314
361
                          ('a-id', 'd/a', True, 'a => d/a', 'renamed'),
315
362
                         ], values)
324
371
 
325
372
        dlg = commit.CommitDialog(tree)
326
373
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
327
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
374
        self.assertEqual([("", "", True, 'All Files', ''),
328
375
                          ('a-id', 'a', True, 'a', 'modified'),
329
376
                         ], values)
330
377
 
344
391
 
345
392
        dlg = commit.CommitDialog(tree)
346
393
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
347
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
394
        self.assertEqual([("", "", True, 'All Files', ''),
348
395
                          ('b-id', 'd', True, 'b/ => d/', 'renamed'),
349
396
                          ('a-id', 'd/a', True, 'a => d/a', 'renamed and modified'),
350
397
                          ('c-id', 'd/c', True, 'd/c', 'modified'),
367
414
 
368
415
        dlg = commit.CommitDialog(tree)
369
416
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
370
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
417
        self.assertEqual([("", "", True, 'All Files', ''),
371
418
                          ('a-id', 'a', True, 'a => a/', 'kind changed'),
372
419
                          # ('b-id', 'c', True, 'b => c/', 'renamed and modified'),
373
420
                         ], values)
383
430
 
384
431
        dlg = commit.CommitDialog(tree)
385
432
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
386
 
        self.assertEqual([(None, None, True, 'All Files', ''),
 
433
        self.assertEqual([("", "", True, 'All Files', ''),
387
434
                          ('a-id', 'a', True, 'a', 'removed'),
388
435
                          ('b-id', 'b', True, 'b/', 'removed'),
389
436
                         ], values)
398
445
 
399
446
        dlg = commit.CommitDialog(tree, selected='a')
400
447
        values = [(r[0], r[1], r[2], r[3], r[4]) for r in dlg._files_store]
401
 
        self.assertEqual([(None, None, False, 'All Files', ''),
 
448
        self.assertEqual([("", "", False, 'All Files', ''),
402
449
                          ('a-id', 'a', True, 'a', 'added'),
403
450
                          ('b-id', 'b', False, 'b/', 'added'),
404
451
                         ], values)
582
629
        tree.add(['a', 'b'], ['a-id', 'b-id'])
583
630
 
584
631
        dlg = commit.CommitDialog(tree)
585
 
        self.assertEqual([(None, None, True),
 
632
        self.assertEqual([("", "", True),
586
633
                          ('a-id', 'a', True),
587
634
                          ('b-id', 'b', True),
588
635
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
597
644
 
598
645
        # Toggle a single entry should set just that entry to False
599
646
        dlg._toggle_commit(None, 1, dlg._files_store)
600
 
        self.assertEqual([(None, None, True),
 
647
        self.assertEqual([("", "", True),
601
648
                          ('a-id', 'a', False),
602
649
                          ('b-id', 'b', True),
603
650
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
604
651
 
605
652
        # Toggling the main entry should set all entries
606
653
        dlg._toggle_commit(None, 0, dlg._files_store)
607
 
        self.assertEqual([(None, None, False),
 
654
        self.assertEqual([("", "", False),
608
655
                          ('a-id', 'a', False),
609
656
                          ('b-id', 'b', False),
610
657
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
611
658
 
612
659
        dlg._toggle_commit(None, 2, dlg._files_store)
613
 
        self.assertEqual([(None, None, False),
 
660
        self.assertEqual([("", "", False),
614
661
                          ('a-id', 'a', False),
615
662
                          ('b-id', 'b', True),
616
663
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
617
664
 
618
665
        dlg._toggle_commit(None, 0, dlg._files_store)
619
 
        self.assertEqual([(None, None, True),
 
666
        self.assertEqual([("", "", True),
620
667
                          ('a-id', 'a', True),
621
668
                          ('b-id', 'b', True),
622
669
                         ], [(r[0], r[1], r[2]) for r in dlg._files_store])
1128
1175
        super(TestSavedCommitMessages, self).setUp()
1129
1176
        # Install our hook
1130
1177
        branch.Branch.hooks.install_named_hook(
1131
 
            'post_uncommit', commit.save_commit_messages, None)
 
1178
            'post_uncommit', commitmsgs.save_commit_messages, None)
1132
1179
 
1133
1180
    def _get_file_info_dict(self, rank):
1134
1181
        file_info = [dict(path='a', file_id='a-id', message='a msg %d' % rank),
1251
1298
        self.assertEquals(u'', self._get_commit_message())
1252
1299
        self.assertEquals(u'de',
1253
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)