private static bool ConvertInput(InputItem item, IConsoleAdapter consoleOut, out object value, string input)
        {
            if (item.ReadInfo != null && item.ReadInfo.Options.Any())
                return SelectOption(input, item.ReadInfo.Options, consoleOut, out value);

            return ConvertString(input, item.Type, consoleOut, out value);
        }
 private static string MakeSelectPrompt(InputItem item, string prompt)
 {
     var options = item.ReadInfo.Options.Select(MakeOptionText);
     var optionString = string.Format("[{0}]", string.Join(", ", options));
     var displayPrompt = string.Format("{0}{1}{2}",
         prompt,
         string.IsNullOrWhiteSpace(prompt) ? string.Empty : " ",
         optionString);
     return AddPromptSuffix(displayPrompt);
 }
        internal static string FromItem(InputItem item)
        {
            if (item.ReadInfo == null)
                return AddPromptSuffix(PropertyNameConverter.ToPrompt(item.Property));

            var prompt = item.ReadInfo.Prompt ?? PropertyNameConverter.ToPrompt(item.Property);

            if (item.ReadInfo.Options.Any())
                return MakeOptionsPrompt(item, prompt);

            return AddPromptSuffix(prompt);
        }
        public void InteractiveInputContinuesUntilGoodInputReceived()
        {
            _interface.SetInputStream(_goodStream);
            var item = new InputItem
            {
                Name = "IntVal",
                Property = IntProp,
                Type = typeof(int),
                ReadInfo = Read.Int().Prompt("prompt")
            };

            ReadInputItem.GetValue(item, _interface, _adapter);
            Approvals.Verify(_interface.GetBuffer());
        }
        private static bool ApplyValidations(InputItem item, object value, IConsoleAdapter consoleOut)
        {
            if (item.ReadInfo != null)
            {
                var error = item.ReadInfo.GetValidationError(value);
                if (error != null)
                {
                    consoleOut.WrapLine(error);
                    return false;
                }
            }

            return true;
        }
        public void ErrorIsDisplayedWhenInputIsInvalid()
        {
            _interface.SetInputStream(_goodStream);
            _interface.InputIsRedirected = true;
            var item = new InputItem
            {
                Name = "IntVal",
                Property = IntProp,
                Type = typeof(int),
                ReadInfo = Read.Int().Prompt("prompt")
            };

            ReadInputItem.GetValue(item, _interface, _adapter);
            Approvals.Verify(_interface.GetBuffer());
        }
        private static string MakeMenuPrompt(InputItem item, string prompt)
        {
            var promptBuilder = new StringBuilder();
            if (item.ReadInfo.MenuHeading != null)
            {
                promptBuilder.AppendLine(item.ReadInfo.MenuHeading);
                promptBuilder.AppendLine();
            }

            foreach (var option in item.ReadInfo.Options)
                promptBuilder.AppendLine(MakeOptionText(option));

            promptBuilder.AppendLine();
            promptBuilder.Append(AddPromptSuffix(prompt));
            return promptBuilder.ToString();
        }
        public void NoPropertyInfoGivesNoPromptText()
        {
            //Arrange
            var inputItem = new InputItem
            {
                Name = "IntVal",
                Property = null,
                Type = typeof(int)
            };

            //Act
            var result = ConstructPromptText.FromItem(inputItem);

            //Assert
            Assert.That(result, Is.EqualTo(": "));
        }
        public void InvalidReadReturnsFalse()
        {
            //Arrange
            _interface.SetInputStream(MakeStream(new[] { "text" }));
            _interface.InputIsRedirected = true;
            var item = new InputItem
            {
                Name = "IntVal",
                Property = IntProp,
                Type = typeof(int)
            };

            //Act
            object value;
            var result = ReadValue.UsingReadLine(item, _interface, _adapter, out value);

            //Assert
            Assert.That(result, Is.False);
        }
        public void ErrorIsDisplayedWhenInputIsInvalid()
        {
            //Arrange
            _interface.SetInputStream(MakeStream(new[] { "text" }));
            _interface.InputIsRedirected = true;
            var item = new InputItem
            {
                Name = "IntVal",
                Property = IntProp,
                Type = typeof(int),
                ReadInfo = Read.Int().Prompt("prompt")
            };

            //Act
            object value;
            ReadValue.UsingReadLine(item, _interface, _adapter, out value);

            //Assert
            Approvals.Verify(_interface.GetBuffer());
        }
        public void NoPropertyInfoOnMenuGivesMenuText()
        {
            //Arrange
            var inputItem = new InputItem
            {
                Name = "IntVal",
                Property = null,
                Type = typeof(int),
                ReadInfo = Read.Int().Option(4, "A", "Four").Option(10, "B", "Ten").AsMenu("No Property")
            };

            //Act
            var result = ConstructPromptText.FromItem(inputItem);

            //Assert
            var expected = @"No Property

            A-Four
            B-Ten

            : ";
            Assert.That(result, Is.EqualTo(expected));
        }
        public void ValidationsAreApplied()
        {
            _interface.SetInputStream(_validationStream);
            var item = new InputItem
            {
                Name = "IntVal",
                Property = IntProp,
                Type = typeof(int),
                ReadInfo = Read.Int().Validate(i => i > 10, "Value must be greater than 10")
            };

            ReadInputItem.GetValue(item, _interface, _adapter);
            var value = ((Read<int>)item.Value).Value;
            Assert.That(value, Is.EqualTo(11));
        }
        public void ValidationErrorMessageIsDisplayed()
        {
            _interface.SetInputStream(_validationStream);
            var item = new InputItem
            {
                Name = "IntVal",
                Property = IntProp,
                Type = typeof(int),
                ReadInfo = Read.Int().Validate(i => i > 10, "Value must be greater than 10")
            };

            ReadInputItem.GetValue(item, _interface, _adapter);
            Approvals.Verify(_interface.GetBuffer());
        }
        public void TextIsConvertedToRequiredType()
        {
            _interface.SetInputStream(_goodStream);
            var item = new InputItem
            {
                Name = "IntVal",
                Property = IntProp,
                Type = typeof(int)
            };

            ReadInputItem.GetValue(item, _interface, _adapter);
            Assert.That(item.Value, Is.EqualTo(45));
        }
        public void StringCanBeRead()
        {
            _interface.SetInputStream(_goodStream);
            var item = new InputItem
            {
                Name = "StringVal",
                Property = StringProp,
                Type = typeof(string)
            };

            ReadInputItem.GetValue(item, _interface, _adapter);
            Assert.That(item.Value, Is.EqualTo("text"));
        }
        public void OptionInputIsNotCaseSensitive()
        {
            //Arrange
            _interface.SetInputStream(MakeStream(new[] { "c" }));
            var item = new InputItem
            {
                Name = "IntVal",
                Property = IntProp,
                Type = typeof(int),
                ReadInfo = Read.Int().Prompt("prompt")
                    .Option(100, "B", "First")
                    .Option(200, "C", "Second")
                    .Option(300, "D", "Third")
            };

            //Act
            object value;
            ReadValue.UsingReadLine(item, _interface, _adapter, out value);

            //Assert
            Assert.That(value, Is.EqualTo(200));
        }
        public void ValidReadReturnsTrue()
        {
            //Arrange
            _interface.SetInputStream(MakeStream(new[] { "text" }));
            var item = new InputItem
            {
                Name = "StringVal",
                Property = StringProp,
                Type = typeof(string)
            };

            //Act
            object value;
            var result = ReadValue.UsingReadLine(item, _interface, _adapter, out value);

            //Assert
            Assert.That(result, Is.True);
        }
 private static string MakeOptionsPrompt(InputItem item, string prompt)
 {
     return !item.ReadInfo.ShowAsMenu
         ? MakeSelectPrompt(item, prompt)
         : MakeMenuPrompt(item, prompt);
 }
        public void PromptIsTakenFromPropertyInfo()
        {
            //Arrange
            var inputItem = new InputItem
            {
                Name = "IntVal",
                Property = IntProp,
                Type = typeof(int),
                ReadInfo = Read.Int().Prompt("My prompt")
            };

            //Act
            var result = ConstructPromptText.FromItem(inputItem);

            //Assert
            Assert.That(result, Is.EqualTo("My prompt: "));
        }
        public void PromptIsAutomaticallyDerivedFromPropertyName()
        {
            //Arrange
            var inputItem = new InputItem
            {
                Name = "IntVal",
                Property = IntProp,
                Type = typeof(int)
            };

            //Act
            var result = ConstructPromptText.FromItem(inputItem);

            //Assert
            Assert.That(result, Is.EqualTo("Int Val: "));
        }
        public void PromptCanDisplaySelectionAsMenu()
        {
            //Arrange
            var inputItem = new InputItem
            {
                Name = "IntVal",
                Property = IntProp,
                Type = typeof(int),
                ReadInfo = Read.Int().Option(4, "A", "Four").Option(10, "B", "Ten")
                .AsMenu("Which value?")
            };

            //Act
            var result = ConstructPromptText.FromItem(inputItem);

            //Assert
            var expected = @"Which value?

            A-Four
            B-Ten

            Int Val: ";
            Assert.That(result, Is.EqualTo(expected));
        }
        public void ValidReadReturnsTrue()
        {
            _interface.SetInputStream(_stringOnlyStream);
            var item = new InputItem
            {
                Name = "StringVal",
                Property = StringProp,
                Type = typeof(string)
            };

            Assert.That(ReadInputItem.GetValue(item, _interface, _adapter), Is.True);
        }
        public void ValidationPassSetsValue()
        {
            //Arrange
            _interface.SetInputStream(MakeStream(new[] { "11" }));
            var item = new InputItem
            {
                Name = "IntVal",
                Property = IntProp,
                Type = typeof(int),
                ReadInfo = Read.Int().Validate(i => i > 10, "Value must be greater than 10")
            };

            //Act
            object value;
            ReadValue.UsingReadLine(item, _interface, _adapter, out value);

            //Assert
            Assert.That(value, Is.EqualTo(11));
        }
        public void OptionsCanBeSpecified()
        {
            _interface.SetInputStream(_selectStream);
            var item = new InputItem
            {
                Name = "IntVal",
                Property = IntProp,
                Type = typeof(int),
                ReadInfo = Read.Int().Prompt("prompt")
                .Option(1, "1", "First")
                .Option(2, "2", "Second")
                .Option(3, "3", "Third")
            };

            ReadInputItem.GetValue(item, _interface, _adapter);
            Approvals.Verify(_interface.GetBuffer());
        }
        public void InvalidReadReturnsFalse()
        {
            _interface.SetInputStream(_stringOnlyStream);
            _interface.InputIsRedirected = true;
            var item = new InputItem
            {
                Name = "IntVal",
                Property = IntProp,
                Type = typeof(int)
            };

            Assert.That(ReadInputItem.GetValue(item, _interface, _adapter), Is.False);
        }
        public void PromptIsDisplayed()
        {
            _interface.SetInputStream(_goodStream);
            var item = new InputItem
            {
                Name = "StringVal",
                Property = StringProp,
                Type = typeof(string),
                ReadInfo = Read.String().Prompt("prompt")
            };

            ReadInputItem.GetValue(item, _interface, _adapter);
            Approvals.Verify(_interface.GetBuffer());
        }
        public void NoPropertyInfoOnSelectionGivesSelectionText()
        {
            //Arrange
            var inputItem = new InputItem
            {
                Name = "IntVal",
                Property = null,
                Type = typeof(int),
                ReadInfo = Read.Int().Option(4, "A", "Four").Option(10, "B", "Ten")
            };

            //Act
            var result = ConstructPromptText.FromItem(inputItem);

            //Assert
            Assert.That(result, Is.EqualTo("[A-Four, B-Ten]: "));
        }
Exemple #28
0
 internal static bool UsingReadLine(InputItem item, IConsoleInInterface consoleIn, IConsoleAdapter consoleOut, out object value)
 {
     var input = consoleIn.ReadLine();
     return ConvertInput(item, consoleOut, out value, input)
            && ApplyValidations(item, value, consoleOut);
 }
        public void OptionIsSelected()
        {
            _interface.SetInputStream(_selectStream);
            var item = new InputItem
            {
                Name = "IntVal",
                Property = IntProp,
                Type = typeof(int),
                ReadInfo = Read.Int().Prompt("prompt")
                .Option(100, "B", "First")
                .Option(200, "C", "Second")
                .Option(300, "D", "Third")
            };

            ReadInputItem.GetValue(item, _interface, _adapter);
            var value = ((Read<int>)item.Value).Value;
            Assert.That(value, Is.EqualTo(200));
        }
        public void ValidationErrorMessageIsDisplayed()
        {
            //Arrange
            _interface.SetInputStream(MakeStream(new[] { "10" }));
            var item = new InputItem
            {
                Name = "IntVal",
                Property = IntProp,
                Type = typeof(int),
                ReadInfo = Read.Int().Validate(i => i > 10, "Value must be greater than 10")
            };

            //Act
            object value;
            ReadValue.UsingReadLine(item, _interface, _adapter, out value);

            //Assert
            Approvals.Verify(_interface.GetBuffer());
        }