/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_push.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:
1
 
# Copyright (C) 2012 Curtis Hovey <sinzui.is@verizon.net>
2
 
#
3
 
# This program is free software; you can redistribute it and/or modify
4
 
# it under the terms of the GNU General Public License as published by
5
 
# the Free Software Foundation; either version 2 of the License, or
6
 
# (at your option) any later version.
7
 
#
8
 
# This program is distributed in the hope that it will be useful,
9
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
 
# GNU General Public License for more details.
12
 
#
13
 
# You should have received a copy of the GNU General Public License
14
 
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
 
 
17
 
"""Test the ui functionality."""
18
 
 
19
 
from gi.repository import Gtk
20
 
 
21
 
from bzrlib import (
22
 
    errors,
23
 
    tests,
24
 
    ui,
25
 
    )
26
 
 
27
 
from bzrlib.plugins.gtk import (
28
 
    push,
29
 
    set_ui_factory,
30
 
    )
31
 
from bzrlib.plugins.gtk.tests import MockMethod
32
 
from bzrlib.plugins.gtk.history import UrlHistory
33
 
from bzrlib.plugins.gtk.ui import ProgressPanel
34
 
 
35
 
 
36
 
class PushTestCase(tests.TestCaseWithMemoryTransport):
37
 
 
38
 
    def make_push_branch(self):
39
 
        tree = self.make_branch_and_memory_tree('test')
40
 
        return tree.branch
41
 
 
42
 
    def test_init(self):
43
 
        set_ui_factory()
44
 
        branch = self.make_push_branch()
45
 
        dialog = push.PushDialog(
46
 
            repository=None, revid=None, branch=branch, parent=None)
47
 
        self.assertIs(None, dialog.props.parent)
48
 
        self.assertIs(branch.repository, dialog.repository)
49
 
        self.assertIs(branch.last_revision(), dialog.revid)
50
 
        self.assertIs(branch, dialog.branch)
51
 
        # Layout rules to match HIG.
52
 
        self.assertIsInstance(dialog._label_location, Gtk.Label)
53
 
        self.assertIsInstance(dialog._combo, Gtk.ComboBox)
54
 
        self.assertIsInstance(dialog._button_push, Gtk.Button)
55
 
        self.assertIsInstance(dialog._hbox_location, Gtk.Box)
56
 
        self.assertIsInstance(dialog._progress_widget, ProgressPanel)
57
 
        self.assertIsInstance(dialog._push_message, Gtk.Label)
58
 
        self.assertIsInstance(dialog._history, UrlHistory)
59
 
        self.assertIs(
60
 
            ui.ui_factory._progress_bar_widget, dialog._progress_widget)
61
 
        self.assertEqual(
62
 
            Gtk.Orientation.HORIZONTAL,
63
 
            dialog._hbox_location.props.orientation)
64
 
        self.assertEqual(0.0, dialog._push_message.props.xalign)
65
 
        self.assertEqual(6, dialog.props.border_width)
66
 
        self.assertEqual(6, dialog._hbox_location.props.spacing)
67
 
        self.assertEqual(6, dialog.get_content_area().props.spacing)
68
 
        # Show rules.
69
 
        self.assertIs(True, dialog._combo.props.visible)
70
 
        self.assertIs(False, dialog._progress_widget.props.visible)
71
 
        self.assertIs(False, dialog._push_message.props.visible)
72
 
 
73
 
    def test_build_history(self):
74
 
        set_ui_factory()
75
 
        branch = self.make_push_branch()
76
 
        branch.set_push_location('lp:~user/fnord/trunk')
77
 
        dialog = push.PushDialog(None, None, branch)
78
 
        dialog._history.add_entry('lp:~user/fnord/test1')
79
 
        dialog._history.add_entry('lp:~user/fnord/test2')
80
 
        dialog._build_history()
81
 
        self.assertEqual(
82
 
            'lp:~user/fnord/trunk', dialog._combo.get_child().props.text)
83
 
        self.assertIsInstance(dialog._combo_model, Gtk.ListStore)
84
 
        self.assertIs(dialog._combo.get_model(), dialog._combo_model)
85
 
        locations = [row[0] for row in dialog._combo_model]
86
 
        self.assertEqual(
87
 
            ['lp:~user/fnord/test1', 'lp:~user/fnord/test2'], locations)
88
 
 
89
 
    def test_on_close_clicked(self):
90
 
        # The ui_factory's progress bar widget is set to None.
91
 
        set_ui_factory()
92
 
        branch = self.make_push_branch()
93
 
        dialog = push.PushDialog(None, None, branch)
94
 
        dialog._on_close_clicked(None)
95
 
        self.assertIs(None, ui.ui_factory._progress_bar_widget)
96
 
 
97
 
    def test_on_push_clicked_without_errors(self):
98
 
        # Verify the dialog's and branch's final states after a push.
99
 
        MockMethod.bind(self, push, 'do_push', "test success")
100
 
        set_ui_factory()
101
 
        branch = self.make_push_branch()
102
 
        dialog = push.PushDialog(None, None, branch)
103
 
        MockMethod.bind(self, dialog._progress_widget, 'tick')
104
 
        dialog._combo.get_child().props.text = 'lp:~user/fnord/test'
105
 
        dialog._on_push_clicked(None)
106
 
        self.assertIs(True, dialog._progress_widget.tick.called)
107
 
        self.assertIs(False, dialog._progress_widget.props.visible)
108
 
        self.assertIs(True, push.do_push.called)
109
 
        self.assertEqual(
110
 
            (branch, 'lp:~user/fnord/test'), push.do_push.args)
111
 
        self.assertEqual(
112
 
            {'overwrite': False}, push.do_push.kwargs)
113
 
        self.assertIs(True, dialog._push_message.props.visible)
114
 
        self.assertEqual('test success', dialog._push_message.props.label)
115
 
        self.assertEqual(
116
 
            'lp:~user/fnord/test', dialog._history.get_entries()[-1])
117
 
        self.assertEqual('lp:~user/fnord/test', branch.get_push_location())
118
 
 
119
 
    def test_on_push_clicked_with_divered_branches(self):
120
 
        # Verify that when DivergedBranches is raise, the user can choose
121
 
        # to overwrite the branch.
122
 
        error = errors.DivergedBranches(None, None)
123
 
        MockMethod.bind(self, push, 'do_push', raise_error=error)
124
 
        MockMethod.bind(self, push, 'question_dialog', Gtk.ResponseType.YES)
125
 
        set_ui_factory()
126
 
        branch = self.make_push_branch()
127
 
        dialog = push.PushDialog(None, None, branch)
128
 
        dialog._combo.get_child().props.text = 'lp:~user/fnord/test'
129
 
        dialog._on_push_clicked(None)
130
 
        self.assertIs(True, push.do_push.called)
131
 
        self.assertEqual(2, push.do_push.call_count)
132
 
        self.assertEqual(
133
 
            (branch, 'lp:~user/fnord/test'), push.do_push.args)
134
 
        self.assertEqual(
135
 
            {'overwrite': True}, push.do_push.kwargs)
136
 
 
137
 
 
138
 
class DoPushTestCase(tests.TestCaseWithTransport):
139
 
 
140
 
    def setup_ui(self):
141
 
        set_ui_factory()
142
 
        progress_panel = ProgressPanel()
143
 
        ui.ui_factory.set_progress_bar_widget(progress_panel)
144
 
        MockMethod.bind(self, progress_panel.pb, 'tick')
145
 
        MockMethod.bind(self, progress_panel.pb, 'update')
146
 
        MockMethod.bind(self, progress_panel.pb, 'finished')
147
 
        return progress_panel
148
 
 
149
 
    def make_from_branch(self):
150
 
        from_tree = self.make_branch_and_tree('this')
151
 
        self.build_tree(['this/a', 'this/b'])
152
 
        from_tree.add(['a', 'b'])
153
 
        from_tree.commit("msg")
154
 
        return from_tree.branch
155
 
 
156
 
    def test_do_push_without_dir(self):
157
 
        progress_panel = self.setup_ui()
158
 
        from_branch = self.make_from_branch()
159
 
        message = push.do_push(from_branch, 'that', False)
160
 
        self.assertEqual('1 revision(s) pushed.', message)
161
 
        self.assertEqual(True, progress_panel.pb.update.called)
162
 
        self.assertEqual(True, progress_panel.pb.finished.called)
163
 
 
164
 
    def test_do_push_without_parent_dir(self):
165
 
        progress_panel = self.setup_ui()
166
 
        from_branch = self.make_from_branch()
167
 
        MockMethod.bind(self, push, 'question_dialog', Gtk.ResponseType.OK)
168
 
        message = push.do_push(from_branch, 'that/there', False)
169
 
        self.assertEqual('1 revision(s) pushed.', message)
170
 
        self.assertEqual(True, push.question_dialog.called)
171
 
        self.assertEqual(True, progress_panel.pb.update.called)
172
 
        self.assertEqual(True, progress_panel.pb.finished.called)
173
 
 
174
 
    def test_do_push_without_parent_dir_aborted(self):
175
 
        self.setup_ui()
176
 
        from_branch = self.make_from_branch()
177
 
        MockMethod.bind(self, push, 'question_dialog', Gtk.ResponseType.CANCEL)
178
 
        message = push.do_push(from_branch, 'that/there', False)
179
 
        self.assertEqual('Push aborted.', message)
180
 
 
181
 
    def test_do_push_with_dir(self):
182
 
        progress_panel = self.setup_ui()
183
 
        self.make_branch_and_tree('that')
184
 
        from_branch = self.make_from_branch()
185
 
        message = push.do_push(from_branch, 'that', False)
186
 
        self.assertEqual('1 revision(s) pushed.', message)
187
 
        self.assertEqual(True, progress_panel.pb.update.called)
188
 
        self.assertEqual(True, progress_panel.pb.finished.called)
189
 
 
190
 
    def test_create_push_result_unstacked(self):
191
 
        from_branch = object()
192
 
        to_branch = self.make_branch_and_tree('that').branch
193
 
        push_result = push.create_push_result(from_branch, to_branch)
194
 
        self.assertIs(from_branch, push_result.source_branch)
195
 
        self.assertIs(to_branch, push_result.target_branch)
196
 
        self.assertIs(None, push_result.branch_push_result)
197
 
        self.assertIs(None, push_result.master_branch)
198
 
        self.assertEqual(0, push_result.old_revno)
199
 
        self.assertEqual(to_branch.last_revision(), push_result.old_revid)
200
 
        self.assertIs(None, push_result.workingtree_updated)
201
 
        self.assertIs(None, push_result.stacked_on)
202
 
 
203
 
    def test_create_push_result_stacked(self):
204
 
        from_branch = object()
205
 
        to_branch = self.make_branch_and_tree('that').branch
206
 
        MockMethod.bind(self, to_branch, 'get_stacked_on_url', 'lp:project')
207
 
        push_result = push.create_push_result(from_branch, to_branch)
208
 
        self.assertEqual('lp:project', push_result.stacked_on)
209
 
 
210
 
    def test_create_push_message_stacked_on(self):
211
 
        from_branch = object()
212
 
        to_branch = self.make_branch_and_tree('that').branch
213
 
        MockMethod.bind(self, to_branch, 'get_stacked_on_url', 'lp:project')
214
 
        push_result = push.create_push_result(from_branch, to_branch)
215
 
        from_branch = self.make_from_branch()
216
 
        message = push.create_push_message(from_branch, push_result)
217
 
        self.assertEqual(
218
 
            '1 revision(s) pushed.\nStacked on lp:project.', message)
219
 
 
220
 
    def test_create_push_message_workingtree_updated_false(self):
221
 
        from_branch = object()
222
 
        to_branch = self.make_branch_and_tree('that').branch
223
 
        push_result = push.create_push_result(from_branch, to_branch)
224
 
        push_result.workingtree_updated = False
225
 
        from_branch = self.make_from_branch()
226
 
        message = push.create_push_message(from_branch, push_result)
227
 
        self.assertEqual(
228
 
            "1 revision(s) pushed.\n\nThe working tree was not updated:\n"
229
 
            "See 'bzr help working-trees' for more information.",
230
 
            message)