/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_diff.py

  • Committer: Jelmer Vernooij
  • Date: 2012-07-09 15:23:26 UTC
  • mto: This revision was merged to the branch mainline in revision 794.
  • Revision ID: jelmer@samba.org-20120709152326-dzxb8zoz0btull7n
Remove bzr-notify.

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
# along with this program; if not, write to the Free Software
16
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
17
 
18
 
from cStringIO import StringIO
19
18
import os
20
19
 
21
 
from bzrlib import errors, tests
 
20
from gi.repository import Gtk
 
21
 
 
22
from bzrlib import (
 
23
    conflicts,
 
24
    errors,
 
25
    tests,
 
26
    )
 
27
try:
 
28
    from bzrlib.tests.features import UnicodeFilenameFeature
 
29
except ImportError: # bzr < 2.5
 
30
    from bzrlib.tests import UnicodeFilenameFeature
22
31
from bzrlib.merge_directive import MergeDirective2
23
32
 
24
33
from bzrlib.plugins.gtk.diff import (
25
34
    DiffController,
 
35
    DiffFileView,
26
36
    DiffView,
 
37
    DiffWidget,
 
38
    DiffWindow,
 
39
    have_gtksourceview,
27
40
    iter_changes_to_status,
28
41
    MergeDirectiveController,
29
42
    )
 
43
from bzrlib.plugins.gtk.tests import MockMethod
 
44
 
 
45
 
30
46
eg_diff = """\
31
47
=== modified file 'tests/test_diff.py'
32
48
--- tests/test_diff.py  2008-03-11 13:18:28 +0000
46
62
 class TestDiffViewSimple(tests.TestCase):
47
63
"""
48
64
 
49
 
class TestDiffViewSimple(tests.TestCase):
50
 
 
51
 
    def test_parse_colordiffrc(self):
52
 
        colordiffrc = '''\
53
 
newtext=blue
54
 
oldtext = Red
55
 
# now a comment and a blank line
56
 
 
57
 
diffstuff = #ffff00  
58
 
  # another comment preceded by whitespace
59
 
'''
60
 
        colors = {
61
 
                'newtext': 'blue',
62
 
                'oldtext': 'Red',
63
 
                'diffstuff': '#ffff00',
64
 
        }
65
 
        parsed_colors = DiffView.parse_colordiffrc(StringIO(colordiffrc))
66
 
        self.assertEqual(colors, parsed_colors)
 
65
 
 
66
class FakeDiffFileView(DiffFileView):
 
67
 
 
68
    SHOW_WIDGETS = False
 
69
 
 
70
 
 
71
class DiffFileViewTestCase(tests.TestCase):
 
72
 
 
73
    def test_init_construct(self):
 
74
        view = FakeDiffFileView()
 
75
        self.assertIsNot(None, view.buffer)
 
76
        self.assertIsNot(None, view.sourceview)
 
77
        self.assertIs(False, view.sourceview.props.editable)
 
78
        font_desc = view.sourceview.get_style_context().get_font(
 
79
            Gtk.StateFlags.NORMAL)
 
80
        self.assertIn('Monospace', font_desc.get_family())
 
81
 
 
82
    def test_init_construct_have_gtksourceview(self):
 
83
        if not have_gtksourceview:
 
84
            return
 
85
        view = FakeDiffFileView()
 
86
        self.assertEqual('Diff', view.buffer.get_language().get_name())
 
87
        self.assertIs(True, view.buffer.get_highlight_syntax())
67
88
 
68
89
 
69
90
class TestDiffView(tests.TestCaseWithTransport):
70
91
 
71
92
    def test_unicode(self):
72
 
        self.requireFeature(tests.UnicodeFilenameFeature)
 
93
        self.requireFeature(UnicodeFilenameFeature)
73
94
 
74
95
        tree = self.make_branch_and_tree('tree')
75
96
        self.build_tree([u'tree/\u03a9'])
80
101
        view.show_diff(None)
81
102
        buf = view.buffer
82
103
        start, end = buf.get_bounds()
83
 
        text = buf.get_text(start, end)
 
104
        text = buf.get_text(start, end, True)
84
105
        self.assertContainsRe(text,
85
106
            "=== added file '\xce\xa9'\n"
86
107
            '--- .*\t1970-01-01 00:00:00 \\+0000\n'
91
112
            )
92
113
 
93
114
 
 
115
 
 
116
class FakeDiffWidget(DiffWidget):
 
117
 
 
118
    SHOW_WIDGETS = False
 
119
 
 
120
 
 
121
class TestDiffWidget(tests.TestCaseWithTransport):
 
122
 
 
123
    def test_treeview_cursor_cb(self):
 
124
        widget = FakeDiffWidget()
 
125
        widget.set_diff_text_sections(
 
126
            [('', None, 'patch1'), ('a', 'a', 'patch2')])
 
127
        widget.treeview.set_cursor(Gtk.TreePath(path=1), None, False)
 
128
        widget._treeview_cursor_cb(None)
 
129
        self.assertTrue('patch2', widget.diff_view.buffer.props.text)
 
130
 
 
131
    def test_treeview_cursor_cb_with_destroyed_treeview(self):
 
132
        widget = FakeDiffWidget()
 
133
        widget.set_diff_text_sections(
 
134
            [('', None, 'patch1'), ('a', 'a', 'patch2')])
 
135
        MockMethod.bind(self, widget.diff_view, 'show_diff')
 
136
        widget.treeview.destroy()
 
137
        widget._treeview_cursor_cb(None)
 
138
        self.assertFalse(widget.diff_view.show_diff.called)
 
139
 
 
140
 
 
141
class FakeDiffWindow(DiffWindow):
 
142
 
 
143
    SHOW_WIDGETS = False
 
144
 
 
145
 
 
146
class DiffWindowTestCase(tests.TestCaseWithTransport):
 
147
 
 
148
    def test_init(self):
 
149
        window = DiffWindow()
 
150
        self.assertEqual('bzr diff', window.props.title)
 
151
        self.assertEqual(0, window.props.border_width)
 
152
 
 
153
    def test_init_construct_without_operations(self):
 
154
        window = DiffWindow()
 
155
        widgets = window.vbox.get_children()
 
156
        self.assertEqual(2, len(widgets))
 
157
        self.assertIsInstance(widgets[0], Gtk.MenuBar)
 
158
        self.assertIsInstance(widgets[1], DiffWidget)
 
159
 
 
160
    def test_init_construct_with_operations(self):
 
161
        method = MockMethod()
 
162
        window = DiffWindow(operations=[('title', method)])
 
163
        widgets = window.vbox.get_children()
 
164
        self.assertEqual(3, len(widgets))
 
165
        self.assertIsInstance(widgets[0], Gtk.MenuBar)
 
166
        self.assertIsInstance(widgets[1], Gtk.HButtonBox)
 
167
        self.assertIsInstance(widgets[2], DiffWidget)
 
168
 
 
169
    def test_get_menu_bar(self):
 
170
        window = DiffWindow()
 
171
        menu_bar = window._get_menu_bar()
 
172
        self.assertIsNot(None, menu_bar)
 
173
        menus = menu_bar.get_children()
 
174
        self.assertEqual(1, len(menus))
 
175
        self.assertEqual('_View', menus[0].props.label)
 
176
        sub_menu = menus[0].get_submenu()
 
177
        self.assertIsNot(None, sub_menu)
 
178
        items = sub_menu.get_children()
 
179
        self.assertEqual(1, len(items))
 
180
        menus[0].get_submenu().get_children()[0].props.label
 
181
        self.assertEqual('Wrap _Long Lines', items[0].props.label)
 
182
 
 
183
    def test_get_button_bar_with_none(self):
 
184
        window = DiffWindow()
 
185
        self.assertIs(None, window._get_button_bar(None))
 
186
 
 
187
    def test_get_button_bar_with_operations(self):
 
188
        window = DiffWindow()
 
189
        method = MockMethod()
 
190
        button_bar = window._get_button_bar([('title', method)])
 
191
        self.assertIsNot(None, button_bar)
 
192
        buttons = button_bar.get_children()
 
193
        self.assertEqual(1, len(buttons))
 
194
        self.assertEqual('title', buttons[0].props.label)
 
195
        buttons[0].emit('clicked')
 
196
        self.assertIs(True, method.called)
 
197
 
 
198
 
 
199
 
94
200
class MockDiffWidget(object):
95
201
 
96
202
    def set_diff_text_sections(self, sections):
98
204
 
99
205
 
100
206
class MockWindow(object):
 
207
 
101
208
    def __init__(self):
102
209
        self.diff = MockDiffWidget()
103
210
        self.merge_successful = False
303
410
            [('a-id', 'a', 'removed', 'a'),
304
411
             ('b-id', 'b', 'removed', 'b/'),
305
412
            ], tree)
 
413
 
 
414
    def test_status_missing_file(self):
 
415
        this = self.make_branch_and_tree('this')
 
416
        self.build_tree(['this/foo'])
 
417
        this.add(['foo'], ['foo-id'])
 
418
        this.commit('add')
 
419
 
 
420
        other = this.bzrdir.sprout('other').open_workingtree()
 
421
 
 
422
        os.remove('this/foo')
 
423
        this.remove('foo', force=True)
 
424
        this.commit('remove')
 
425
 
 
426
        f = open('other/foo', 'wt')
 
427
        try:
 
428
            f.write('Modified\n')
 
429
        finally:
 
430
            f.close()
 
431
        other.commit('modified')
 
432
 
 
433
        this.merge_from_branch(other.branch)
 
434
        conflicts.resolve(this)
 
435
 
 
436
        self.assertStatusEqual(
 
437
            [('foo-id', 'foo.OTHER', 'missing', 'foo.OTHER'),],
 
438
            this)
 
439
 
 
440
    def test_status_missing_directory(self):
 
441
        this = self.make_branch_and_tree('this')
 
442
        self.build_tree(['this/foo/', 'this/foo/bar'])
 
443
        this.add(['foo', 'foo/bar'], ['foo-id', 'bar-id'])
 
444
        this.commit('add')
 
445
 
 
446
        other = this.bzrdir.sprout('other').open_workingtree()
 
447
 
 
448
        os.remove('this/foo/bar')
 
449
        os.rmdir('this/foo')
 
450
        this.remove('foo', force=True)
 
451
        this.commit('remove')
 
452
 
 
453
        f = open('other/foo/bar', 'wt')
 
454
        try:
 
455
            f.write('Modified\n')
 
456
        finally:
 
457
            f.close()
 
458
        other.commit('modified')
 
459
 
 
460
        this.merge_from_branch(other.branch)
 
461
        conflicts.resolve(this)
 
462
 
 
463
        self.assertStatusEqual(
 
464
            [('foo-id', u'foo', 'added', u'foo/'),
 
465
             ('bar-id', u'foo/bar.OTHER', 'missing', u'foo/bar.OTHER'),],
 
466
            this)