public void TestParamDisambiguation()
        {
            string[] args = "-f 1 -fo 2 -foo 3".Split(' ');

            var dest = new CommandTestObj();

            CmdLineArg[] Arguments = new CmdLineArg[] {
                new CmdLineArg()
                {
                    Flag = "f", DataType = typeof(int), PropertyName = "f"
                },
                new CmdLineArg()
                {
                    Flag = "fo", DataType = typeof(int), PropertyName = "fo"
                },
                new CmdLineArg()
                {
                    Flag = "foo", DataType = typeof(int), PropertyName = "foo"
                },
            };

            CmdLineJobBase cmds = new CmdLineJobBase();

            Assert.IsTrue(cmds.Load(args, Arguments, dest), "Load failed!");

            Assert.AreEqual(1, dest.f, "failed on 'f'");
            Assert.AreEqual(2, dest.fo, "failed on 'fo'");
            Assert.AreEqual(3, dest.foo, "failed on 'foo'");
        }
        public void TestTypeConversion()
        {
            string[] args = "-string abcdef ghijklmno pqrstuvwxyz -double 3.14159265359 -int 8".Split(' ');

            var dest = new CommandTestObj();

            CmdLineArg[] Arguments = new CmdLineArg[] {
                new CmdLineArg()
                {
                    Flag = "string", DataType = typeof(string), PropertyName = "str"
                },
                new CmdLineArg()
                {
                    Flag = "double", DataType = typeof(double), PropertyName = "dbl"
                },
                new CmdLineArg()
                {
                    Flag = "int", DataType = typeof(int), PropertyName = "it"
                },
            };

            CmdLineJobBase cmds = new CmdLineJobBase();

            Assert.IsTrue(cmds.Load(args, Arguments, dest), "Load failed!");

            Assert.AreEqual("abcdef ghijklmno pqrstuvwxyz", dest.str, "failed on string with spaces");
            Assert.AreEqual(3.14159265359, dest.dbl, "failed on double parsing");
            Assert.AreEqual(8, dest.it, "failed on integer parsing");
        }
        public void TestInvalidArguments()
        {
            string[] args = "-realarg abcde -realagr defghi ".Split(' ');

            var dest = new CommandTestObj();

            CmdLineArg[] Arguments = new CmdLineArg[] {
                new CmdLineArg()
                {
                    Flag = "realarg", DataType = typeof(string), PropertyName = "somefile"
                }
            };

            CmdLineJobBase cmds = new CmdLineJobBase();

            bool loadDidFail = cmds.Load(args, Arguments, dest);

            //switched this, nunit was being weird
            Assert.IsTrue(loadDidFail == false, "Load Succeeded???");  //assert should pass, load should fail
        }
        public void TestQuotesInArguments()
        {
            string[] args = "-somefile \"C:\\terrible path\\with spaces\\in-it\\terrible_filename.txt\" -another param ".Split(' ');

            var dest = new CommandTestObj();

            CmdLineArg[] Arguments = new CmdLineArg[] {
                new CmdLineArg()
                {
                    Flag = "somefile", DataType = typeof(string), PropertyName = "somefile"
                },
                new CmdLineArg()
                {
                    Flag = "another", DataType = typeof(string), PropertyName = "another"
                }
            };

            CmdLineJobBase cmds = new CmdLineJobBase();

            Assert.IsTrue(cmds.Load(args, Arguments, dest), "Load failed!");

            Assert.AreEqual("param", dest.another, "parameter after filename with hypens was clobbered");
            Assert.AreEqual("C:\\terrible path\\with spaces\\in-it\\terrible_filename.txt", dest.somefile, "failed on filename with quotes");
        }