public void TestBasicParsing()
        {
            ArgumentsBasicTarget target = new ArgumentsBasicTarget();
            CommandLineParser parser = new CommandLineParser(typeof(ArgumentsBasic), null, CommandLineParserFlags.Default);
            string[] args = new string[]
            {
                "-arg1:valueForArg1",
                "-a2:One",
                "-arg2:Two",
                "-arg3:Alpha",
                "-arg3:Beta",
                "-arg4+",
                "-arg5:10",
                "-arg7:a=1;b=2",
                "-arg8:blah.txt",
                "-arg9:blah.txt",
                "something.txt"
            };

            parser.ParseAndSetTarget(args, target);

            Assert.AreEqual(target.Arg1, "valueForArg1");
            CollectionAssert.AreEqual(new string[] { "One", "Two" }, target.Arg2);
            CollectionAssert.AreEqual(new string[] { "Alpha", "Beta" }, target.Arg3);
            Assert.AreEqual(true, target.Arg4);
            Assert.AreEqual(10, target.Arg5);
            Assert.AreEqual(false, target.Arg6);
            CollectionAssert.AreEquivalent(new KeyValuePair<string, string>[]
                { new KeyValuePair<string, string>("a", "1"), new KeyValuePair<string, string>("b", "2") }, target.Arg7.Parameters);
            Assert.AreEqual("blah.txt", target.Arg8.ToString());
            Assert.AreEqual("blah.txt", target.Arg9.ToString());
            Assert.AreEqual(11, parser.ArgumentCount);
            Assert.AreEqual(" -arg1:valueForArg1 -arg2:One -arg2:Two -arg3:Alpha -arg3:Beta -arg4 -arg5:10 -arg7:a=1;b=2 -arg8:blah.txt -arg9:blah.txt something.txt", parser.Arguments);
        }
        public void TestBadCommandArgument()
        {
            string[] args = { "start", "-arg1" };

            CommandLineParser parser = new CommandLineParser(typeof(ArgumentsWithCommand));

            parser.Parse(args);
        }
        public void TestBadCommand()
        {
            ArgumentsWithCommand target = new ArgumentsWithCommand();
            CommandLineParser parser = new CommandLineParser(target.GetType());
            string[] args = { "unknown" };

            parser.Parse(args);
        }
        public void TestUsage()
        {
            CommandLineParser parser = new CommandLineParser(typeof(ArgumentsBasic), CommandLineParserFlags.Default);

            string usage = parser.Usage;

            Assert.IsTrue(Regex.IsMatch(usage,
                @"Syntax:\s*.+? \[switches\] <default>\r\n\r\nDescription:\s*.*\r\n\r\nSwitches:\r\n\r\n(^(/\w+)|(\s+).*\r\n)+(.*\r\n)+",
                RegexOptions.Multiline | RegexOptions.ExplicitCapture));

            parser.CommandName = "AnythingYouWant";

            Assert.AreEqual(parser.CommandName, "AnythingYouWant");

            // Test multiple default arguments
            parser = new CommandLineParser(typeof(ArgumentsMultiDefaultNoArgs), null, CommandLineParserFlags.Default);

            Assert.IsTrue(Regex.IsMatch(parser.Usage,
                @"Syntax:\s*.+? <file> \[<file> \.\.\.\]",
                RegexOptions.Multiline | RegexOptions.ExplicitCapture));

            // Test command based command line
            parser = new CommandLineParser(typeof(ArgumentsWithCommand));

            // Capture the value or it's really hard to debug...
            usage = parser.GetUsage(null, 79);

            Debug.WriteLine(usage);

            Assert.IsTrue(Regex.IsMatch(usage,
                @"Syntax:\s*.+? <command> \.\.\.\r\n\r\nDescription:\s*.+\r\n\r\nCommands:\r\n\r\n((^  \w+\s+\S+\r\n)|(^\s+.+\r\n))+(^\s+.+)",
                RegexOptions.Multiline | RegexOptions.ExplicitCapture));

            // Get usage for individual command
            usage = parser.GetUsage("start", 79);

            Debug.WriteLine(usage);

            Assert.IsTrue(Regex.IsMatch(usage,
                @"Syntax:\s*.+? start \[switches\] <default>\r\n\r\nDescription:\s*.+\r\n(^\s+.+\r\n)+\r\nSwitches:\r\n\r\n((^  \w+\s+\S+\r\n)|(^\s+.+\r\n))+(^\s+.+)",
                RegexOptions.Multiline | RegexOptions.ExplicitCapture));

            ArgumentsWithCommand target = new ArgumentsWithCommand();
            string[] args = { "help", "unknown" };

            parser.ParseAndSetTarget(args, target);

            Assert.AreEqual("help", target.Command);
            Assert.AreEqual("unknown", target.Default);

            try
            {
                parser.GetUsage(target.Default);
            }
            catch (Exception e)
            {
                Assert.IsInstanceOf(typeof(CommandLineArgumentException), e);
            }
        }
        public void TestUnprocessedArgs()
        {
            ArgumentsUnprocessedPart target = new ArgumentsUnprocessedPart();
            CommandLineParser parser = new CommandLineParser(
                typeof(ArgumentsUnprocessedPart));

            string[] args = new string[]
            {
                "/arg:blah", "thing", "gomez", "/morestuff"
            };

            parser.ParseAndSetTarget(args, target);

            Assert.AreEqual("blah", target.Arg);
            Assert.AreEqual("thing", target.Default);
            CollectionAssert.AreEqual(new string[] { "gomez", "/morestuff" }, target.Unprocessed);
        }
        public void TestParsingFromResources()
        {
            ArgumentsFromResources target = new ArgumentsFromResources();
            CommandLineParser parser = new CommandLineParser(
                typeof(ArgumentsFromResources), typeof(CommandLineParserTestsResources));
            string[] args = new string[] { "-a:file.txt" };

            parser.ParseAndSetTarget(args, target);

            Assert.AreEqual("file.txt", target.File);
            Assert.IsTrue(Regex.IsMatch(parser.Usage,
                @"Syntax:\s+.+? \[switches\]\r\n\r\nSwitches:\r\n\r\n(^  -\w+.*)",
                RegexOptions.Multiline | RegexOptions.ExplicitCapture));
        }
        public void TestMultiDefaultArgs()
        {
            ArgumentsMultiDefaultNoArgs target = new ArgumentsMultiDefaultNoArgs();
            CommandLineParser parser = new CommandLineParser(typeof(ArgumentsMultiDefaultNoArgs), null, CommandLineParserFlags.Default);
            string[] args = new string[] { "one", "two"};

            parser.ParseAndSetTarget(args, target);

            CollectionAssert.AreEqual(new string[] { "one", "two" }, target.Default);
        }
        public void TestLogoBanner()
        {
            Regex regex = new Regex(
                @"^Command Line Program\. (Debug|Release) Version \d+\.\d+\.\d+\.\d+\r\nCopyright \(c\) John Lyon-Smith\.\r\n",
                RegexOptions.Multiline | RegexOptions.ExplicitCapture);

            CommandLineParser parser = new CommandLineParser(typeof(ArgumentsBasic), null, CommandLineParserFlags.Default);

            string logoBanner = parser.LogoBanner;

            Assert.IsTrue(regex.IsMatch(logoBanner));

            parser.Copyright = "Copyright (c) Another Corporation";
            parser.Title = "Another Command Line Program";
            parser.Configuration = "Release";
            parser.Version = "2.0.0.0";

            logoBanner = parser.LogoBanner;

            regex = new Regex(
                @"^.+?\. Release Version \d+\.\d+\.\d+\.\d+\r\nCopyright \(c\) .+?\.\r\n",
                RegexOptions.Multiline | RegexOptions.ExplicitCapture);

            Assert.IsTrue(regex.IsMatch(logoBanner));

            // A parser with no attributes to get the code coverage
            parser = new CommandLineParser(typeof(ArgumentsForLogoBanner));

            logoBanner = parser.LogoBanner;

            regex = new Regex(
                @"^.+?\. (Debug|Release) Version \d+\.\d+\.\d+\.\d+\r\nCopyright \(c\) .+?\.\r\n",
                RegexOptions.Multiline | RegexOptions.ExplicitCapture);

            Assert.IsTrue(regex.IsMatch(logoBanner));
        }
        public void TestGetTarget()
        {
            ArgumentsBasicTarget target = new ArgumentsBasicTarget();
            CommandLineParser parser = new CommandLineParser(typeof(ArgumentsBasic), null, CommandLineParserFlags.Default);

            target.Arg1 = "valueForArg1";
            target.Arg2 = new string[] { "One", "Two" };

            List<string> arg3 = new List<string>();
            arg3.Add("Alpha");
            arg3.Add("Beta");

            target.Arg3 = arg3;
            target.Arg4 = true;
            target.Arg5 = 10;
            target.Arg6 = false;

            CustomType arg7 = new CustomType();

            arg7.Parameters.Add("a", "1");
            arg7.Parameters.Add("b", "2");

            target.Arg7 = arg7;
            target.Arg8 = new FileInfo("blah.txt");
            target.Arg9 = new ParsedPath("blah.txt", PathType.File);
            target.Default = "something.txt";

            parser.GetTargetArguments(target);

            // NOTE: Not setting arguments #10 and #11

            Assert.AreEqual(13, parser.ArgumentCount);
            Assert.AreEqual(" -arg1:valueForArg1 -arg2:One -arg2:Two -arg3:Alpha -arg3:Beta -arg4 -arg5:10 -arg7:a=1;b=2 -arg8:blah.txt -arg9:blah.txt -arg11:0 something.txt", parser.Arguments);
        }
        public void TestCommands()
        {
            ArgumentsWithCommand target = new ArgumentsWithCommand();
            CommandLineParser parser = new CommandLineParser(typeof(ArgumentsWithCommand));
            string[] args1 = new string[]
            {
                "start",
                "default",
                "/arg2:blah"
            };

            parser.ParseAndSetTarget(args1, target);

            Assert.AreEqual("start", target.Command);
            Assert.AreEqual("default", target.Default);
            CollectionAssert.AreEquivalent(new string[] {"blah"}, target.Arg2);
        }
        public void TestCaseSensitiveParsing()
        {
            ArgumentsCaseSensitive target = new ArgumentsCaseSensitive();
            CommandLineParser parser = new CommandLineParser(typeof(ArgumentsCaseSensitive), null, CommandLineParserFlags.CaseSensitive);
            string[] args = new string[]
            {
                "/Tp:valueForArg1",
                "/TP:valueForArg2",
            };

            parser.ParseAndSetTarget(args, target);

            Assert.AreEqual(target.Arg1, "valueForArg1");
            Assert.AreEqual(target.Arg2, "valueForArg2");
        }
Beispiel #12
0
        bool IProcessCommandLine.ProcessCommandLine(string[] args)
        {
            runningFromCommandLine = true;

            CommandLineParser parser = new CommandLineParser(typeof(CsrTool), typeof(CsrResources));

            try
            {
                parser.ParseAndSetTarget(args, this);
            }
            catch (CommandLineArgumentException e)
            {
                Output.Error(e.Message);
                return false;
            }

            return true;
        }
        public void TestNullable()
        {
            ArgumentsBasicTarget target = new ArgumentsBasicTarget();
            CommandLineParser parser = new CommandLineParser(typeof(ArgumentsBasic), null, CommandLineParserFlags.Default);
            string[] args = new string[]
            {
                "-arg12:10"
            };

            parser.ParseAndSetTarget(args, target);
            Assert.AreEqual(10, target.Arg12);
        }