public void Parse_ValidValues_ShouldParseAndAssignToTargetProperty() { var valueParser = A.Fake <ValueParser>(); var parser = new EnumOptionParser <LogLevel>(typeof(DataTypesCommandOptions).GetProperty("Enum"), "logLevel"); parser.ValueParser = valueParser; var tokens = new List <Token> { new OptionToken("logLevel") { OptionValues = { "Debug" } } }; var parseResult = new ParseResult(); var dataTypesCommandOptions = new DataTypesCommandOptions(); parseResult.CommandOptions = dataTypesCommandOptions; LogLevel logLevel; A.CallTo(() => valueParser.TryParseEnum("Debug", out logLevel)) .Returns(true) .AssignsOutAndRefParameters(LogLevel.Debug); parser.Parse(tokens, parseResult); parseResult.HasErrors.Should().BeFalse(); parseResult.CommandOptions.Should().BeOfType <DataTypesCommandOptions>(); dataTypesCommandOptions.Enum.Should().Be(LogLevel.Debug); A.CallTo(() => valueParser.TryParseEnum("Debug", out logLevel)).MustHaveHappened(); }
public void Parse_MoreThanOneOptionValue_ShouldAddError() { var parser = new EnumOptionParser <LogLevel>(typeof(DataTypesCommandOptions).GetProperty("Enum"), "enum"); var tokens = new List <Token> { new OptionToken("enum") { OptionValues = { "Debug", "Trace" } } }; 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("enum"); error.GetErrorMessage().Should().Be("Multiple values are given for the option --enum, but the option expects a single value."); }
public void Parse_OptionNotPresent_ShouldAssignDefaultValueToTargetProperty() { var parser = new EnumOptionParser <LogLevel>(typeof(DataTypesCommandOptions).GetProperty("Enum"), "logLevel"); parser.OptionDefaultValue = LogLevel.Error; var tokens = new List <Token>(); var parseResult = new ParseResult(); var dataTypesCommandOptions = new DataTypesCommandOptions(); parseResult.CommandOptions = dataTypesCommandOptions; parser.Parse(tokens, parseResult); dataTypesCommandOptions.Enum.Should().Be(LogLevel.Error); }
public void Parse_RequiredOptionMissing_ShouldAddError() { var parser = new EnumOptionParser <LogLevel>(typeof(DataTypesCommandOptions).GetProperty("Enum"), "enum"); 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("enum"); error.GetErrorMessage().Should().Be("The option --enum is required."); }
public void Parse_OptionValueMissing_ShouldAddError() { var parser = new EnumOptionParser <LogLevel>(typeof(DataTypesCommandOptions).GetProperty("Enum"), "enum"); var tokens = new List <Token> { new OptionToken("enum") }; 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("enum"); error.GetErrorMessage().Should().Be("The option --enum requires a value, but no value was specified."); }
public void Parse_InvalidValue_ShouldAddError() { var valueParser = A.Fake <ValueParser>(); var parser = new EnumOptionParser <LogLevel>(typeof(DataTypesCommandOptions).GetProperty("Enum"), "logLevel"); parser.ValueParser = valueParser; var tokens = new List <Token> { new OptionToken("logLevel") { OptionValues = { "NonExistentLogLevel" } } }; var parseResult = new ParseResult(); parseResult.CommandOptions = new DataTypesCommandOptions(); LogLevel logLevel; A.CallTo(() => valueParser.TryParseEnum("NonExistentLogLevel", out logLevel)) .Returns(false); parser.Parse(tokens, parseResult); parseResult.HasErrors.Should().BeTrue(); parseResult.Errors.Should().HaveCount(1); parseResult.Errors[0].Should().BeOfType <OptionValueInvalidFormatError>(); var error = (OptionValueInvalidFormatError)parseResult.Errors[0]; error.OptionName.Should().Be("logLevel"); error.InvalidOptionValue.Should().Be("NonExistentLogLevel"); error.ExpectedValueFormat.Should().Be("One of the valid values (see help)"); error.GetErrorMessage().Should().Be("The value 'NonExistentLogLevel' of the option --logLevel has an invalid format. The expected format is: One of the valid values (see help)."); }