コード例 #1
0
 public SuggestionsBuilder Suggest(string text, IMessage tooltip)
 {
     if (text.Equals(Remaining))
     {
         return(this);
     }
     _result.Add(new Suggestion(StringRange.Between(Start, Input.Length), text, tooltip));
     return(this);
 }
コード例 #2
0
        public void suggest_multiple()
        {
            var result = _builder.Suggest("world!").Suggest("everybody").Suggest("weekend").Build();

            result.List.Should().BeEquivalentTo(new List <Suggestion.Suggestion> {
                new Suggestion.Suggestion(StringRange.Between(6, 7), "everybody"), new Suggestion.Suggestion(StringRange.Between(6, 7), "weekend"), new Suggestion.Suggestion(StringRange.Between(6, 7), "world!")
            });
            result.Range.Should().BeEquivalentTo(StringRange.Between(6, 7));
            result.IsEmpty().Should().Be(false);
        }
コード例 #3
0
        public async Task getCompletionSuggestions_rootCommands_partial_withInputOffset()
        {
            _subject.Register(r => r.Literal("foo"));
            _subject.Register(r => r.Literal("bar"));
            _subject.Register(r => r.Literal("baz"));

            var result = await _subject.GetCompletionSuggestions(_subject.Parse(InputWithOffset("Zb", 1), _source));

            result.Range.Should().BeEquivalentTo(StringRange.Between(1, 2));
            result.List.Should().BeEquivalentTo(new List <Suggestion.Suggestion> {
                new Suggestion.Suggestion(StringRange.Between(1, 2), "bar"), new Suggestion.Suggestion(StringRange.Between(1, 2), "baz")
            });
        }
コード例 #4
0
        public override void Parse(StringReader reader, CommandContextBuilder <TSource> contextBuilder)
        {
            var start = reader.Cursor;
            var end   = Parse(reader);

            if (end > -1)
            {
                contextBuilder.WithNode(this, StringRange.Between(start, end));
                return;
            }

            throw CommandSyntaxException.BuiltInExceptions.LiteralIncorrect().CreateWithContext(reader, Literal);
        }
コード例 #5
0
        public async Task getCompletionSuggestions_redirectPartial_withInputOffset()
        {
            var actual = _subject.Register(r => r.Literal("actual").Then(r.Literal("sub")));

            _subject.Register(r => r.Literal("redirect").Redirect(actual));

            var parse  = _subject.Parse(InputWithOffset("/redirect s", 1), _source);
            var result = await _subject.GetCompletionSuggestions(parse);

            result.Range.Should().BeEquivalentTo(StringRange.Between(10, 11));
            result.List.Should().BeEquivalentTo(new List <Suggestion.Suggestion> {
                new Suggestion.Suggestion(StringRange.Between(10, 11), "sub")
            });
        }
コード例 #6
0
ファイル: SuggestionsTest.cs プロジェクト: jlsa/Brigadier.NET
        public void merge_multiple()
        {
            var a = new Suggestions(StringRange.At(5), new List <Suggestion.Suggestion> {
                new Suggestion.Suggestion(StringRange.At(5), "ar"), new Suggestion.Suggestion(StringRange.At(5), "az"), new Suggestion.Suggestion(StringRange.At(5), "Az")
            });
            var b = new Suggestions(StringRange.Between(4, 5), new List <Suggestion.Suggestion> {
                new Suggestion.Suggestion(StringRange.Between(4, 5), "foo"), new Suggestion.Suggestion(StringRange.Between(4, 5), "qux"), new Suggestion.Suggestion(StringRange.Between(4, 5), "apple"), new Suggestion.Suggestion(StringRange.Between(4, 5), "Bar")
            });
            var merged = Suggestions.Merge("foo b", new List <Suggestions> {
                a, b
            });

            merged.List.Should().BeEquivalentTo(new List <Suggestion.Suggestion> {
                new Suggestion.Suggestion(StringRange.Between(4, 5), "apple"), new Suggestion.Suggestion(StringRange.Between(4, 5), "bar"), new Suggestion.Suggestion(StringRange.Between(4, 5), "Bar"), new Suggestion.Suggestion(StringRange.Between(4, 5), "baz"), new Suggestion.Suggestion(StringRange.Between(4, 5), "bAz"), new Suggestion.Suggestion(StringRange.Between(4, 5), "foo"), new Suggestion.Suggestion(StringRange.Between(4, 5), "qux")
            });
        }
コード例 #7
0
        public async Task getCompletionSuggestions_SubCommands_partial_withInputOffset()
        {
            _subject.Register(r =>
                              r.Literal("parent")
                              .Then(r.Literal("foo"))
                              .Then(r.Literal("bar"))
                              .Then(r.Literal("baz"))
                              );

            var parse  = _subject.Parse(InputWithOffset("junk parent b", 5), _source);
            var result = await _subject.GetCompletionSuggestions(parse);

            result.Range.Should().BeEquivalentTo(StringRange.Between(12, 13));
            result.List.Should().BeEquivalentTo(new List <Suggestion.Suggestion> {
                new Suggestion.Suggestion(StringRange.Between(12, 13), "bar"), new Suggestion.Suggestion(StringRange.Between(12, 13), "baz")
            });
        }
コード例 #8
0
        public async Task getCompletionSuggestions_movingCursor_redirect()
        {
            var actualOne = _subject.Register(r => r.Literal("actual_one")
                                              .Then(r.Literal("faz"))
                                              .Then(r.Literal("fbz"))
                                              .Then(r.Literal("gaz"))
                                              );

            _subject.Register(r => r.Literal("actual_two"));

            _subject.Register(r => r.Literal("redirect_one").Redirect(actualOne));
            _subject.Register(r => r.Literal("redirect_two").Redirect(actualOne));

            await TestSuggestions("redirect_one faz ", 0, StringRange.At(0), "actual_one", "actual_two", "redirect_one", "redirect_two");
            await TestSuggestions("redirect_one faz ", 9, StringRange.Between(0, 9), "redirect_one", "redirect_two");
            await TestSuggestions("redirect_one faz ", 10, StringRange.Between(0, 10), "redirect_one");
            await TestSuggestions("redirect_one faz ", 12, StringRange.At(0));
            await TestSuggestions("redirect_one faz ", 13, StringRange.At(13), "faz", "fbz", "gaz");
            await TestSuggestions("redirect_one faz ", 14, StringRange.Between(13, 14), "faz", "fbz");
            await TestSuggestions("redirect_one faz ", 15, StringRange.Between(13, 15), "faz");
            await TestSuggestions("redirect_one faz ", 16, StringRange.At(0));
            await TestSuggestions("redirect_one faz ", 17, StringRange.At(0));
        }
コード例 #9
0
        public async Task getCompletionSuggestions_movingCursor_SubCommands()
        {
            _subject.Register(r =>
                              r.Literal("parent_one")
                              .Then(r.Literal("faz"))
                              .Then(r.Literal("fbz"))
                              .Then(r.Literal("gaz"))
                              );

            _subject.Register(r =>
                              r.Literal("parent_two")
                              );

            await TestSuggestions("parent_one faz ", 0, StringRange.At(0), "parent_one", "parent_two");
            await TestSuggestions("parent_one faz ", 1, StringRange.Between(0, 1), "parent_one", "parent_two");
            await TestSuggestions("parent_one faz ", 7, StringRange.Between(0, 7), "parent_one", "parent_two");
            await TestSuggestions("parent_one faz ", 8, StringRange.Between(0, 8), "parent_one");
            await TestSuggestions("parent_one faz ", 10, StringRange.At(0));
            await TestSuggestions("parent_one faz ", 11, StringRange.At(11), "faz", "fbz", "gaz");
            await TestSuggestions("parent_one faz ", 12, StringRange.Between(11, 12), "faz", "fbz");
            await TestSuggestions("parent_one faz ", 13, StringRange.Between(11, 13), "faz");
            await TestSuggestions("parent_one faz ", 14, StringRange.At(0));
            await TestSuggestions("parent_one faz ", 15, StringRange.At(0));
        }
コード例 #10
0
        public void apply_replacement_everything()
        {
            var suggestion = new Suggestion.Suggestion(StringRange.Between(0, 12), "Oh dear.");

            suggestion.Apply("Hello world!").Should().BeEquivalentTo("Oh dear.");
        }
コード例 #11
0
        public void apply_replacement_start()
        {
            var suggestion = new Suggestion.Suggestion(StringRange.Between(0, 5), "Goodbye");

            suggestion.Apply("Hello world!").Should().BeEquivalentTo("Goodbye world!");
        }
コード例 #12
0
        public void TestEquals()
        {
            var otherSource   = new object();
            var command       = Substitute.For <Command <object> >();
            var otherCommand  = Substitute.For <Command <object> >();
            var rootNode      = Substitute.For <CommandNode <object> >(null, null, null, null, false);
            var otherRootNode = Substitute.For <CommandNode <object> >(null, null, null, null, false);
            var node          = Substitute.For <CommandNode <object> >(null, null, null, null, false);
            var otherNode     = Substitute.For <CommandNode <object> >(null, null, null, null, false);

            new EqualsTester()
            .AddEqualityGroup(new CommandContextBuilder <object>(_dispatcher, _source, rootNode, 0).Build(""), new CommandContextBuilder <object>(_dispatcher, _source, rootNode, 0).Build(""))
            .AddEqualityGroup(new CommandContextBuilder <object>(_dispatcher, _source, otherRootNode, 0).Build(""), new CommandContextBuilder <object>(_dispatcher, _source, otherRootNode, 0).Build(""))
            .AddEqualityGroup(new CommandContextBuilder <object>(_dispatcher, otherSource, rootNode, 0).Build(""), new CommandContextBuilder <object>(_dispatcher, otherSource, rootNode, 0).Build(""))
            .AddEqualityGroup(new CommandContextBuilder <object>(_dispatcher, _source, rootNode, 0).WithCommand(command).Build(""), new CommandContextBuilder <object>(_dispatcher, _source, rootNode, 0).WithCommand(command).Build(""))
            .AddEqualityGroup(new CommandContextBuilder <object>(_dispatcher, _source, rootNode, 0).WithCommand(otherCommand).Build(""), new CommandContextBuilder <object>(_dispatcher, _source, rootNode, 0).WithCommand(otherCommand).Build(""))
            .AddEqualityGroup(new CommandContextBuilder <object>(_dispatcher, _source, rootNode, 0).WithArgument("foo", new ParsedArgument <object, int>(0, 1, 123)).Build("123"), new CommandContextBuilder <object>(_dispatcher, _source, rootNode, 0).WithArgument("foo", new ParsedArgument <object, int>(0, 1, 123)).Build("123"))
            .AddEqualityGroup(new CommandContextBuilder <object>(_dispatcher, _source, rootNode, 0).WithNode(node, StringRange.Between(0, 3)).WithNode(otherNode, StringRange.Between(4, 6)).Build("123 456"), new CommandContextBuilder <object>(_dispatcher, _source, rootNode, 0).WithNode(node, StringRange.Between(0, 3)).WithNode(otherNode, StringRange.Between(4, 6)).Build("123 456"))
            .AddEqualityGroup(new CommandContextBuilder <object>(_dispatcher, _source, rootNode, 0).WithNode(otherNode, StringRange.Between(0, 3)).WithNode(node, StringRange.Between(4, 6)).Build("123 456"), new CommandContextBuilder <object>(_dispatcher, _source, rootNode, 0).WithNode(otherNode, StringRange.Between(0, 3)).WithNode(node, StringRange.Between(4, 6)).Build("123 456"))
            .TestEquals();
        }
コード例 #13
0
        public void apply_replacement_middle()
        {
            var suggestion = new Suggestion.Suggestion(StringRange.Between(6, 11), "Alex");

            suggestion.Apply("Hello world!").Should().BeEquivalentTo("Hello Alex!");
        }
コード例 #14
0
        public void expand_replacement()
        {
            var suggestion = new Suggestion.Suggestion(StringRange.Between(6, 11), "strangers");

            suggestion.Expand("Hello world!", StringRange.Between(0, 12)).Should().BeEquivalentTo(new Suggestion.Suggestion(StringRange.Between(0, 12), "Hello strangers!"));
        }
コード例 #15
0
        public void expand_both()
        {
            var suggestion = new Suggestion.Suggestion(StringRange.At(11), "minecraft:");

            suggestion.Expand("give Steve fish_block", StringRange.Between(5, 21)).Should().BeEquivalentTo(new Suggestion.Suggestion(StringRange.Between(5, 21), "Steve minecraft:fish_block"));
        }
コード例 #16
0
        public void expand_right()
        {
            var suggestion = new Suggestion.Suggestion(StringRange.At(0), "minecraft:");

            suggestion.Expand("fish", StringRange.Between(0, 4)).Should().BeEquivalentTo(new Suggestion.Suggestion(StringRange.Between(0, 4), "minecraft:fish"));
        }
コード例 #17
0
        public void apply_replacement_end()
        {
            var suggestion = new Suggestion.Suggestion(StringRange.Between(6, 12), "Creeper!");

            suggestion.Apply("Hello world!").Should().BeEquivalentTo("Hello Creeper!");
        }
コード例 #18
0
 public SuggestionsBuilder Suggest(int value, IMessage tooltip)
 {
     _result.Add(new IntegerSuggestion(StringRange.Between(Start, Input.Length), value, tooltip));
     return(this);
 }
コード例 #19
0
        public void expand_left()
        {
            var suggestion = new Suggestion.Suggestion(StringRange.At(1), "oo");

            suggestion.Expand("f", StringRange.Between(0, 1)).Should().BeEquivalentTo(new Suggestion.Suggestion(StringRange.Between(0, 1), "foo"));
        }