Verified Commit deb6fd4e authored by juga's avatar juga
Browse files

Merge branch 'm13'

parents 754469b4 ca2a15c4
......@@ -119,10 +119,5 @@
<polygon fill="none" stroke="black" points="8396.5,-36 8014.5,-36 8014.5,-0 8396.5,-0 8396.5,-36"/>
<text text-anchor="middle" x="8205.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth&#45;related/sbws/sbws/util/timestamp.py</text>
</g>
<!-- 22 -->
<g id="node23" class="node"><title>22</title>
<polygon fill="none" stroke="black" points="8792,-36 8415,-36 8415,-0 8792,-0 8792,-36"/>
<text text-anchor="middle" x="8603.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth&#45;related/sbws/sbws/util/userquery.py</text>
</g>
</g>
</svg>
......@@ -44,15 +44,6 @@ sbws.util.stem module
:undoc-members:
:show-inheritance:
sbws.util.userquery module
~~~~~~~~~~~~~~~~~~~~~~~~~~
.. automodule:: sbws.util.userquery
:members:
:undoc-members:
:show-inheritance:
Module contents
---------------
......
# Based on https://stackoverflow.com/a/3041990
def query_yes_no(question, default="yes"):
"""
Ask a yes/no question via input() and return the user's answer.
:param str question: Prompt given to the user.
:param str default: The assumed answer if th user just hits **Enter**. It
must be ``'yes'`` (the default if no default is given), ``'no'``, or
``None`` (meaning an answer is required from the user).
:returns: ``True`` if we ended up with a 'yes' answer, otherwise
``False``.
"""
valid = {"yes": True, "y": True, "ye": True, "no": False, "n": False}
if default is None:
prompt = " [y/n] "
elif default == "yes":
prompt = " [Y/n] "
elif default == "no":
prompt = " [y/N] "
else:
raise ValueError('invalid default answer: "%s"' % default)
prompt = question + prompt
first_loop = True
while True:
choice = input(prompt).lower()
if default is not None and choice == "":
return valid[default]
elif choice in valid:
return valid[choice]
elif first_loop:
prompt = (
'Please respond with "yes" or "no" (or y or n).\n' + prompt
)
first_loop = False
from unittest.mock import patch
from sbws.util.userquery import query_yes_no
@patch("builtins.input")
def test_userquery_missing_default_invalid_response(input_mock):
input_mock.side_effect = (
[""] * 100 + ["k"] * 100 + ["yess"] * 100 + ["no o"] * 100
)
try:
query_yes_no("a?", default=None)
except StopIteration:
pass
else:
assert None, (
"Should have looped forever (and StopItration been "
"thrown when we stopped feeding it empty responses)"
)
assert input_mock.call_count == 401
@patch("builtins.input")
def test_userquery_missing_default_yes_response(input_mock):
input_mock.side_effect = [""] * 100 + ["y"]
assert query_yes_no("a?", default=None)
assert input_mock.call_count == 101
input_mock.reset_mock()
input_mock.side_effect = [""] * 100 + ["Y"]
assert query_yes_no("a?", default=None)
assert input_mock.call_count == 101
input_mock.reset_mock()
input_mock.side_effect = [""] * 100 + ["Yes"]
assert query_yes_no("a?", default=None)
assert input_mock.call_count == 101
input_mock.reset_mock()
input_mock.side_effect = ["k"] * 100 + ["Yes"]
assert query_yes_no("a?", default=None)
assert input_mock.call_count == 101
input_mock.reset_mock()
input_mock.side_effect = ["k"] * 100 + ["Yes", "No"]
assert query_yes_no("a?", default=None)
assert input_mock.call_count == 101
input_mock.reset_mock()
@patch("builtins.input")
def test_userquery_missing_default_no_response(input_mock):
input_mock.side_effect = [""] * 100 + ["n"]
assert not query_yes_no("a?", default=None)
assert input_mock.call_count == 101
input_mock.reset_mock()
input_mock.side_effect = [""] * 100 + ["N"]
assert not query_yes_no("a?", default=None)
assert input_mock.call_count == 101
input_mock.reset_mock()
input_mock.side_effect = [""] * 100 + ["No"]
assert not query_yes_no("a?", default=None)
assert input_mock.call_count == 101
input_mock.reset_mock()
input_mock.side_effect = ["k"] * 100 + ["No"]
assert not query_yes_no("a?", default=None)
assert input_mock.call_count == 101
input_mock.reset_mock()
input_mock.side_effect = ["k"] * 100 + ["No", "Yes"]
assert not query_yes_no("a?", default=None)
assert input_mock.call_count == 101
input_mock.reset_mock()
@patch("builtins.input")
def test_userquery_yes_default_invalid_response(input_mock):
input_mock.side_effect = [""] * 100
assert query_yes_no("a?", default="yes")
assert input_mock.call_count == 1
@patch("builtins.input")
def test_userquery_no_default_invalid_response(input_mock):
input_mock.side_effect = [""] * 100
assert not query_yes_no("a?", default="no")
assert input_mock.call_count == 1
@patch("builtins.input")
def test_userquery_bad_default_invalid_response(input_mock):
input_mock.side_effect = [""] * 100
try:
query_yes_no("a?", default="nooo")
except ValueError:
pass
else:
assert None, (
"Should not have allowed us to specify a bad default " "value"
)
assert input_mock.call_count == 0
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment