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/")); }
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]); }
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); }
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; } }