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()); }
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()); }
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()); }
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()); }
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()); }
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()); }
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()); }
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()); }
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()); }
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()); }
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()); }
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()); }