Example #1
0
File: Tests.cs Project: vokhub/Arqs
        public void Test1()
        {
            var args =
                from h    in Arg.Flag("h")
                join v    in Arg.Flag("V") on 1 equals 1
                join vl   in Arg.CountedFlag("verbose").ShortName('v') on 1 equals 1
                join foo  in Arg.Option("foo", -1, Parser.Int32()).List() on 1 equals 1
                join bar  in Arg.Flag("bar")  on 1 equals 1
                join baz  in Arg.Option("baz", Parser.Int32().Nullable())  on 1 equals 1
                join qux  in Arg.Option("qux", "?", Parser.String()) on 1 equals 1
                join opt1 in Arg.Option("opt-1", "?", Parser.String()).ShortName('o').DefaultValue().List() on 1 equals 1
                join opt2 in Arg.Option("opt-2", "?", Parser.String()).DefaultValue() on 1 equals 1
                join opt3 in Arg.Option("opt-3", "?", Parser.String()).DefaultValue() on 1 equals 1
                join opt4 in Arg.Option("opt-4", Parser.String()).DefaultValue() on 1 equals 1
                join xs   in Arg.Option("x", Parser.String()).List() on 1 equals 1
                join @int in Arg.IntOpt("int") on 1 equals 1
                join pos1 in Arg.Operand("x", Parser.String()) on 1 equals 1
                join pos2 in Arg.Operand("x", Parser.String()) on 1 equals 1
                join flag in Arg.Flag("f").List() on 1 equals 1
                join m    in Arg.Macro("macro", s => "-v there".Split()) on 1 equals 1
                join page in Arg.Flag("p|page").Negatable(true).List() on 1 equals 1
                select new
            {
                Verbosity = vl,
                Foo       = foo,
                Bar       = bar,
                Baz       = baz,
                Qux       = qux,
                Opt1      = opt1,
                Opt2      = opt2,
                Opt3      = opt3,
                Opt4      = opt4,
                X         = string.Join(",", xs),
                Int       = @int,
                Pos1      = pos1,
                Pos2      = pos2,
                Flag      = flag,
                Macro     = m,
                Page      = page,
            };

            var commandLine = @"
                1 --bar -v -v -v --foo 4 2 hello
                -ofoo -obar -o --opt-1=baz -vo -vovo
                @some_macro
                --foo 2 -x one -42 -x two - world -x three -xfour
                -f -f -ff -f+ -f- -f-f+ -f+f- -ff- -f+vf-
                -v- --verbose --verbose+ --verbose-
                -p --page -p+ -p- --no-page
                --opt-2 --opt-3=foo
                "
                              .Split((char[])null, StringSplitOptions.RemoveEmptyEntries);

            var(result, tail) =
                CommandLine.Bind(args, commandLine);

            Assert.That(result.Verbosity, Is.EqualTo(7));
            Assert.That(result.Foo, Is.EqualTo(new[] { 4, 2 }));
            Assert.That(result.Bar, Is.True);
            Assert.That(result.Baz, Is.Null);
            Assert.That(result.Qux, Is.EqualTo("?"));
            Assert.That(result.Opt1, Is.EqualTo(new[] { (true, "foo"), (true, "bar"), (true, "?"), (true, "baz"), (true, "?"), (true, "vo") }));