예제 #1
0
        public void OrderOfDefaultTermShouldNotMatter()
        {
            var parser1 = new QueryEngineBuilder <Person>()
                          .WithNamedTerm("age", b => b.OneCondition(PersonOneConditionQuery()))
                          .WithDefaultTerm("name", b => b.ManyCondition(PersonManyMatch(), PersonManyNotMatch()))
                          .Build();

            var parser2 = new QueryEngineBuilder <Person>()
                          .WithDefaultTerm("name", b => b.ManyCondition(PersonManyMatch(), PersonManyNotMatch()))
                          .WithNamedTerm("age", b => b.OneCondition(PersonOneConditionQuery()))
                          .Build();

            Assert.Equal("steve age:20", parser1.Parse("steve age:20").ToString());

            var result = parser1.Parse("steve age:20");

            Assert.Equal(2, result.Count());

            Assert.Equal("age:20 steve", parser1.Parse("age:20 steve").ToString());
            Assert.Equal(2, parser1.Parse("age:20 steve").Count());

            Assert.Equal("steve age:20", parser2.Parse("steve age:20").ToString());
            Assert.Equal(2, parser2.Parse("steve age:20").Count());

            Assert.Equal("age:20 steve", parser2.Parse("age:20 steve").ToString());
            Assert.Equal(2, parser2.Parse("age:20 steve").Count());
        }
예제 #2
0
        public void ShouldParseDefaultTermAtEndOfStatementWithBuilder()
        {
            var parser = new QueryEngineBuilder <Person>()
                         .WithNamedTerm("age", builder =>
                                        builder
                                        .OneCondition((val, query) =>
            {
                if (Int32.TryParse(val, out var age))
                {
                    query.With <PersonByAge>(x => x.Age == age);
                }

                return(query);
            })
                                        )
                         .WithDefaultTerm("name", builder =>
                                          builder.OneCondition(PersonOneConditionQuery())
                                          )
                         .Build();

            Assert.Equal("age:20 name:steve", parser.Parse("age:20 name:steve").ToString());
            Assert.Equal(2, parser.Parse("age:20 name:steve").Count());
            Assert.Equal("age:20 steve", parser.Parse("age:20 steve").ToString());
            Assert.Equal(2, parser.Parse("age:20 steve").Count());
        }
예제 #3
0
        public void ShouldParseTermWithLocalizedChars()
        {
            var parser = new QueryEngineBuilder <Person>()
                         .WithNamedTerm("name", b => b.OneCondition(PersonOneConditionQuery()))
                         .Build();

            Assert.Equal("name:账单", parser.Parse("name:账单").ToString());
            Assert.Equal("name:账单", parser.Parse("name:账单").ToNormalizedString());
        }
예제 #4
0
        public void ShouldParseDefaultTermWithManyConditionWhenLast()
        {
            var parser = new QueryEngineBuilder <Person>()
                         .WithNamedTerm("status", b => b.ManyCondition(PersonManyMatch(), PersonManyNotMatch()))
                         .WithDefaultTerm("name", b => b.ManyCondition(PersonManyMatch(), PersonManyNotMatch()))
                         .Build();

            Assert.Equal("steve status:published", parser.Parse("steve status:published").ToString());
            Assert.Equal("name:steve status:published", parser.Parse("steve status:published").ToNormalizedString());
        }
예제 #5
0
        public void ShouldParseManyNamedTerms()
        {
            var parser = new QueryEngineBuilder <Person>()
                         .WithNamedTerm("name", b => b.OneCondition(PersonOneConditionQuery()))
                         .WithNamedTerm("status", b => b.OneCondition(PersonOneConditionQuery()))
                         .Build();

            Assert.Equal("name:steve status:published", parser.Parse("name:steve status:published").ToString());
            Assert.Equal("name:steve status:published", parser.Parse("name:steve status:published").ToNormalizedString());
        }
예제 #6
0
        public void ShouldIgnoreMultipleNamedTerms()
        {
            var parser = new QueryEngineBuilder <Person>()
                         .WithNamedTerm("name", b => b.OneCondition(PersonOneConditionQuery()))
                         .Build();

            // By convention the last term is used when single = true;
            Assert.Equal("name:bill", parser.Parse("name:steve name:bill").ToString());
            Assert.Equal("name:bill", parser.Parse("name:steve name:bill").ToNormalizedString());
        }
예제 #7
0
        public void ShouldParseNamedTermWhenQuoted()
        {
            var parser = new QueryEngineBuilder <Person>()
                         .WithNamedTerm("name", b => b.OneCondition(PersonOneConditionQuery()))
                         .Build();

            Assert.Equal("name:\"steve balmer\"", parser.Parse("name:\"steve balmer\"").ToString());
            Assert.Equal("name:\"steve balmer\"", parser.Parse("name:\"steve balmer\"").ToNormalizedString());
            Assert.Equal("name:'steve balmer'", parser.Parse("name:'steve balmer'").ToString());
            Assert.Equal("name:'steve balmer'", parser.Parse("name:'steve balmer'").ToNormalizedString());
        }
예제 #8
0
        public void ShouldParseDefaultTermWithManyConditionWhenDefaultIsFirst()
        {
            // TODO Validation on builder if you have two manys. you cannot have a default.
            var parser = new QueryEngineBuilder <Person>()
                         .WithDefaultTerm("name", b => b.ManyCondition(PersonManyMatch(), PersonManyNotMatch()))
                         .WithNamedTerm("status", b => b.ManyCondition(PersonManyMatch(), PersonManyNotMatch()))
                         .Build();

            Assert.Equal("status:(published OR steve)", parser.Parse("status:published steve").ToNormalizedString());
        }
예제 #9
0
        public void ShouldIncludeExtraChars(string search)
        {
            var parser = new QueryEngineBuilder <Person>()
                         .WithNamedTerm("extrachar", b => b.OneCondition(PersonOneConditionQuery()))
                         .Build();

            var result = parser.Parse(search);

            Assert.Equal(search, result.ToString());
        }
예제 #10
0
        public void ShouldNotIncludeExtraWhitespace(string search)
        {
            var parser = new QueryEngineBuilder <Article>()
                         .WithNamedTerm("title", b => b.ManyCondition(ArticleManyMatch(), ArticleManyNotMatch()))
                         .Build();

            var result = parser.Parse(search);

            Assert.Equal(search, result.ToString());
        }
예제 #11
0
        public void Complex(string search, string normalized)
        {
            var parser = new QueryEngineBuilder <Article>()
                         .WithNamedTerm("title", b => b.ManyCondition(ArticleManyMatch(), ArticleManyNotMatch()))
                         .Build();

            var result = parser.Parse(search);

            Assert.Equal(normalized, result.ToNormalizedString());
        }
예제 #12
0
        public void ShouldParseDefaultTerm()
        {
            var parser = new QueryEngineBuilder <Person>()
                         .WithNamedTerm("age", b => b.OneCondition(PersonOneConditionQuery()))
                         .WithDefaultTerm("name", b => b.OneCondition(PersonOneConditionQuery()))
                         .Build();

            Assert.Equal("name:steve", parser.Parse("name:steve").ToString());
            Assert.Equal("steve", parser.Parse("steve").ToString());
            Assert.Equal("steve age:20", parser.Parse("steve age:20").ToString());
            Assert.Equal("age:20 name:steve", parser.Parse("age:20 name:steve").ToString());
            Assert.Equal("age:20 steve", parser.Parse("age:20 steve").ToString());
            Assert.Equal(2, parser.Parse("steve age:20").Count());
            Assert.Equal("name:steve", parser.Parse("steve").ToNormalizedString());
        }