Пример #1
0
        public void TestOptionWithQuotedStringNotFullMatch(string input)
        {
            ICommandArgumentToken <string> .ValueParser trivialStringParser = (string i, out string v) => { v = i; return(true); };

            ArgumentToken arg1 = new ArgumentToken <string> .Builder().Name("arg1").Parser(trivialStringParser).Build();

            ArgumentToken arg2 = new ArgumentToken <string> .Builder().Name("arg2").Parser(trivialStringParser).Build();

            ArgumentToken arg3 = new ArgumentToken <string> .Builder().Name("arg3").Parser(trivialStringParser).Build();

            var token = new OptionWithArgumentToken.Builder()
                        .Name("option", "alt1", "alt2")
                        .WithArgument(arg1)
                        .WithArgument(arg2)
                        .WithArgument(arg3)
                        .Build();

            ICommandUsage usage = new CommandUsage.Builder().WithToken(token).Build();

            TokenMatchCollection matchCollection = CommandParser.Match(usage.Tokens, input);

            Assert.True(matchCollection.Matches.Count() == 1);
            ParserTokenMatch match = matchCollection.Matches.First();

            Assert.False(match.IsFullMatch, input);
        }
        [InlineData(new [] { "a" }, 0, MatchOutcome.Partial, 0)]                        //not enough
        public void TestOptionWithArgumentsMatches(string[] input, int startIdx, MatchOutcome expMatchLength, int expNumMatchTokens)
        {
            ArgumentToken arg1 = new ArgumentToken <int> .Builder().Name("arg1").Parser(int.TryParse).Build();

            var token = new OptionWithArgumentToken.Builder()
                        .Name("option", "alt1", "alt2")
                        .WithArgument(arg1)
                        .Build();

            TokenMatchResult matchResult = token.Matches(input, startIdx);

            Assert.True(expMatchLength == matchResult.MatchOutcome, $"Failed in case \"{input}\"");
            Assert.Equal(expNumMatchTokens, matchResult.TokensMatched);
        }
        public void TestOptionWithArgumentsTokenConstruction()
        {
            ArgumentToken arg1 = new ArgumentToken <int> .Builder().Name("arg1").Parser(int.TryParse).Build();

            Name name  = new Name("option", "alt1", "alt2");
            var  token = new OptionWithArgumentToken.Builder()
                         .Name("option", "alt1", "alt2")
                         .WithArgument(arg1)
                         .Build();

            Assert.Equal(name, token.Name);
            Assert.Equal("(option|alt1|alt2) <arg1>", token.DisplayName);
            Assert.True(token.IsOptional);
            Assert.Equal(TokenKind.OptionWithArgument, token.Kind);
            Assert.Equal(1, token.Arguments.Length);
            Assert.Same(arg1, token.Arguments[0]);
        }