Example #1
0
 public void TestCommandExpressionParseException()
 {
     Assert.Throws <CommandExpressionException>(() => CommandExpression.Parse("./"));
     Assert.Throws <CommandExpressionException>(() => CommandExpression.Parse("../"));
     Assert.Throws <CommandExpressionException>(() => CommandExpression.Parse("help/"));
     Assert.Throws <CommandExpressionException>(() => CommandExpression.Parse("/help/"));
     Assert.Throws <CommandExpressionException>(() => CommandExpression.Parse("./help/"));
     Assert.Throws <CommandExpressionException>(() => CommandExpression.Parse("../help/"));
     Assert.Throws <CommandExpressionException>(() => CommandExpression.Parse("queue.in/"));
     Assert.Throws <CommandExpressionException>(() => CommandExpression.Parse("/queue.in/"));
     Assert.Throws <CommandExpressionException>(() => CommandExpression.Parse("./queue.in/"));
     Assert.Throws <CommandExpressionException>(() => CommandExpression.Parse("../queue.in/"));
 }
Example #2
0
        public void TestCommandExpressionParseWithPipeline()
        {
            CommandExpression expression;

            expression = CommandExpression.Parse("plugins.find '/Workbench'");

            Assert.Equal("find", expression.Name);
            Assert.Equal("plugins/", expression.Path);
            Assert.Equal("plugins/find", expression.FullPath);
            Assert.Equal(PathAnchor.None, expression.Anchor);
            Assert.Equal(0, expression.Options.Count);
            Assert.Equal(1, expression.Arguments.Length);
            Assert.Equal("/Workbench", expression.Arguments[0]);

            expression = CommandExpression.Parse("sms.generate -template:'user.register' -authenticode:12345 phonenumber'1 phonenumber:2 phonenumber-3 'phonenumber|4' | queue.in sms");

            Assert.Equal("generate", expression.Name);
            Assert.Equal("sms/", expression.Path);
            Assert.Equal("sms/generate", expression.FullPath);
            Assert.Equal(PathAnchor.None, expression.Anchor);
            Assert.Equal(2, expression.Options.Count);
            Assert.Equal(4, expression.Arguments.Length);
            Assert.Equal("user.register", expression.Options["template"]);
            Assert.Equal("12345", expression.Options["authenticode"]);
            Assert.Equal("phonenumber'1", expression.Arguments[0]);
            Assert.Equal("phonenumber:2", expression.Arguments[1]);
            Assert.Equal("phonenumber-3", expression.Arguments[2]);
            Assert.Equal("phonenumber|4", expression.Arguments[3]);

            Assert.NotNull(expression.Next);
            Assert.Equal("in", expression.Next.Name);
            Assert.Equal("queue/", expression.Next.Path);
            Assert.Equal("queue/in", expression.Next.FullPath);
            Assert.Equal(PathAnchor.None, expression.Next.Anchor);
            Assert.Equal("sms", expression.Next.Arguments[0]);
        }
Example #3
0
        public void TestCommandExpressionParse()
        {
            var expression = CommandExpression.Parse("");

            Assert.Null(expression);

            expression = CommandExpression.Parse("/");
            Assert.Equal("/", expression.Name);
            Assert.Equal("", expression.Path);
            Assert.Equal("/", expression.FullPath);
            Assert.Equal(PathAnchor.None, expression.Anchor);

            expression = CommandExpression.Parse(".");
            Assert.Equal(".", expression.Name);
            Assert.Equal("", expression.Path);
            Assert.Equal(".", expression.FullPath);
            Assert.Equal(PathAnchor.None, expression.Anchor);

            expression = CommandExpression.Parse("..");
            Assert.Equal("..", expression.Name);
            Assert.Equal("", expression.Path);
            Assert.Equal("..", expression.FullPath);
            Assert.Equal(PathAnchor.None, expression.Anchor);

            expression = CommandExpression.Parse("send");
            Assert.Equal("send", expression.Name);
            Assert.Equal("", expression.Path);
            Assert.Equal("send", expression.FullPath);
            Assert.Equal(PathAnchor.None, expression.Anchor);

            expression = CommandExpression.Parse("/send");
            Assert.Equal("send", expression.Name);
            Assert.Equal("/", expression.Path);
            Assert.Equal("/send", expression.FullPath);
            Assert.Equal(PathAnchor.Root, expression.Anchor);

            expression = CommandExpression.Parse("./send");
            Assert.Equal("send", expression.Name);
            Assert.Equal("./", expression.Path);
            Assert.Equal("./send", expression.FullPath);
            Assert.Equal(PathAnchor.Current, expression.Anchor);

            expression = CommandExpression.Parse("../send");
            Assert.Equal("send", expression.Name);
            Assert.Equal("../", expression.Path);
            Assert.Equal("../send", expression.FullPath);
            Assert.Equal(PathAnchor.Parent, expression.Anchor);

            expression = CommandExpression.Parse("sms.send");
            Assert.Equal("send", expression.Name);
            Assert.Equal("sms/", expression.Path);
            Assert.Equal("sms/send", expression.FullPath);
            Assert.Equal(PathAnchor.None, expression.Anchor);

            expression = CommandExpression.Parse("/sms.send");
            Assert.Equal("send", expression.Name);
            Assert.Equal("/sms/", expression.Path);
            Assert.Equal("/sms/send", expression.FullPath);
            Assert.Equal(PathAnchor.Root, expression.Anchor);

            expression = CommandExpression.Parse("./sms.send");
            Assert.Equal("send", expression.Name);
            Assert.Equal("./sms/", expression.Path);
            Assert.Equal("./sms/send", expression.FullPath);
            Assert.Equal(PathAnchor.Current, expression.Anchor);

            expression = CommandExpression.Parse("../sms.send");
            Assert.Equal("send", expression.Name);
            Assert.Equal("../sms/", expression.Path);
            Assert.Equal("../sms/send", expression.FullPath);
            Assert.Equal(PathAnchor.Parent, expression.Anchor);

            expression = CommandExpression.Parse("notification.send -name:Zongsoft.CRM -type:Message -mode:Alias -destination:User.100 -title:'task:create'");
            Assert.Equal("send", expression.Name);
            Assert.Equal(5, expression.Options.Count);
            Assert.Equal("Zongsoft.CRM", expression.Options["name"]);
            Assert.Equal("Message", expression.Options["type"]);
            Assert.Equal("Alias", expression.Options["mode"]);
            Assert.Equal("User.100", expression.Options["destination"]);
            Assert.Equal("task:create", expression.Options["title"]);
        }
        public void TestCommandExpressionParse()
        {
            var expression = CommandExpression.Parse("");

            Assert.Null(expression);

            expression = CommandExpression.Parse("/");
            Assert.Equal("/", expression.Name);
            Assert.Equal("", expression.Path);
            Assert.Equal("/", expression.FullPath);
            Assert.Equal(PathAnchor.None, expression.Anchor);

            expression = CommandExpression.Parse(".");
            Assert.Equal(".", expression.Name);
            Assert.Equal("", expression.Path);
            Assert.Equal(".", expression.FullPath);
            Assert.Equal(PathAnchor.None, expression.Anchor);

            expression = CommandExpression.Parse("..");
            Assert.Equal("..", expression.Name);
            Assert.Equal("", expression.Path);
            Assert.Equal("..", expression.FullPath);
            Assert.Equal(PathAnchor.None, expression.Anchor);

            expression = CommandExpression.Parse("send");
            Assert.Equal("send", expression.Name);
            Assert.Equal("", expression.Path);
            Assert.Equal("send", expression.FullPath);
            Assert.Equal(PathAnchor.None, expression.Anchor);

            expression = CommandExpression.Parse("/send");
            Assert.Equal("send", expression.Name);
            Assert.Equal("/", expression.Path);
            Assert.Equal("/send", expression.FullPath);
            Assert.Equal(PathAnchor.Root, expression.Anchor);

            expression = CommandExpression.Parse("./send");
            Assert.Equal("send", expression.Name);
            Assert.Equal("./", expression.Path);
            Assert.Equal("./send", expression.FullPath);
            Assert.Equal(PathAnchor.Current, expression.Anchor);

            expression = CommandExpression.Parse("../send");
            Assert.Equal("send", expression.Name);
            Assert.Equal("../", expression.Path);
            Assert.Equal("../send", expression.FullPath);
            Assert.Equal(PathAnchor.Parent, expression.Anchor);

            expression = CommandExpression.Parse("sms.send");
            Assert.Equal("send", expression.Name);
            Assert.Equal("sms/", expression.Path);
            Assert.Equal("sms/send", expression.FullPath);
            Assert.Equal(PathAnchor.None, expression.Anchor);

            expression = CommandExpression.Parse("/sms.send");
            Assert.Equal("send", expression.Name);
            Assert.Equal("/sms/", expression.Path);
            Assert.Equal("/sms/send", expression.FullPath);
            Assert.Equal(PathAnchor.Root, expression.Anchor);

            expression = CommandExpression.Parse("./sms.send");
            Assert.Equal("send", expression.Name);
            Assert.Equal("./sms/", expression.Path);
            Assert.Equal("./sms/send", expression.FullPath);
            Assert.Equal(PathAnchor.Current, expression.Anchor);

            expression = CommandExpression.Parse("../sms.send");
            Assert.Equal("send", expression.Name);
            Assert.Equal("../sms/", expression.Path);
            Assert.Equal("../sms/send", expression.FullPath);
            Assert.Equal(PathAnchor.Parent, expression.Anchor);
        }
Example #5
0
        public static void Main(string[] args)
        {
            if (args == null || args.Length < 1)
            {
                Console.WriteLine(ResourceUtility.GetString("Text.MissingArguments"));
                return;
            }

            try
            {
                //使用当前命令行参数构造一个命令表达式
                var expression = CommandExpression.Parse("deployer " + string.Join(" ", args));

                //创建一个部署文件路径的列表
                var paths = new List <string>(expression.Arguments.Length);

                //校验所有指定的文件路径是否都存在,并将处理后的路径加入到待处理的列表中
                foreach (var argument in expression.Arguments)
                {
                    var path = Path.IsPathRooted(argument) ? argument : Zongsoft.IO.Path.Combine(Environment.CurrentDirectory, argument);

                    if (File.Exists(path))
                    {
                        paths.Add(path);
                    }
                    else
                    {
                        throw new FileNotFoundException(path);
                    }
                }

                //创建部署器类的实例
                var deployer = new Deployer(Zongsoft.Terminals.ConsoleTerminal.Instance);

                //将命令行选项添加到部署器的环境变量中
                if (expression.Options.Count > 0)
                {
                    foreach (var option in expression.Options)
                    {
                        deployer.EnvironmentVariables[option.Key] = option.Value;
                    }
                }

                //依次部署指定的部署文件
                foreach (var path in paths)
                {
                    //部署指定的文件
                    var counter = deployer.Deploy(path);

                    //打印部署的结果信息
                    deployer.Terminal.WriteLine(CommandOutletColor.DarkGreen, ResourceUtility.GetString("Text.Deploy.CompleteInfo", path, counter.Total, counter.Successes, counter.Failures));
                }
            }
            catch (Exception ex)
            {
                //设置控制台前景色为“红色”
                var foregroundColor = Console.ForegroundColor;
                Console.ForegroundColor = ConsoleColor.Red;

                //打印异常消息
                Console.Error.WriteLine(ex.Message);

                //重置控制台的前景色
                Console.ForegroundColor = foregroundColor;
            }
        }