public InputTreeUpdatedMessage( TexoConfiguration configuration, InputTree inputTree) { Configuration = configuration; InputTree = inputTree; }
public void InputTree_BuildTexo_TexoTree() { InputTreeBuilder builder = new InputTreeBuilder(new EmptyLogService()); InputTree tree = builder.Build(new[] { CommandsBuilder.BuildTexo() }, null); Assert.NotNull(tree); Assert.NotNull(tree.Root); Assert.NotNull(tree.Root.Queries["texo"]); Assert.Equal(6, tree.Root.Queries["texo"].Queries.Count); }
public void InputTree_BuildCurrentDirectory_CurrentDirectoryTree() { InputTreeBuilder builder = new InputTreeBuilder(new EmptyLogService()); InputTree tree = builder.Build(new[] { CommandsBuilder.BuildCurrentDirectory() }, null); Assert.NotNull(tree); Assert.NotNull(tree.Root); Assert.Equal(4, tree.Root.Queries.Count); Assert.Null(tree.Root.DefaultQuery); Assert.Single(tree.Root.Queries["cd"].Parameters); }
public void InputTree_BuildHelp_HelpTree() { InputTreeBuilder builder = new InputTreeBuilder(new EmptyLogService()); InputTree tree = builder.Build(new[] { CommandsBuilder.BuildHelp() }, null); Assert.NotNull(tree); Assert.NotNull(tree.Root); Assert.NotNull(tree.Root.Queries["help"]); Assert.Empty(tree.Root.Queries["help"].Queries); Assert.Empty(tree.Root.Queries["help"].Options); Assert.Single(tree.Root.Queries["help"].Parameters); }
async void IMessageBusRecipient <ISettingUpdatedMessage> .ProcessMessage(ISettingUpdatedMessage message) { try { configuration = message.Configuration; tree = await Task.Run(() => BuildInputTree(message.Configuration)); if (configuration != message.Configuration) { return; } messageBus.Send <IInputTreeUpdatedMessage>(new InputTreeUpdatedMessage(configuration, tree)); } catch (System.Exception exception) { logger.Error("An unknown error happend during input tree build.", exception); } }
public void TreeEvaluation_ConfigurationCommand_EvaluateInput() { const string input = "cd ../folder '../second folder/sub'"; var cdBuilder = Query.CreateBuilder(); var cdParamBuilder = Parameter.CreateBuilder(); cdParamBuilder.Key = "path"; cdParamBuilder.ArgumentTemplate = "[^\\<\\>\\:\\\"\\|\\?\\*[:cntrl:]]+"; cdParamBuilder.IsOptional = true; cdParamBuilder.IsRepeatable = true; cdParamBuilder.Documentation.Title = "Directory path"; cdParamBuilder.Documentation.Description = "Specify full or relative path."; cdBuilder.Key = "current-directory"; cdBuilder.Representations.AddRange(new[] { "current-directory", "cd", "chdir", "cdir" }); cdBuilder.Parameters.Add(cdParamBuilder.ToImmutable()); cdBuilder.Documentation.Title = "Current directory"; cdBuilder.Documentation.Description = "Gets or sets current working directory."; InputTreeBuilder builder = new InputTreeBuilder(new EmptyLogService()); InputTree tree = builder.Build(new[] { cdBuilder.ToImmutable() }, null); IEnvironmentService environment = new EnvironmentService(null); IInputParseService parser = new InputParseService(); InputTreeEvaluationStrategy evaluation = new InputTreeEvaluationStrategy(tree, environment); ParsedInput parsed = parser.Parse(input); Input evaluated = evaluation.Evaluate(parsed); Assert.Equal(parsed, evaluated.ParsedInput); Assert.Equal(3, evaluated.Tokens.Count); Assert.True(evaluated.Context.IsValid); Assert.Equal("current-directory", evaluated.Context.Key); Assert.Empty(evaluated.Context.Options); Assert.Single(evaluated.Context.Parameters); Assert.Equal("../folder", evaluated.Context.Parameters["path"].GetValues()[0]); Assert.Equal("../second folder/sub", evaluated.Context.Parameters["path"].GetValues()[1]); }
public void SetTree(InputTree tree) { this.tree = tree; }