/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: rodney.dawes at canonical
  • Date: 2008-10-25 06:02:09 UTC
  • Revision ID: rodney.dawes@canonical.com-20081025060209-irlizouino63cs1m
        * preferences/__init__.py:
        Remove the dialog separator
        Remove useless extra call to self._create_pages()
        Make the default window size smaller
        Set the default border width on various widgets
        Set the current notebook page to the first one

        * preferences/identity.py:
        Set various border widths appropriately
        Align the labels to the left
        Remove the unneeded bold markup from the labels
        Change the "User Id" label to "E-Mail"
        Align the radio group labels to the top of the groups

        * preferences/plugins.py:
        Set various border widths appropriately
        Set the default paned position to something more sensible
        Set the shadow type on the treeview's scrolled window to in
        Align the Author and Version labels to the left

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
18
19
import os
19
20
 
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
 
21
from bzrlib import errors, tests
31
22
from bzrlib.merge_directive import MergeDirective2
32
23
 
33
24
from bzrlib.plugins.gtk.diff import (
34
25
    DiffController,
35
 
    DiffFileView,
36
26
    DiffView,
37
 
    DiffWidget,
38
 
    DiffWindow,
39
 
    have_gtksourceview,
40
27
    iter_changes_to_status,
41
28
    MergeDirectiveController,
42
29
    )
43
 
from bzrlib.plugins.gtk.tests import MockMethod
44
 
 
45
 
 
46
30
eg_diff = """\
47
31
=== modified file 'tests/test_diff.py'
48
32
--- tests/test_diff.py  2008-03-11 13:18:28 +0000
62
46
 class TestDiffViewSimple(tests.TestCase):
63
47
"""
64
48
 
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())
 
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)
88
67
 
89
68
 
90
69
class TestDiffView(tests.TestCaseWithTransport):
91
70
 
92
71
    def test_unicode(self):
93
 
        self.requireFeature(UnicodeFilenameFeature)
 
72
        self.requireFeature(tests.UnicodeFilenameFeature)
94
73
 
95
74
        tree = self.make_branch_and_tree('tree')
96
75
        self.build_tree([u'tree/\u03a9'])
101
80
        view.show_diff(None)
102
81
        buf = view.buffer
103
82
        start, end = buf.get_bounds()
104
 
        text = buf.get_text(start, end, True)
 
83
        text = buf.get_text(start, end)
105
84
        self.assertContainsRe(text,
106
85
            "=== added file '\xce\xa9'\n"
107
86
            '--- .*\t1970-01-01 00:00:00 \\+0000\n'
112
91
            )
113
92
 
114
93
 
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
 
 
200
94
class MockDiffWidget(object):
201
95
 
202
96
    def set_diff_text_sections(self, sections):
204
98
 
205
99
 
206
100
class MockWindow(object):
207
 
 
208
101
    def __init__(self):
209
102
        self.diff = MockDiffWidget()
210
103
        self.merge_successful = False
410
303
            [('a-id', 'a', 'removed', 'a'),
411
304
             ('b-id', 'b', 'removed', 'b/'),
412
305
            ], 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)