Inheritance: CommandParserBase, IParseCommands
        public void Parse_CommandNameOnlyWithTrailingSpace()
        {
            // Arrange
            var parser = new OrderedCommandParser();
            parser.SetRoutes(_simpleRoute);

            var commandName = "";

            // Act
            var param = parser.Parse("ls ", out commandName);

            // Assert
            Assert.AreEqual(0, param.Count());
            Assert.AreEqual("ls", commandName);
        }
        public void Parse_OrderedCommandParser_HandlesSwitchesAndRoutesTheCommandCorrectly()
        {
            // Arrange
            var parser = new OrderedCommandParser();
            var commandName = "";

            parser.SetRoutes(_routing.GetRoutes());

            // Act
            var param = parser.Parse("ls c:\\ProgramFiles *.csv /s /switch", out commandName);
            var route = _routing.FindRoute(commandName, param);

            // Assert
            Assert.AreEqual("ls", commandName);
            Assert.AreEqual(4, param.Count); // two param and 2 switches

            Assert.IsNotNull(route);
            Assert.AreEqual("ls", route.Name);
        }
        public void Parse_OrderedCommandParser_AddsSwitchesToTheParamsCorrectly()
        {
            // Arrange
            var parser = new OrderedCommandParser();

            var commandName = "";
            parser.SetRoutes(_routing.GetRoutes());

            // Act
            var param = parser.Parse("ls c:\\ProgramFiles *.csv /s /switch", out commandName);
            var route = _routing.FindRoute(commandName, param);

            // Assert
            Assert.IsTrue(param.ContainsKey("/s"));
            Assert.IsTrue(param.ContainsKey("/switch"));

            Assert.IsNotNull(route);
            Assert.AreEqual("ls", route.Name);
        }
        public void Parse_WithSingleKeyValueParameter()
        {
            // Arrange
            var parser = new OrderedCommandParser();
            parser.SetRoutes(_singleParamRoute);

            var commandName = "";

            // Act
            var param = parser.Parse(@"ls c:\", out commandName);

            // Assert
            Assert.AreEqual(1, param.Count());
            Assert.AreEqual("ls", commandName);
        }
        public void Parse_TwoParamsButNoRoutesAndThrowsAnException()
        {
            // Arrange
            var parser = new OrderedCommandParser();

            var commandName = "";

            // Act
            var param = parser.Parse("ls c:\\ProgramFiles \"*.csv", out commandName);
        }
        public void Parse_TwoParamsSecondOneEscappedIncorrectlyAndThrowsAnException()
        {
            // Arrange
            var parser = new OrderedCommandParser();
            parser.SetRoutes(_twoParamRoute);

            var commandName = "";

            // Act
            var param = parser.Parse("ls c:\\ProgramFiles \"*.csv", out commandName);
        }
        public void Parse_TwoParamsSecondOneEscapped()
        {
            // Arrange
            var parser = new OrderedCommandParser();
            parser.SetRoutes(_twoParamRoute);

            var commandName = "";

            // Act
            var param = parser.Parse("ls c:\\ProgramFiles \"*.csv\"", out commandName);

            // Assert
            Assert.AreEqual(2, param.Count());
            Assert.AreEqual("path", param.Keys.First());
            Assert.AreEqual("c:\\ProgramFiles", param.Values.First());

            Assert.AreEqual("filter", param.Keys.Skip(1).Take(1).Single());
            Assert.AreEqual(@"*.csv", param.Values.Skip(1).Take(1).Single());
        }
        public void Parse_ParamsGetExtraSpacesTrimmed()
        {
            // Arrange
            var parser = new OrderedCommandParser();
            parser.SetRoutes(_singleParamRoute);

            var commandName = "";

            // Act
            var param = parser.Parse("ls  c:\\ProgramFiles\\", out commandName);

            // Assert
            Assert.AreEqual(1, param.Count());
            Assert.AreEqual("path", param.Keys.First());
            Assert.AreEqual("c:\\ProgramFiles\\", param.Values.First());
        }
        public void Parse_SingleEscappedParam()
        {
            // Arrange
            var parser = new OrderedCommandParser();
            parser.SetRoutes(_singleParamRoute);

            var commandName = "";

            // Act
            var param = parser.Parse("ls \"c:\\Program Files\"", out commandName);

            // Assert
            Assert.AreEqual(1, param.Count());
            Assert.AreEqual("path", param.Keys.First());
            Assert.AreEqual("c:\\Program Files", param.Values.First());
        }
        public void Parse_TwoParamAreSplitCorrectly()
        {
            // Arrange
            var parser = new OrderedCommandParser();
            parser.SetRoutes(_twoParamRoute);

            var commandName = "";

            // Act
            var param = parser.Parse(@"ls c:\ *.csv", out commandName);

            // Assert
            Assert.AreEqual(2, param.Count());
            Assert.AreEqual("path", param.Keys.First());
            Assert.AreEqual(@"c:\", param.Values.First());

            Assert.AreEqual("filter", param.Keys.Skip(1).Take(1).Single());
            Assert.AreEqual(@"*.csv", param.Values.Skip(1).Take(1).Single());
        }
        public void Parse_WithTwoParamsOptionalNotSpecified()
        {
            // Arrange
            var parser = new OrderedCommandParser();
            parser.SetRoutes(_twoParamWithOptionalRoute);

            var commandName = "";

            // Act
            var param = parser.Parse(@"ls c:\", out commandName);

            // Assert
            Assert.AreEqual(1, param.Count());
            Assert.AreEqual("ls", commandName);
        }
        public void Parse_WithTwoParameters()
        {
            // Arrange
            var parser = new OrderedCommandParser();
            parser.SetRoutes(_twoParamRoute);

            var commandName = "";

            // Act
            var param = parser.Parse(@"ls c:\ *.csv", out commandName);

            // Assert
            Assert.AreEqual(2, param.Count());
            Assert.AreEqual("ls", commandName);
        }
        public void Parse_SingleParamIsSplitCorrectly()
        {
            // Arrange
            var parser = new OrderedCommandParser();
            parser.SetRoutes(_singleParamRoute);

            var commandName = "";

            // Act
            var param = parser.Parse(@"ls c:\", out commandName);

            // Assert
            Assert.AreEqual(1, param.Count());
            Assert.AreEqual("path", param.Keys.First());
            Assert.AreEqual(@"c:\", param.Values.First());
        }