def test_validation_fails_with_custom_message(self): stdin_array = [ x for x in "Invalid" + key.ENTER + key.BACKSPACE * 20 + "9999" + key.ENTER ] stdin = helper.event_factory(*stdin_array) message = "Insert number" variable = "foo" expected = "9999" def raise_exc(x, current): if current != "9999": raise errors.ValidationError("", reason="Custom error") return True question = questions.Text(variable, validate=raise_exc, message=message) sut = ConsoleRender(event_generator=stdin) result = sut.render(question) self.assertEqual(expected, result) self.assertInStdout(message) self.assertInStdout("Custom error")
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_ctrl_c_breaks_execution(self): stdin = helper.event_factory(key.CTRL_C) message = "Foo message" variable = "Bar variable" question = questions.Confirm(variable, message) sut = ConsoleRender(event_generator=stdin) with self.assertRaises(KeyboardInterrupt): sut.render(question)
def test_ctrl_c_breaks_execution(self, edit): stdin = [key.CTRL_C] message = "Foo message" variable = "Bar variable" question = questions.Editor(variable, message) sut = ConsoleRender(event_generator=helper.event_factory(*stdin)) with self.assertRaises(KeyboardInterrupt): sut.render(question) self.assertFalse(edit.called)
def test_ctrl_c_breaks_execution(self): stdin_array = [key.CTRL_C] stdin = helper.event_factory(*stdin_array) message = "Foo message" variable = "Bar variable" question = questions.List(variable, message) sut = ConsoleRender(event_generator=stdin) with pytest.raises(KeyboardInterrupt): sut.render(question)
def test_ctrl_c_breaks_execution(self): stdin_array = [key.CTRL_C] stdin = helper.event_factory(*stdin_array) message = "Foo message" variable = "Bar variable" choices = ["foo", "bar", "bazz"] question = questions.Checkbox(variable, message, choices=choices) sut = ConsoleRender(event_generator=stdin) with self.assertRaises(KeyboardInterrupt): sut.render(question)
def test_invalid_answer(self): stdin = helper.event_factory("Z", "Z", "Z", "Y") message = "Foo message" variable = "Bar variable" question = questions.Confirm(variable, message=message, default=True) sut = ConsoleRender(event_generator=stdin) result = sut.render(question) self.assertNotInStdout("Z") self.assertTrue(result)
def test_move_up(self): stdin = helper.event_factory(key.DOWN, key.UP, key.ENTER) message = "Foo message" variable = "Bar variable" choices = ["foo", "bar", "bazz"] question = questions.List(variable, message, choices=choices) sut = ConsoleRender(event_generator=stdin) result = sut.render(question) assert result == "foo"
def test_allows_deletion(self): stdin_array = ["a", key.BACKSPACE, "b", key.ENTER] stdin = helper.event_factory(*stdin_array) message = "Foo message" variable = "Bar variable" question = questions.Text(variable, message) sut = ConsoleRender(event_generator=stdin) result = sut.render(question) self.assertEqual("b", result)
def test_choose_the_second(self): stdin = helper.event_factory(key.DOWN, key.SPACE, key.ENTER) message = "Foo message" variable = "Bar variable" choices = ["foo", "bar", "bazz"] question = questions.Checkbox(variable, message, choices=choices) sut = ConsoleRender(event_generator=stdin) result = sut.render(question) self.assertInStdout(message) assert result == ["bar"]
def test_left_cursor_do_not_select(self): stdin_array = [key.SPACE, key.LEFT, key.LEFT, key.ENTER] stdin = helper.event_factory(*stdin_array) message = "Foo message" variable = "Bar variable" choices = ["foo", "bar", "bazz"] question = questions.Checkbox(variable, message, choices=choices) sut = ConsoleRender(event_generator=stdin) result = sut.render(question) assert result == []
def test_do_not_show_values(self): stdin = helper.event_factory("m", "y", " ", "p", "a", "s", "s", "w", "o", "r", "d", key.ENTER) message = "Foo message" variable = "Bar variable" question = inquirer.questions.Password(variable, message) sut = ConsoleRender(event_generator=stdin) sut.render(question) self.assertInStdout(message) self.assertNotInStdout("my password")
def test_basic_render(self, edit): edit.return_value = b"Some text" stdin = [key.ENTER] message = "Foo message" variable = "Bar variable" question = questions.Editor(variable, message) sut = ConsoleRender(event_generator=helper.event_factory(*stdin)) result = sut.render(question) self.assertEqual("Some text", result) self.assertInStdout(message) self.assertTrue(edit.called)
def test_no_as_default(self): stdin = helper.event_factory(key.ENTER) message = "Foo message" variable = "Bar variable" expected = False question = questions.Confirm(variable, message=message) sut = ConsoleRender(event_generator=stdin) result = sut.render(question) self.assertEqual(expected, result) self.assertInStdout(message) self.assertInStdout("(y/N)")
def test_basic_render(self): stdin_msg = "This is a foo message" stdin_array = [x for x in stdin_msg + key.ENTER] stdin = helper.event_factory(*stdin_array) message = "Foo message" variable = "Bar variable" question = questions.Text(variable, message) sut = ConsoleRender(event_generator=stdin) result = sut.render(question) self.assertEqual(stdin_msg, result) self.assertInStdout(message)
def test_answring_N(self): stdin = helper.event_factory("N") message = "Foo message" variable = "Bar variable" expected = False question = questions.Confirm(variable, message=message, default=True) sut = ConsoleRender(event_generator=stdin) result = sut.render(question) self.assertEqual(expected, result) self.assertInStdout(message) self.assertInStdout("(Y/n)")
def test_all_choices_are_shown(self): stdin = helper.event_factory(key.ENTER) message = "Foo message" variable = "Bar variable" choices = ["foo", "bar", "bazz"] question = questions.List(variable, message, choices=choices) sut = ConsoleRender(event_generator=stdin) sut.render(question) self.assertInStdout(message) for choice in choices: self.assertInStdout(choice)
def test_handle_validation_error_with_reason(self): stdin = helper.event_factory("p", "a", "s", "s", key.ENTER) message = "Foo message" variable = "Bar variable" def validate(answers, current): raise inquirer.errors.ValidationError("", reason="some reason") question = inquirer.questions.Password(variable, message, validate=validate) sut = ConsoleRender(event_generator=stdin) with self.assertRaises(StopIteration): sut.render(question)
def test_move_up_carousel(self): stdin = helper.event_factory(key.UP, key.SPACE, key.ENTER) message = "Foo message" variable = "Bar variable" choices = ["foo", "bar", "bazz"] question = questions.Checkbox(variable, message, choices=choices, carousel=True) sut = ConsoleRender(event_generator=stdin) result = sut.render(question) assert result == ["bazz"]
def test_validate(self): stdin = helper.event_factory("p", "a", "s", "s", key.ENTER) message = "Foo message" variable = "Bar variable" def validate(answers, current): return False question = inquirer.questions.Password(variable, message, validate=validate) sut = ConsoleRender(event_generator=stdin) with self.assertRaises(StopIteration): sut.render(question)
def test_cannot_move_beyond_lower_limit(self): stdin = helper.event_factory(key.DOWN, key.DOWN, key.DOWN, key.DOWN, key.DOWN, key.DOWN, key.DOWN, key.SPACE, key.ENTER) message = "Foo message" variable = "Bar variable" choices = ["foo", "bar", "bazz"] question = questions.Checkbox(variable, message, choices=choices) sut = ConsoleRender(event_generator=stdin) result = sut.render(question) self.printStdout() assert result == ["bazz"]
def test_ignore_true_should_return(self, edit): edit.return_value = b"Some text" stdin = [key.ENTER] message = "Foo message" variable = "Bar variable" expected = "Something default" question = questions.Editor(variable, ignore=True, default=expected, message=message) sut = ConsoleRender(event_generator=helper.event_factory(*stdin)) result = sut.render(question) self.assertEqual(expected, result) self.assertNotInStdout(message) self.assertFalse(edit.called)
def test_validation_fails(self, edit): stdin = [key.ENTER, key.ENTER] edit.side_effect = [b"Only one line", b"Two\nLines\nCool"] message = "Insert number" variable = "foo" expected = "Two\nLines\nCool" def val(_, x): return x.count("\n") >= 2 question = questions.Editor(variable, validate=val, message=message) sut = ConsoleRender(event_generator=helper.event_factory(*stdin)) result = sut.render(question) self.assertEqual(expected, result) self.assertInStdout(message) self.assertInStdout("Entered value is not a valid foo") self.assertTrue(edit.called)
def test_validation_fails(self): stdin_array = [ x for x in "Invalid" + key.ENTER + key.BACKSPACE * 20 + "9999" + key.ENTER ] stdin = helper.event_factory(*stdin_array) message = "Insert number" variable = "foo" expected = "9999" question = questions.Text(variable, validate=lambda _, x: re.match(r"\d+", x), message=message) sut = ConsoleRender(event_generator=stdin) result = sut.render(question) self.assertEqual(expected, result) self.assertInStdout(message) self.assertInStdout('"Invalid" is not a valid foo')
def test_validation_fails_with_custom_error(self, edit): stdin = [key.ENTER, key.ENTER] edit.side_effect = [b"Only one line", b"Two\nLines\nCool"] message = "Insert number" variable = "foo" expected = "Two\nLines\nCool" def val(_, x): if x.count("\n") < 2: raise errors.ValidationError("", reason="Some bad reason") return True question = questions.Editor(variable, validate=val, message=message) sut = ConsoleRender(event_generator=helper.event_factory(*stdin)) result = sut.render(question) self.assertEqual(expected, result) self.assertInStdout(message) self.assertInStdout("Some bad reason") self.assertTrue(edit.called)
def test_cursor_movement(self): stdin_array = [ "a", key.UP, "b", key.DOWN, "c", key.LEFT, "d", key.RIGHT, "e", key.ENTER, ] stdin = helper.event_factory(*stdin_array) message = "Foo message" variable = "Bar variable" question = questions.Text(variable, message) sut = ConsoleRender(event_generator=stdin) result = sut.render(question) self.assertEqual("abdce", result)