93
95
"I'm sure!\nyes\n" # True
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""))
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)
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)
119
ValueError, factory.choose, u"", u"&choice\n&ChOiCe")
120
# duplicated shortcut
122
ValueError, factory.choose, u"", u"&choice1\nchoi&ce2")
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")
129
"prompt ([y]es, [N]o, more [i]nfo): \n",
130
factory.stderr.getvalue())
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")
137
"prompt ([y]es, [N]o, [m]ore info): \n",
138
factory.stderr.getvalue())
132
140
def test_text_ui_choose_return_values(self):
133
choose = lambda: factory.choose(u"", u"&Yes\n&No\nMaybe\nmore &info", 3)
142
return factory.choose(u"", u"&Yes\n&No\nMaybe\nmore &info", 3)
142
151
"info\nmore info\n" # 3
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())
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())
167
self.assertEqual(None, choose())
160
169
def test_text_ui_choose_no_default(self):
162
171
" \n" # no default, invalid!
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())
169
178
def test_text_ui_get_integer(self):
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""))
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())
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
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,
201
u"what do you want"))
202
output = out.getvalue()
203
self.assertContainsRe(output,
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())
201
pb = factory.nested_progress_bar()
202
pb._avail_width = lambda: 79
204
pb.show_spinner = False
205
pb.show_count = False
206
pb.update("foo", 0, 1)
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,
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())
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)
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)
245
256
def test_text_ui_show_user_warning(self):
246
257
from ..bzr.groupcompress_repo import RepositoryFormat2a