public void Should_return_null_if_segment_doesnt_match()
        {
            var command      = "test".Split(' ');
            var commandRoute = new CommandRoute("test");

            var matchResult = new MatchResult();
            var mockSegment = new Mock <ISegment>();

            mockSegment.Setup(x => x.Match("baaad")).Returns(() => matchResult);

            commandRoute.AddSegment(mockSegment.Object);

            var result = commandRoute.Match(command);

            Assert.Null(result);
        }
Exemple #2
0
        public void Should_match_segment()
        {
            var command = "test".Split(' ');
            var commandRoute = new CommandRoute("test");

            var matchResult = new MatchResult();
            var mockSegment = new Mock<ISegment>();

            mockSegment.Setup(x => x.Match("test")).Returns(() => matchResult);

            commandRoute.AddSegment(mockSegment.Object);

            var result = commandRoute.Match(command);

            Assert.NotNull(result);
            Assert.Equal(1, result.MatchResults.Count);
            Assert.Equal(0, result.OptionalMatchResults.Count);
            Assert.True(result.MatchResults.Contains(matchResult));
        }
        public void Should_match_segment()
        {
            var command      = "test".Split(' ');
            var commandRoute = new CommandRoute("test");

            var matchResult = new MatchResult();
            var mockSegment = new Mock <ISegment>();

            mockSegment.Setup(x => x.Match("test")).Returns(() => matchResult);

            commandRoute.AddSegment(mockSegment.Object);

            var result = commandRoute.Match(command);

            Assert.NotNull(result);
            Assert.Equal(1, result.MatchResults.Count);
            Assert.Equal(0, result.OptionalMatchResults.Count);
            Assert.True(result.MatchResults.Contains(matchResult));
        }
        public void Should_return_null_if_optional_segment_doesnt_match()
        {
            var command      = "test -f".Split(' ');
            var commandRoute = new CommandRoute("test [-f|flag]");

            var matchResult         = new MatchResult();
            var namedMatchResult    = new NamedValueMatchResult("flag", true);
            var mockSegment         = new Mock <ISegment>();
            var mockOptionalSegment = new Mock <ISegment>();

            mockSegment.Setup(x => x.Match("test")).Returns(() => matchResult);
            mockOptionalSegment.Setup(x => x.Match("-o")).Returns(() => namedMatchResult);

            commandRoute.AddSegment(mockSegment.Object);
            commandRoute.AddOptionalSegment(mockOptionalSegment.Object);

            var result = commandRoute.Match(command);

            Assert.Null(result);
        }
Exemple #5
0
        public void Should_match_segment_and_flag()
        {
            var command = "test -f".Split(' ');
            var commandRoute = new CommandRoute("test [-f|flag]");

            var matchResult = new MatchResult();
            var namedMatchResult = new NamedValueMatchResult("flag", true);
            var mockSegment = new Mock<ISegment>();
            var mockOptionalSegment = new Mock<ISegment>();

            mockSegment.Setup(x => x.Match("test")).Returns(() => matchResult);
            mockOptionalSegment.Setup(x => x.Match("-f")).Returns(() => namedMatchResult);

            commandRoute.AddSegment(mockSegment.Object);
            commandRoute.AddOptionalSegment(mockOptionalSegment.Object);

            var result = commandRoute.Match(command);

            Assert.NotNull(result);
            Assert.Equal(1, result.MatchResults.Count);
            Assert.Equal(1, result.OptionalMatchResults.Count);
            Assert.True(result.MatchResults.Contains(matchResult));
            Assert.True(result.OptionalMatchResults.Contains(namedMatchResult));
        }
Exemple #6
0
        public void Should_match_multiple_segments()
        {
            var command = "test value".Split(' ');
            var commandRoute = new CommandRoute("test {value}");

            var matchResult = new MatchResult();
            var namedMatchResult = new NamedValueMatchResult("value", "value");
            var mockSegment = new Mock<ISegment>();
            var mockVariableSegment = new Mock<ISegment>();

            mockSegment.Setup(x => x.Match("test")).Returns(() => matchResult);
            mockVariableSegment.Setup(x => x.Match("value")).Returns(() => namedMatchResult);

            commandRoute.AddSegment(mockSegment.Object);
            commandRoute.AddSegment(mockVariableSegment.Object);

            var result = commandRoute.Match(command);

            Assert.NotNull(result);
            Assert.Equal(2, result.MatchResults.Count);
            Assert.Equal(0, result.OptionalMatchResults.Count);
            Assert.True(result.MatchResults.Contains(matchResult));
            Assert.True(result.MatchResults.Contains(namedMatchResult));
        }
        public void Should_match_multiple_segments()
        {
            var command      = "test value".Split(' ');
            var commandRoute = new CommandRoute("test {value}");

            var matchResult         = new MatchResult();
            var namedMatchResult    = new NamedValueMatchResult("value", "value");
            var mockSegment         = new Mock <ISegment>();
            var mockVariableSegment = new Mock <ISegment>();

            mockSegment.Setup(x => x.Match("test")).Returns(() => matchResult);
            mockVariableSegment.Setup(x => x.Match("value")).Returns(() => namedMatchResult);

            commandRoute.AddSegment(mockSegment.Object);
            commandRoute.AddSegment(mockVariableSegment.Object);

            var result = commandRoute.Match(command);

            Assert.NotNull(result);
            Assert.Equal(2, result.MatchResults.Count);
            Assert.Equal(0, result.OptionalMatchResults.Count);
            Assert.True(result.MatchResults.Contains(matchResult));
            Assert.True(result.MatchResults.Contains(namedMatchResult));
        }
        public void Should_match_segment_and_flag_with_value()
        {
            var command      = "test -f test".Split(' ');
            var commandRoute = new CommandRoute("test [-f|flag]");

            var matchResult         = new MatchResult();
            var namedMatchResult    = new NamedValueMatchResult("flag", "test");
            var mockSegment         = new Mock <ISegment>();
            var mockOptionalSegment = new Mock <ISegment>();

            mockSegment.Setup(x => x.Match("test")).Returns(() => matchResult);
            mockOptionalSegment.Setup(x => x.Match("-f test")).Returns(() => namedMatchResult);

            commandRoute.AddSegment(mockSegment.Object);
            commandRoute.AddOptionalSegment(mockOptionalSegment.Object);

            var result = commandRoute.Match(command);

            Assert.NotNull(result);
            Assert.Equal(1, result.MatchResults.Count);
            Assert.Equal(1, result.OptionalMatchResults.Count);
            Assert.True(result.MatchResults.Contains(matchResult));
            Assert.True(result.OptionalMatchResults.Contains(namedMatchResult));
        }
Exemple #9
0
 public static void RegisterCommandRoute(IChromelyContainer container, string key, CommandRoute command)
 {
     container.RegisterInstance(typeof(CommandRoute), key, command);
 }
Exemple #10
0
 public void Should_throw_exception_when_using_blank_template()
 {
     Assert.Throws<ArgumentException>(() => {
         var route = new CommandRoute("");
     });
 }
Exemple #11
0
        public void Should_return_null_if_segment_doesnt_match()
        {
            var command = "test".Split(' ');
            var commandRoute = new CommandRoute("test");

            var matchResult = new MatchResult();
            var mockSegment = new Mock<ISegment>();

            mockSegment.Setup(x => x.Match("baaad")).Returns(() => matchResult);

            commandRoute.AddSegment(mockSegment.Object);

            var result = commandRoute.Match(command);

            Assert.Null(result);
        }
Exemple #12
0
        public void Should_return_null_if_optional_segment_doesnt_match()
        {
            var command = "test -f".Split(' ');
            var commandRoute = new CommandRoute("test [-f|flag]");

            var matchResult = new MatchResult();
            var namedMatchResult = new NamedValueMatchResult("flag", true);
            var mockSegment = new Mock<ISegment>();
            var mockOptionalSegment = new Mock<ISegment>();

            mockSegment.Setup(x => x.Match("test")).Returns(() => matchResult);
            mockOptionalSegment.Setup(x => x.Match("-o")).Returns(() => namedMatchResult);

            commandRoute.AddSegment(mockSegment.Object);
            commandRoute.AddOptionalSegment(mockOptionalSegment.Object);

            var result = commandRoute.Match(command);

            Assert.Null(result);
        }
Exemple #13
0
        public void Run <TOption>(string[] args)
        {
            bool validate = false;
            var  types    = (from assembly in AppDomain.CurrentDomain.GetAssemblies()
                             from type in assembly.GetTypes()
                             where type.IsSubclassOf(typeof(Command))
                             select type).ToList();

            foreach (Type type in types)
            {
                var commonOptionAttribute = type.GetCustomAttribute(typeof(CommandRoutePrefix));
                if (commonOptionAttribute == null)
                {
                    continue;
                }
                CommandRoutePrefix p = (CommandRoutePrefix)commonOptionAttribute;
                // check for the command
                if (args[0].Equals(p.Prefix, StringComparison.InvariantCultureIgnoreCase))
                {
                    var methods = type.GetMethods();
                    foreach (MethodInfo methodInfo in methods)
                    {
                        Attribute a = methodInfo.GetCustomAttribute(typeof(CommandRoute));
                        if (a != null)
                        {
                            CommandRoute r = (CommandRoute)a;
                            // check the action
                            if (args[1].Equals(r.Action, StringComparison.InvariantCultureIgnoreCase))
                            {
                                string          commandArgs     = args.ToCommandStringLine();
                                string          commandOpts     = p.CommonOptions + r.Options;
                                MatchCollection routeCollection = commandOpts.ToCommandOptionCollection();
                                if (routeCollection.Count.Equals(0))
                                {
                                    validate = true;
                                }
                                for (var i = 0; i < routeCollection.Count; i++)
                                {
                                    if (commandArgs.Contains(routeCollection[i].Value))
                                    {
                                        validate = true;
                                    }
                                    else
                                    {
                                        string missingOption = routeCollection[i].Value;
                                        throw new OptionNotFound(missingOption);
                                    }
                                }
                                if (validate)
                                {
                                    var command = CommandContainer.Instance.Container.Resolve(type);
                                    try
                                    {
                                        methodInfo.Invoke(command, new object[] { args.ToOption <TOption>() });
                                    }
                                    catch (Exception e)
                                    {
                                        throw e.InnerException;
                                    }
                                    return;
                                }
                            }
                        }
                    }
                    throw new CommandNotFound(string.Format("{0} {1}", args[0], args[1]));
                }
            }
        }
Exemple #14
0
 public void Should_throw_exception_when_using_blank_template()
 {
     Assert.Throws <ArgumentException>(() => {
         var route = new CommandRoute("");
     });
 }