public void Parse_MoreThanOneOptionValue_ShouldAddError()
        {
            var parser = new StringOptionParser(typeof(DataTypesCommandOptions).GetProperty("String"), "string");

            var tokens = new List <Token>
            {
                new OptionToken("string")
                {
                    OptionValues = { "value1", "value2" }
                }
            };

            var parseResult = new ParseResult();

            parseResult.CommandOptions = new DataTypesCommandOptions();

            parser.Parse(tokens, parseResult);

            parseResult.HasErrors.Should().BeTrue();
            parseResult.Errors.Should().HaveCount(1);
            parseResult.Errors[0].Should().BeOfType <OptionMultipleValuesError>();

            var error = (OptionMultipleValuesError)parseResult.Errors[0];

            error.OptionName.Should().Be("string");
            error.GetErrorMessage().Should().Be("Multiple values are given for the option --string, but the option expects a single value.");
        }
        public void Parse_OptionNotPresent_ShouldAssignDefaultValueToTargetProperty()
        {
            var parser = new StringOptionParser(typeof(DataTypesCommandOptions).GetProperty("String"), "string");

            parser.OptionDefaultValue = "value";

            var tokens                  = new List <Token>();
            var parseResult             = new ParseResult();
            var dataTypesCommandOptions = new DataTypesCommandOptions();

            parseResult.CommandOptions = dataTypesCommandOptions;

            parser.Parse(tokens, parseResult);

            dataTypesCommandOptions.String.Should().Be("value");
        }
        public void Parse_ValidValue_ShouldParseAndAssignValueToTargetProperty()
        {
            var parser = new StringOptionParser(typeof(DataTypesCommandOptions).GetProperty("String"), "string");

            var tokens = new List <Token>
            {
                new OptionToken("string")
                {
                    OptionValues = { "value" }
                }
            };
            var parseResult             = new ParseResult();
            var dataTypesCommandOptions = new DataTypesCommandOptions();

            parseResult.CommandOptions = dataTypesCommandOptions;

            parser.Parse(tokens, parseResult);

            dataTypesCommandOptions.String.Should().Be("value");
        }
        public void Parse_RequiredOptionMissing_ShouldAddError()
        {
            var parser = new StringOptionParser(typeof(DataTypesCommandOptions).GetProperty("String"), "string");

            parser.IsOptionRequired = true;

            var tokens      = new List <Token>();
            var parseResult = new ParseResult();

            parseResult.CommandOptions = new DataTypesCommandOptions();

            parser.Parse(tokens, parseResult);

            parseResult.HasErrors.Should().BeTrue();
            parseResult.Errors.Should().HaveCount(1);
            parseResult.Errors[0].Should().BeOfType <OptionMissingError>();

            var error = (OptionMissingError)parseResult.Errors[0];

            error.OptionName.Should().Be("string");
            error.GetErrorMessage().Should().Be("The option --string is required.");
        }
        public void Parse_OptionValueMissing_ShouldAddError()
        {
            var parser = new StringOptionParser(typeof(DataTypesCommandOptions).GetProperty("String"), "string");

            var tokens = new List <Token>
            {
                new OptionToken("string")
            };

            var parseResult = new ParseResult();

            parseResult.CommandOptions = new DataTypesCommandOptions();

            parser.Parse(tokens, parseResult);

            parseResult.HasErrors.Should().BeTrue();
            parseResult.Errors.Should().HaveCount(1);
            parseResult.Errors[0].Should().BeOfType <OptionValueMissingError>();

            var error = (OptionValueMissingError)parseResult.Errors[0];

            error.OptionName.Should().Be("string");
            error.GetErrorMessage().Should().Be("The option --string requires a value, but no value was specified.");
        }