private static void AssertNamed(CliOptions pOptions, string pPattern)
        {
            Description desc = DescriptionFactory.Parse(pOptions, new MockHelpProvider(), pPattern);

            Assert.AreEqual(eROLE.NAMED, desc.Role);

            AssertTypes(pOptions, pPattern);
        }
        private static void AssertMultiple(CliOptions pOptions, string pPattern)
        {
            Description desc = DescriptionFactory.Parse(pOptions, new MockHelpProvider(), pPattern);

            Assert.AreEqual(eMULTIPLICITY.MULTIPLE, desc.Multiplicity);

            AssertOptional(pOptions, "[" + pPattern + "]");
        }
        private static void AssertType <T>(CliOptions pOptions, string pPattern)
        {
            Description desc = DescriptionFactory.Parse(pOptions, new MockHelpProvider(), pPattern);

            Assert.IsNotNull(desc.Type);
            Assert.IsTrue(desc.Type is T);

            AssertMultiple(pOptions, pPattern + "#");
            AssertOptional(pOptions, "[" + pPattern + "]");
        }
        private static void AssertParsable(CliOptions pOptions, string pName)
        {
            Description desc = DescriptionFactory.Parse(pOptions, new MockHelpProvider(), pName);

            Assert.AreEqual(pName, desc.Name);
            Assert.AreEqual(eSCOPE.REQUIRED, desc.Scope);
            Assert.AreEqual(eMULTIPLICITY.ONCE, desc.Multiplicity);

            AssertPassed(pOptions, pName);
            AssertNamed(pOptions, pOptions.Prefix + pName);
        }
        public void Parse_1()
        {
            string[] invalidStrings =
            {
                "/debug#", "",  "/",     "[]", "[/debug", "/debug]", "/debug:xxxx", "xxx:xxx",
                "[:xxx]",  ":", "23473", "1abc"
            };

            foreach (string invalid in invalidStrings)
            {
                try
                {
                    Description desc = DescriptionFactory.Parse(CliOptions.WindowsStyle, new MockHelpProvider(),
                                                                invalid);
                    Assert.Fail("Expected SyntaxErrorException for {0}", invalid);
                }
                catch (SyntaxErrorException)
                {
                }
            }
        }
        private static void AssertOptional(CliOptions pOptions, string pPattern)
        {
            Description desc = DescriptionFactory.Parse(pOptions, new MockHelpProvider(), pPattern);

            Assert.AreEqual(eSCOPE.OPTIONAL, desc.Scope);
        }