Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions codecov.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ coverage:
status:
project:
default:
target: "90"
target: "95"
patch:
default:
target: "90"
target: "95"
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ source = ["inquirer", "tests"]

[tool.coverage.report]
show_missing = true
fail_under = 90
fail_under = 95

[build-system]
requires = ["poetry-core>=1.0.0"]
Expand Down
14 changes: 3 additions & 11 deletions src/inquirer/errors.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,15 @@
class InquirerError(Exception):
pass


class ValidationError(InquirerError):
class ValidationError(Exception):
def __init__(self, value, reason=None, *args):
super().__init__(*args)
self.value = value
self.reason = reason


class UnknownQuestionTypeError(InquirerError):
pass


class Aborted(InquirerError):
class UnknownQuestionTypeError(Exception):
pass


class EndOfInput(InquirerError):
class EndOfInput(Exception):
def __init__(self, selection, *args):
super().__init__(*args)
self.selection = selection
Expand Down
4 changes: 2 additions & 2 deletions src/inquirer/prompt.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from .render.console import ConsoleRender
from . import themes
from inquirer.render.console import ConsoleRender
import inquirer.themes as themes


def prompt(questions, render=None, answers=None, theme=themes.Default(), raise_keyboard_interrupt=False):
Expand Down
2 changes: 1 addition & 1 deletion src/inquirer/questions.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import errno
import sys

from . import errors
import inquirer.errors as errors


class TaggedValue:
Expand Down
2 changes: 1 addition & 1 deletion src/inquirer/render/console/__init__.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import sys

from blessed import Terminal

from inquirer import errors
from inquirer import events
from inquirer import themes

from ._text import Text
from ._editor import Editor
from ._password import Password
Expand Down
4 changes: 2 additions & 2 deletions src/inquirer/shortcuts.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from .render.console import ConsoleRender
from . import questions
from inquirer.render.console import ConsoleRender
import inquirer.questions as questions


def text(message, render=None, **kwargs):
Expand Down
18 changes: 9 additions & 9 deletions src/inquirer/themes.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import collections
import json

from collections import namedtuple
from blessed import Terminal

from .errors import ThemeError
import inquirer.errors as errors

term = Terminal()

Expand Down Expand Up @@ -50,7 +50,7 @@ def load_theme_from_dict(dict_theme):
t = Default()
for question_type, settings in dict_theme.items():
if question_type not in vars(t):
raise ThemeError(
raise errors.ThemeError(
"Error while parsing theme. Question type " "`{}` not found or not customizable.".format(question_type)
)

Expand All @@ -59,7 +59,7 @@ def load_theme_from_dict(dict_theme):

for field, value in settings.items():
if field not in question_fields:
raise ThemeError(
raise errors.ThemeError(
"Error while parsing theme. Field "
"`{}` invalid for question type `{}`".format(field, question_type)
)
Expand All @@ -70,13 +70,13 @@ def load_theme_from_dict(dict_theme):

class Theme:
def __init__(self):
self.Question = namedtuple("question", "mark_color brackets_color " "default_color")
self.Editor = namedtuple("editor", "opening_prompt")
self.Checkbox = namedtuple(
self.Question = collections.namedtuple("question", "mark_color brackets_color default_color")
self.Editor = collections.namedtuple("editor", "opening_prompt")
self.Checkbox = collections.namedtuple(
"common",
"selection_color selection_icon " "selected_color unselected_color " "selected_icon unselected_icon",
"selection_color selection_icon selected_color unselected_color selected_icon unselected_icon",
)
self.List = namedtuple("List", "selection_color selection_cursor " "unselected_color")
self.List = collections.namedtuple("List", "selection_color selection_cursor unselected_color")


class Default(Theme):
Expand Down
46 changes: 36 additions & 10 deletions tests/integration/console_render/test_checkbox.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def test_one_choice(self):
result = sut.render(question)

self.assertInStdout(message)
self.assertEqual(["foo"], result)
assert result == ["foo"]

def test_choose_the_second(self):
stdin = helper.event_factory(key.DOWN, key.SPACE, key.ENTER)
Expand All @@ -55,7 +55,33 @@ def test_choose_the_second(self):
result = sut.render(question)

self.assertInStdout(message)
self.assertEqual(["bar"], result)
assert result == ["bar"]

def test_choose_with_long_choices(self):
stdin = helper.event_factory(
key.DOWN,
key.DOWN,
key.DOWN,
key.DOWN,
key.DOWN,
key.DOWN,
key.DOWN,
key.DOWN,
key.SPACE,
key.DOWN,
key.DOWN,
key.ENTER,
)
message = "Number message"
variable = "Number variable"
choices = list(range(15))

question = questions.Checkbox(variable, message, choices=choices)

sut = ConsoleRender(event_generator=stdin)
result = sut.render(question)

assert result == [8]

def test_can_move(self):
stdin = helper.event_factory(key.DOWN, key.DOWN, key.UP, key.SPACE, key.ENTER)
Expand All @@ -68,7 +94,7 @@ def test_can_move(self):
sut = ConsoleRender(event_generator=stdin)
result = sut.render(question)

self.assertEqual(["bar"], result)
assert result == ["bar"]

def test_cannot_move_beyond_upper_limit(self):
stdin = helper.event_factory(
Expand All @@ -87,7 +113,7 @@ def test_cannot_move_beyond_upper_limit(self):
sut = ConsoleRender(event_generator=stdin)
result = sut.render(question)

self.assertEqual(["foo"], result)
assert result == ["foo"]

def test_cannot_move_beyond_lower_limit(self):
stdin = helper.event_factory(
Expand All @@ -104,7 +130,7 @@ def test_cannot_move_beyond_lower_limit(self):

self.printStdout()

self.assertEqual(["bazz"], result)
assert result == ["bazz"]

def test_ctrl_c_breaks_execution(self):
stdin_array = [key.CTRL_C]
Expand All @@ -131,7 +157,7 @@ def test_deselection(self):
sut = ConsoleRender(event_generator=stdin)
result = sut.render(question)

self.assertEqual([], result)
assert result == []

def test_right_cursor_selects_too(self):
stdin_array = [key.RIGHT, key.ENTER]
Expand All @@ -145,7 +171,7 @@ def test_right_cursor_selects_too(self):
sut = ConsoleRender(event_generator=stdin)
result = sut.render(question)

self.assertEqual(["foo"], result)
assert result == ["foo"]

def test_right_cursor_do_not_unselect(self):
stdin_array = [key.RIGHT, key.RIGHT, key.ENTER]
Expand All @@ -159,7 +185,7 @@ def test_right_cursor_do_not_unselect(self):
sut = ConsoleRender(event_generator=stdin)
result = sut.render(question)

self.assertEqual(["foo"], result)
assert result == ["foo"]

def test_left_cursor_unselect(self):
stdin_array = [key.SPACE, key.LEFT, key.ENTER]
Expand All @@ -173,7 +199,7 @@ def test_left_cursor_unselect(self):
sut = ConsoleRender(event_generator=stdin)
result = sut.render(question)

self.assertEqual([], result)
assert result == []

def test_left_cursor_do_not_select(self):
stdin_array = [key.SPACE, key.LEFT, key.LEFT, key.ENTER]
Expand All @@ -187,4 +213,4 @@ def test_left_cursor_do_not_select(self):
sut = ConsoleRender(event_generator=stdin)
result = sut.render(question)

self.assertEqual([], result)
assert result == []
6 changes: 1 addition & 5 deletions tests/integration/console_render/test_editor.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
import unittest

try:
from unittest.mock import patch
except ImportError:
from unittest.mock import patch
from unittest.mock import patch

from readchar import key

Expand Down
38 changes: 32 additions & 6 deletions tests/integration/console_render/test_list.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

from . import helper
from readchar import key
import pytest

from inquirer.render import ConsoleRender

Expand Down Expand Up @@ -40,7 +41,7 @@ def test_choose_the_first(self):
sut = ConsoleRender(event_generator=stdin)
result = sut.render(question)

self.assertEqual("foo", result)
assert result == "foo"

def test_choose_the_second(self):
stdin = helper.event_factory(key.DOWN, key.ENTER)
Expand All @@ -53,7 +54,32 @@ def test_choose_the_second(self):
sut = ConsoleRender(event_generator=stdin)
result = sut.render(question)

self.assertEqual("bar", result)
assert result == "bar"

def test_choose_with_long_choices(self):
stdin = helper.event_factory(
key.DOWN,
key.DOWN,
key.DOWN,
key.DOWN,
key.DOWN,
key.DOWN,
key.DOWN,
key.DOWN,
key.DOWN,
key.DOWN,
key.ENTER,
)
message = "Number message"
variable = "Number variable"
choices = list(range(15))

question = questions.List(variable, message, choices=choices)

sut = ConsoleRender(event_generator=stdin)
result = sut.render(question)

assert result == 10

def test_move_up(self):
stdin = helper.event_factory(key.DOWN, key.UP, key.ENTER)
Expand All @@ -66,7 +92,7 @@ def test_move_up(self):
sut = ConsoleRender(event_generator=stdin)
result = sut.render(question)

self.assertEqual("foo", result)
assert result == "foo"

def test_move_down_carousel(self):
stdin = helper.event_factory(key.DOWN, key.DOWN, key.DOWN, key.DOWN, key.ENTER)
Expand All @@ -79,7 +105,7 @@ def test_move_down_carousel(self):
sut = ConsoleRender(event_generator=stdin)
result = sut.render(question)

self.assertEqual("bar", result)
assert result == "bar"

def test_move_up_carousel(self):
stdin = helper.event_factory(key.UP, key.ENTER)
Expand All @@ -92,7 +118,7 @@ def test_move_up_carousel(self):
sut = ConsoleRender(event_generator=stdin)
result = sut.render(question)

self.assertEqual("bazz", result)
assert result == "bazz"

def test_ctrl_c_breaks_execution(self):
stdin_array = [key.CTRL_C]
Expand All @@ -103,5 +129,5 @@ def test_ctrl_c_breaks_execution(self):
question = questions.List(variable, message)

sut = ConsoleRender(event_generator=stdin)
with self.assertRaises(KeyboardInterrupt):
with pytest.raises(KeyboardInterrupt):
sut.render(question)
Loading