Ejemplo n.º 1
0
        public void Find_The_Correct_Alias_If_Multiple_Exist()
        {
            // arrange
            var builder = new ContextBuilder()
                          .AddParser("a")
                          .Finish
                          .AddParser("b")
                          .WithAlias("C")
                          .Finish
                          .AddParser("c")
                          .WithAlias("C")
                          .Finish
                          .AddParser("d")
                          .Finish
                          .CreateParentChildRelationship("a", "b")
                          .CreateParentChildRelationship("b", "c")
                          .CreateParentChildRelationship("c", "d");

            var strat   = new ParserChainIdentificationStrategy(builder.Context);
            var request = new ChainIdentificationRequest("C C d".Split(' '), builder.Context);

            // act
            var res = strat.Identify(request);

            // assert
            res.Chain.Should()
            .BeEquivalentTo("a b c d".Split(' ').Select(x => builder.Context.ParserRepository.Get(x)));
            res.ConsumedArgs.Should().BeEquivalentTo("C C d".Split(' '));
        }
Ejemplo n.º 2
0
        public void Work_When_No_Aliases_Are_Defined()
        {
            // arrange
            var builder = new ContextBuilder()
                          .AddParser("a")
                          .Finish
                          .AddParser("b")
                          .Finish
                          .AddParser("c")
                          .Finish
                          .AddParser("d")
                          .Finish
                          .AddParser("e")
                          .Finish
                          .CreateParentChildRelationship("a", "b")
                          .CreateParentChildRelationship("b", "c")
                          .CreateParentChildRelationship("c", "d")
                          .CreateParentChildRelationship("a", "e");
            var strat   = new ParserChainIdentificationStrategy(builder.Context);
            var request = new ChainIdentificationRequest("b c d".Split(' '), builder.Context);

            // act
            var res = strat.Identify(request);

            // assert
            res.Chain.Should()
            .BeEquivalentTo("a b c d".Split(' ').Select(x => builder.Context.ParserRepository.Get(x)));
        }
Ejemplo n.º 3
0
        public void Return_The_Root_If_There_Are_No_Args()
        {
            // arrange
            var builder = new ContextBuilder()
                          .AddParser("a")
                          .Finish;

            var strat   = new ParserChainIdentificationStrategy(builder.Context);
            var request = new ChainIdentificationRequest(new string[0], builder.Context);

            // act
            var res = strat.Identify(request);

            // assert
            res.Chain.Single().Should().Be(builder.Context.RootParser());
            res.ConsumedArgs.Should().BeEmpty();
        }
Ejemplo n.º 4
0
        public void Throw_If_There_Is_An_Ambiguous_Match()
        {
            // arrange
            var builder = new ContextBuilder()
                          .AddParser("a")
                          .Finish
                          .AddParser("b")
                          .WithAlias("C")
                          .Finish
                          .AddParser("c")
                          .WithAlias("C")
                          .Finish
                          .CreateParentChildRelationship("a", "b")
                          .CreateParentChildRelationship("a", "c");

            var    strat      = new ParserChainIdentificationStrategy(builder.Context);
            var    request    = new ChainIdentificationRequest("C C".Split(' '), builder.Context);
            Action mightThrow = () => strat.Identify(request);

            // act

            // assert
            mightThrow.Should().Throw <AmbiguousCommandChainException>().And.MatchingSequences.Should().HaveCount(2);
        }
Ejemplo n.º 5
0
        public void Allow_Aliases_To_Be_Used()
        {
            // arrange
            var builder = new ContextBuilder()
                          .AddParser("a")
                          .Finish
                          .AddParser("b")
                          .Finish
                          .AddParser("c")
                          .WithAlias("C")
                          .Finish
                          .CreateParentChildRelationship("a", "b")
                          .CreateParentChildRelationship("b", "c");

            var strat   = new ParserChainIdentificationStrategy(builder.Context);
            var request = new ChainIdentificationRequest("b C".Split(' '), builder.Context);

            // act
            var res = strat.Identify(request);

            // assert
            res.Chain.Should().HaveCount(3);
            res.Chain.Should().BeEquivalentTo("a b c".Split(' ').Select(x => builder.Context.ParserRepository.Get(x)));
        }