1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
import pytest
from briefcase.console import InputDisabled
from tests.utils import default_rich_prompt
@pytest.mark.parametrize(
"user_input, expected",
[
("y", True),
("Y", True),
("yes", True),
("YES", True),
("Yes", True),
("YeS", True),
("Yay", True),
("Yaaaas!", True),
("n", False),
("N", False),
("No", False),
("NO", False),
("Nay", False),
("never!", False),
],
)
def test_boolean(console, user_input, expected):
question = "Are you handsome"
prompt = "Are you handsome [y/N]? "
console._console_impl.input.side_effect = [user_input]
result = console.input_boolean(question=question)
assert result == expected
console._console_impl.input.assert_called_once_with(
default_rich_prompt(prompt), markup=True
)
def test_boolean_default_true(console):
"""If True is the default, it is returned."""
question = "Are you handsome"
prompt = "Are you handsome [Y/n]? "
console._console_impl.input.side_effect = [""]
result = console.input_boolean(question=question, default=True)
assert result
console._console_impl.input.assert_called_once_with(
default_rich_prompt(prompt), markup=True
)
def test_boolean_default_false(console):
"""If False is the default, it is returned."""
question = "Are you handsome"
prompt = "Are you handsome [y/N]? "
console._console_impl.input.side_effect = [""]
result = console.input_boolean(question=question, default=False)
assert not result
console._console_impl.input.assert_called_once_with(
default_rich_prompt(prompt), markup=True
)
def test_boolean_default_None(console):
"""If no default is specified, no response is not accepted."""
question = "Are you handsome"
console._console_impl.input.side_effect = ["", "y"]
result = console.input_boolean(question=question, default=None)
assert result
assert console._console_impl.input.call_count == 2
def test_bad_input(console):
question = "Are you handsome"
console._console_impl.input.side_effect = ["pork", "ham", "spam", "Yam"]
result = console.input_boolean(question=question)
assert result
assert console._console_impl.input.call_count == 4
def test_disabled(disabled_console):
"""If input is disabled, the default is returned."""
question = "Are you handsome "
result = disabled_console.input_boolean(question=question)
assert not result
disabled_console._console_impl.input.assert_not_called()
def test_disabled_no_default(disabled_console):
"""If input is disabled and there is no default, an error is raised."""
question = "Are you handsome "
with pytest.raises(InputDisabled):
disabled_console.input_boolean(question=question, default=None)
disabled_console._console_impl.input.assert_not_called()
|