/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to breezy/tests/test_ui.py

  • Committer: Breezy landing bot
  • Author(s): Martin
  • Date: 2018-03-24 17:25:27 UTC
  • mfrom: (6910.3.2 ui_enter)
  • Revision ID: breezy.the.bot@gmail.com-20180324172527-yczskdtrucxhpycd
Further work on sane ui factory interface and fix choose in char mode

Merged from https://code.launchpad.net/~gz/brz/ui_enter/+merge/342043

Show diffs side-by-side

added added

removed removed

Lines of Context:
53
53
 
54
54
    def test_text_factory_confirm(self):
55
55
        # turns into reading a regular boolean
56
 
        ui = ui_testing.TestUIFactory('n\n')
57
 
        self.assertEqual(ui.confirm_action(u'Should %(thing)s pass?',
58
 
            'breezy.tests.test_ui.confirmation',
59
 
            {'thing': 'this'},),
60
 
            False)
 
56
        with ui_testing.TestUIFactory('n\n') as ui:
 
57
            self.assertEqual(
 
58
                False,
 
59
                ui.confirm_action(
 
60
                    u'Should %(thing)s pass?',
 
61
                    'breezy.tests.test_ui.confirmation',
 
62
                    {'thing': 'this'}))
61
63
 
62
64
    def test_text_factory_ascii_password(self):
63
65
        ui = ui_testing.TestUIFactory('secret\n')
93
95
            "I'm sure!\nyes\n" # True
94
96
            "NO\n" # False
95
97
            "foo\n")
96
 
        factory = ui_testing.TextUIFactory(stdin_text)
97
 
        self.assertEqual(True, factory.get_boolean(u""))
98
 
        self.assertEqual(False, factory.get_boolean(u""))
99
 
        self.assertEqual(True, factory.get_boolean(u""))
100
 
        self.assertEqual(False, factory.get_boolean(u""))
101
 
        self.assertEqual(True, factory.get_boolean(u""))
102
 
        self.assertEqual(False, factory.get_boolean(u""))
103
 
        self.assertEqual(True, factory.get_boolean(u""))
104
 
        self.assertEqual(False, factory.get_boolean(u""))
105
 
        self.assertEqual("foo\n", factory.stdin.read())
106
 
        # stdin should be empty
107
 
        self.assertEqual('', factory.stdin.readline())
108
 
        # return false on EOF
109
 
        self.assertEqual(False, factory.get_boolean(u""))
 
98
        with ui_testing.TextUIFactory(stdin_text) as factory:
 
99
            self.assertEqual(True, factory.get_boolean(u""))
 
100
            self.assertEqual(False, factory.get_boolean(u""))
 
101
            self.assertEqual(True, factory.get_boolean(u""))
 
102
            self.assertEqual(False, factory.get_boolean(u""))
 
103
            self.assertEqual(True, factory.get_boolean(u""))
 
104
            self.assertEqual(False, factory.get_boolean(u""))
 
105
            self.assertEqual(True, factory.get_boolean(u""))
 
106
            self.assertEqual(False, factory.get_boolean(u""))
 
107
            self.assertEqual("foo\n", factory.stdin.read())
 
108
            # stdin should be empty
 
109
            self.assertEqual('', factory.stdin.readline())
 
110
            # return false on EOF
 
111
            self.assertEqual(False, factory.get_boolean(u""))
110
112
 
111
113
    def test_text_ui_choose_bad_parameters(self):
112
 
        factory = ui_testing.TextUIFactory(u"")
113
 
        # invalid default index
114
 
        self.assertRaises(ValueError, factory.choose, u"", u"&Yes\n&No", 3)
115
 
        # duplicated choice
116
 
        self.assertRaises(ValueError, factory.choose, u"", u"&choice\n&ChOiCe")
117
 
        # duplicated shortcut
118
 
        self.assertRaises(ValueError, factory.choose, u"", u"&choice1\nchoi&ce2")
 
114
        with ui_testing.TextUIFactory(u"") as factory:
 
115
            # invalid default index
 
116
            self.assertRaises(ValueError, factory.choose, u"", u"&Yes\n&No", 3)
 
117
            # duplicated choice
 
118
            self.assertRaises(
 
119
                ValueError, factory.choose, u"", u"&choice\n&ChOiCe")
 
120
            # duplicated shortcut
 
121
            self.assertRaises(
 
122
                ValueError, factory.choose, u"", u"&choice1\nchoi&ce2")
119
123
 
120
124
    def test_text_ui_choose_prompt_explicit(self):
121
125
        # choices with explicit shortcuts
122
 
        factory = ui_testing.TextUIFactory(u"")
123
 
        factory.choose(u"prompt", u"&yes\n&No\nmore &info")
124
 
        self.assertEqual("prompt ([y]es, [N]o, more [i]nfo): \n", factory.stderr.getvalue())
 
126
        with ui_testing.TextUIFactory(u"") as factory:
 
127
            factory.choose(u"prompt", u"&yes\n&No\nmore &info")
 
128
            self.assertEqual(
 
129
                "prompt ([y]es, [N]o, more [i]nfo): \n",
 
130
                factory.stderr.getvalue())
125
131
 
126
132
    def test_text_ui_choose_prompt_automatic(self):
127
133
        # automatic shortcuts
128
 
        factory = ui_testing.TextUIFactory(u"")
129
 
        factory.choose(u"prompt", u"yes\nNo\nmore info")
130
 
        self.assertEqual("prompt ([y]es, [N]o, [m]ore info): \n", factory.stderr.getvalue())
 
134
        with ui_testing.TextUIFactory(u"") as factory:
 
135
            factory.choose(u"prompt", u"yes\nNo\nmore info")
 
136
            self.assertEqual(
 
137
                "prompt ([y]es, [N]o, [m]ore info): \n",
 
138
                factory.stderr.getvalue())
131
139
 
132
140
    def test_text_ui_choose_return_values(self):
133
 
        choose = lambda: factory.choose(u"", u"&Yes\n&No\nMaybe\nmore &info", 3)
 
141
        def choose():
 
142
            return factory.choose(u"", u"&Yes\n&No\nMaybe\nmore &info", 3)
134
143
        stdin_text = (
135
144
            "y\n" # 0
136
145
            "n\n" # 1
142
151
            "info\nmore info\n" # 3
143
152
            "Maybe\n" # 2
144
153
            "foo\n")
145
 
        factory = ui_testing.TextUIFactory(stdin_text)
146
 
        self.assertEqual(0, choose())
147
 
        self.assertEqual(1, choose())
148
 
        self.assertEqual(3, choose())
149
 
        self.assertEqual(1, choose())
150
 
        self.assertEqual(0, choose())
151
 
        self.assertEqual(1, choose())
152
 
        self.assertEqual(3, choose())
153
 
        self.assertEqual(2, choose())
154
 
        self.assertEqual("foo\n", factory.stdin.read())
155
 
        # stdin should be empty
156
 
        self.assertEqual('', factory.stdin.readline())
157
 
        # return None on EOF
158
 
        self.assertEqual(None, choose())
 
154
        with ui_testing.TextUIFactory(stdin_text) as factory:
 
155
            self.assertEqual(0, choose())
 
156
            self.assertEqual(1, choose())
 
157
            self.assertEqual(3, choose())
 
158
            self.assertEqual(1, choose())
 
159
            self.assertEqual(0, choose())
 
160
            self.assertEqual(1, choose())
 
161
            self.assertEqual(3, choose())
 
162
            self.assertEqual(2, choose())
 
163
            self.assertEqual("foo\n", factory.stdin.read())
 
164
            # stdin should be empty
 
165
            self.assertEqual('', factory.stdin.readline())
 
166
            # return None on EOF
 
167
            self.assertEqual(None, choose())
159
168
 
160
169
    def test_text_ui_choose_no_default(self):
161
170
        stdin_text = (
162
171
            " \n" # no default, invalid!
163
172
            " yes \n" # 0
164
173
            "foo\n")
165
 
        factory = ui_testing.TextUIFactory(stdin_text)
166
 
        self.assertEqual(0, factory.choose(u"", u"&Yes\n&No"))
167
 
        self.assertEqual("foo\n", factory.stdin.read())
 
174
        with ui_testing.TextUIFactory(stdin_text) as factory:
 
175
            self.assertEqual(0, factory.choose(u"", u"&Yes\n&No"))
 
176
            self.assertEqual("foo\n", factory.stdin.read())
168
177
 
169
178
    def test_text_ui_get_integer(self):
170
179
        stdin_text = (
171
180
            "1\n"
172
181
            "  -2  \n"
173
182
            "hmmm\nwhat else ?\nCome on\nok 42\n4.24\n42\n")
174
 
        factory = ui_testing.TextUIFactory(stdin_text)
175
 
        self.assertEqual(1, factory.get_integer(u""))
176
 
        self.assertEqual(-2, factory.get_integer(u""))
177
 
        self.assertEqual(42, factory.get_integer(u""))
 
183
        with ui_testing.TextUIFactory(stdin_text) as factory:
 
184
            self.assertEqual(1, factory.get_integer(u""))
 
185
            self.assertEqual(-2, factory.get_integer(u""))
 
186
            self.assertEqual(42, factory.get_integer(u""))
178
187
 
179
188
    def test_text_factory_prompt(self):
180
189
        # see <https://launchpad.net/bugs/365891>
181
 
        factory = ui_testing.TextUIFactory()
182
 
        factory.prompt(u'foo %2e')
183
 
        self.assertEqual('', factory.stdout.getvalue())
184
 
        self.assertEqual('foo %2e', factory.stderr.getvalue())
 
190
        with ui_testing.TextUIFactory() as factory:
 
191
            factory.prompt(u'foo %2e')
 
192
            self.assertEqual('', factory.stdout.getvalue())
 
193
            self.assertEqual('foo %2e', factory.stderr.getvalue())
185
194
 
186
195
    def test_text_factory_prompts_and_clears(self):
187
196
        # a get_boolean call should clear the pb before prompting
188
197
        out = ui_testing.StringIOAsTTY()
189
198
        self.overrideEnv('TERM', 'xterm')
190
199
        factory = ui_testing.TextUIFactory("yada\ny\n", stdout=out, stderr=out)
191
 
        pb = factory.nested_progress_bar()
192
 
        pb._avail_width = lambda: 79
193
 
        pb.show_bar = False
194
 
        pb.show_spinner = False
195
 
        pb.show_count = False
196
 
        pb.update("foo", 0, 1)
197
 
        self.assertEqual(True,
198
 
                         self.apply_redirected(None, factory.stdout,
199
 
                                               factory.stdout,
200
 
                                               factory.get_boolean,
201
 
                                               u"what do you want"))
202
 
        output = out.getvalue()
203
 
        self.assertContainsRe(output,
204
 
            "| foo *\r\r  *\r*")
205
 
        self.assertContainsString(output,
206
 
            r"what do you want? ([y]es, [n]o): what do you want? ([y]es, [n]o): ")
207
 
        # stdin should have been totally consumed
208
 
        self.assertEqual('', factory.stdin.readline())
 
200
        with factory:
 
201
            pb = factory.nested_progress_bar()
 
202
            pb._avail_width = lambda: 79
 
203
            pb.show_bar = False
 
204
            pb.show_spinner = False
 
205
            pb.show_count = False
 
206
            pb.update("foo", 0, 1)
 
207
            self.assertEqual(
 
208
                True,
 
209
                self.apply_redirected(
 
210
                    None, factory.stdout, factory.stdout, factory.get_boolean,
 
211
                    u"what do you want"))
 
212
            output = out.getvalue()
 
213
            self.assertContainsRe(output,
 
214
                "| foo *\r\r  *\r*")
 
215
            self.assertContainsString(output,
 
216
                r"what do you want? ([y]es, [n]o): what do you want? ([y]es, [n]o): ")
 
217
            # stdin should have been totally consumed
 
218
            self.assertEqual('', factory.stdin.readline())
209
219
 
210
220
    def test_text_tick_after_update(self):
211
221
        ui_factory = ui_testing.TextUIFactory()
236
246
        self.overrideEnv('BRZ_PROGRESS_BAR', 'text')
237
247
        ui_factory = ui_testing.TextUIFactory(
238
248
            stderr=ui_testing.StringIOAsTTY())
239
 
        self.assertIsInstance(ui_factory._progress_view,
240
 
            _mod_ui_text.TextProgressView)
241
 
        ui_factory.be_quiet(True)
242
 
        self.assertIsInstance(ui_factory._progress_view,
243
 
            _mod_ui_text.NullProgressView)
 
249
        with ui_factory:
 
250
            self.assertIsInstance(ui_factory._progress_view,
 
251
                _mod_ui_text.TextProgressView)
 
252
            ui_factory.be_quiet(True)
 
253
            self.assertIsInstance(ui_factory._progress_view,
 
254
                _mod_ui_text.NullProgressView)
244
255
 
245
256
    def test_text_ui_show_user_warning(self):
246
257
        from ..bzr.groupcompress_repo import RepositoryFormat2a