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): stdin_array = [key.CTRL_C] stdin = helper.key_factory(*stdin_array) message = 'Foo message' variable = 'Bar variable' question = questions.Text(variable, message) sut = ConsoleRender(key_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_invalid_answer(self): stdin = helper.event_factory('a', 'N') message = 'Foo message' variable = 'Bar variable' question = questions.Confirm(variable, message=message, default=True) sut = ConsoleRender(event_generator=stdin) with self.assertRaises(errors.ValidationError): 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.key_factory('a', 'N') message = 'Foo message' variable = 'Bar variable' question = questions.Confirm(variable, message=message, default=True) sut = ConsoleRender(key_generator=stdin) sut.render(question) self.assertInStdout('Invalid value')
def test_do_not_show_values(self): stdin = helper.key_factory( 'm', 'y', ' ', 'p', 'a', 's', 's', 'w', 'o', 'r', 'd', key.ENTER) message = 'Foo message' variable = 'Bar variable' question = questions.Password(variable, message) sut = ConsoleRender(key_generator=stdin) sut.render(question) self.assertInStdout(message) self.assertNotInStdout('my password')
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.Checkbox(variable, message, choices=choices) sut = ConsoleRender(event_generator=stdin) sut.render(question) self.assertInStdout(message) for choice in choices: self.assertInStdout(choice)
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_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.assertEquals('b', result)
def test_move_up(self): stdin = helper.key_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(key_generator=stdin) result = sut.render(question) self.assertEqual('foo', result)
def test_choose_the_second(self): stdin = helper.event_factory(key.DOWN, 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) self.assertEqual('bar', result)
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) self.assertEqual([], result)
def test_right_cursor_selects_too(self): stdin_array = [key.RIGHT, key.ENTER] stdin = helper.key_factory(*stdin_array) message = 'Foo message' variable = 'Bar variable' choices = ['foo', 'bar', 'bazz'] question = questions.Checkbox(variable, message, choices=choices) sut = ConsoleRender(key_generator=stdin) result = sut.render(question) self.assertEqual(['foo'], result)
def test_one_choice(self): stdin = helper.event_factory(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) self.assertEqual(['foo'], result)
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.assertEquals(stdin_msg, result) self.assertInStdout(message)
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_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_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_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_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_move_up_carousel(self): stdin = helper.event_factory(key.UP, key.ENTER) message = 'Foo message' variable = 'Bar variable' choices = ['foo', 'bar', 'bazz'] question = questions.List(variable, message, choices=choices, carousel=True) sut = ConsoleRender(event_generator=stdin) result = sut.render(question) self.assertEqual('bazz', result)
def test_no_as_default(self): stdin = helper.key_factory(key.ENTER) message = 'Foo message' variable = 'Bar variable' expected = False question = questions.Confirm(variable, message=message) sut = ConsoleRender(key_generator=stdin) result = sut.render(question) self.assertEquals(expected, result) self.assertInStdout(message) self.assertInStdout('(y/N)')
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_move_up_carousel(self): stdin = helper.event_factory(key.UP, key.ENTER) message = "Foo message" variable = "Bar variable" choices = ["foo", "bar", "bazz"] question = questions.List(variable, message, choices=choices, carousel=True) sut = ConsoleRender(event_generator=stdin) result = sut.render(question) self.assertEqual("bazz", result)
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_move_down_carousel(self): stdin = helper.event_factory(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, carousel=True) sut = ConsoleRender(event_generator=stdin) result = sut.render(question) assert result == ["bar"]
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() self.assertEqual(['bazz'], result)
def test_answring_n(self): stdin = helper.key_factory('n') message = 'Foo message' variable = 'Bar variable' expected = False question = questions.Confirm(variable, message=message, default=True) sut = ConsoleRender(key_generator=stdin) result = sut.render(question) self.assertEquals(expected, result) self.assertInStdout(message) self.assertInStdout('(Y/n)')
def test_ignore_true_should_return(self): stdin = 'This is a foo message' message = 'Foo message' variable = 'Bar variable' expected = object() question = questions.Text(variable, ignore=True, default=expected, message=message) sut = ConsoleRender(event_generator=stdin) result = sut.render(question) self.assertEquals(expected, result) self.assertNotInStdout(message)
def test_yes_as_default(self): stdin = helper.event_factory(key.ENTER) message = 'Foo message' variable = 'Bar variable' expected = True question = questions.Confirm(variable, message=message, default=True) sut = ConsoleRender(event_generator=stdin) result = sut.render(question) self.assertEquals(expected, result) self.assertInStdout(message) self.assertInStdout('(Y/n)')
def test_ignore_true_should_return(self): stdin = "This is a foo message" message = "Foo message" variable = "Bar variable" expected = "" question = questions.Text(variable, ignore=True, default=expected, message=message) sut = ConsoleRender(event_generator=stdin) result = sut.render(question) self.assertEqual(expected, result) self.assertNotInStdout(message)
def test_cannot_move_beyond_upper_limit(self): stdin = helper.event_factory( key.UP, key.UP, key.UP, 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.assertEqual(['foo'], result)
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): stdin_array = [x for x in 'Invalid' + key.ENTER + '9999' + key.ENTER] stdin = helper.key_factory(*stdin_array) message = 'Insert number' variable = 'foo' expected = '9999' question = questions.Text(variable, validate=lambda _, x: re.match('\d+', x), message=message) sut = ConsoleRender(key_generator=stdin) result = sut.render(question) self.assertEquals(expected, result) self.assertInStdout(message) self.assertInStdout('Invalid value')
def test_cannot_move_beyond_upper_limit(self): stdin = helper.event_factory( key.UP, key.UP, key.UP, 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.assertEqual(["foo"], result)
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('\d+', x), message=message) sut = ConsoleRender(event_generator=stdin) result = sut.render(question) self.assertEquals(expected, result) self.assertInStdout(message) self.assertInStdout('"Invalid" is not a valid foo')
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_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_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)
def test_ignore_cursors(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.assertEquals('abcde', result)
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.Password(variable, message) sut = ConsoleRender(event_generator=stdin) result = sut.render(question) self.assertEqual('abdce', result)
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_rendering_erroneous_type(self): question = questions.Question('foo', 'bar') sut = ConsoleRender() with self.assertRaises(errors.UnknownQuestionTypeError): sut.render(question)
def test_rendering_erroneous_type(self): question = questions.Question("foo", "bar") sut = ConsoleRender() with self.assertRaises(errors.UnknownQuestionTypeError): sut.render(question)