public void ParseStatement_WheExplicitRange_ExpectRangeNode() { // Arrange var mockRangeParser = new Mock <IWhereStatementParser>(); var mockEqualsParser = new Mock <IWhereStatementParser>(); var mockEntityParser = new Mock <IEntityParser <string> >(); var mockTypeSplitter = new Mock <ISplitter <TypeSplitterResponse> >(); mockRangeParser.Setup(r => r.ParseStatement(It.IsAny <string>(), It.IsAny <string>())).Returns(new RangeOperator { Name = null, LowerInclusive = false, UpperInclusive = false, Upper = 250, Lower = 10 }); mockEntityParser.Setup(r => r.IsPermitted(It.IsAny <string>())).Returns(true); mockTypeSplitter.Setup(r => r.SplitByToken(It.IsAny <string>())).Returns( (string s) => new TypeSplitterResponse { Type = null, HasType = false, Data = s }); var whereStatementParser = new WhereStatementParser <string>( mockRangeParser.Object, mockEqualsParser.Object, mockEntityParser.Object, mockTypeSplitter.Object); // Act var stopwatch = Stopwatch.StartNew(); var unaryNode = whereStatementParser.ParseStatement("column:[10,250]"); stopwatch.Stop(); // Assert this.WriteTimeElapsed(stopwatch); Assert.That(unaryNode, Is.Not.Null); var rangeNode = unaryNode as RangeOperator; Assert.That(rangeNode, Is.Not.Null); Assert.That(rangeNode.Name, Is.EqualTo("column")); Assert.That(rangeNode.Lower, Is.EqualTo(10)); Assert.That(rangeNode.LowerInclusive, Is.False); Assert.That(rangeNode.Upper, Is.EqualTo(250)); Assert.That(rangeNode.UpperInclusive, Is.False); }
public void ParseStatement_WheEqualsStatement_ExpectEqualsParser() { // Arrange var mockRangeParser = new Mock <IWhereStatementParser>(); var mockEqualsParser = new Mock <IWhereStatementParser>(); var mockEntityParser = new Mock <IEntityParser <string> >(); var mockTypeSplitter = new Mock <ISplitter <TypeSplitterResponse> >(); mockEqualsParser.Setup(r => r.ParseStatement(It.IsAny <string>(), It.IsAny <string>())).Returns(new EqualsOperator { Name = null, IsNot = false, Value = "test" }); mockEntityParser.Setup(r => r.IsPermitted(It.IsAny <string>())).Returns(true); mockTypeSplitter.Setup(r => r.SplitByToken(It.IsAny <string>())).Returns( (string s) => new TypeSplitterResponse { Type = null, HasType = false, Data = s }); var whereStatementParser = new WhereStatementParser <string>( mockRangeParser.Object, mockEqualsParser.Object, mockEntityParser.Object, mockTypeSplitter.Object); // Act var stopwatch = Stopwatch.StartNew(); var unaryNode = whereStatementParser.ParseStatement("column:\"bobs burgers\""); stopwatch.Stop(); // Assert this.WriteTimeElapsed(stopwatch); Assert.That(unaryNode, Is.Not.Null); var equalsNode = unaryNode as EqualsOperator; Assert.That(equalsNode, Is.Not.Null); Assert.That(equalsNode.Name, Is.EqualTo("column")); Assert.That(equalsNode.Value, Is.EqualTo("test")); Assert.That(equalsNode.IsNot, Is.False); }
/// <summary> /// Initializes this instance. /// </summary> /// <typeparam name="TEntity">The type of the entity.</typeparam> /// <param name="parserOptions">The parser options.</param> /// <returns>The IEntityParser.</returns> private static object Initialize <TEntity>(ParserOptions parserOptions) { var tokenSplitter = new TokenSplitter(); var rangeParser = new RangeParser(); var equalsParser = new EqualsParser(); var entityParser = new EntityParser <TEntity>(); var typeSplitter = new TypeSplitter(); var whereStatementParser = new WhereStatementParser <TEntity>(rangeParser, equalsParser, entityParser, typeSplitter); var whereParser = new WhereParser(whereStatementParser, parserOptions); var orderByParser = new OrderByParser <TEntity>(entityParser); var pageParser = new PageParser(); var selectParser = new SelectParser <TEntity>(entityParser); return(new StatementParser(tokenSplitter, whereParser, pageParser, orderByParser, selectParser)); }
public void ParseWhere_WhenTwoParts_ExpectBinaryNode() { // Arrange var rangeParser = new RangeParser(); var equalsParser = new EqualsParser(); var entityParser = new EntityParser <CustomEntity>(); var typeSplitter = new TypeSplitter(); var whereStatementParser = new WhereStatementParser <CustomEntity>(rangeParser, equalsParser, entityParser, typeSplitter); var whereParser = new WhereParser(whereStatementParser, new ParserOptions()); // Act var stopwatch = Stopwatch.StartNew(); var whereNode = whereParser.ParseWhere("testKey:testValue and testKey2:[23,2]"); stopwatch.Stop(); // Assert this.WriteTimeElapsed(stopwatch); var next1 = new WhereNode { Conjunctive = Conjunctives.None, Next = null, Statement = new WhereStatement { As = null, Value = new RangeOperator { Statement = "testKey2:[23,2]", Name = "testKey2", Lower = 23, LowerInclusive = false, Upper = 2, UpperInclusive = false } } }; var expected = new WhereNode { Conjunctive = Conjunctives.And, Next = next1, Statement = new WhereStatement { As = null, Value = new EqualsOperator { Statement = "testKey:testValue", Name = "testKey", CaseInsensitive = false, Value = "testValue", IsNot = false } } }; whereNode.ShouldDeepEqual(expected); }
public void ParseWhere_WhenSimpleQuery_ExpectNodeBack() { // Arrange var rangeParser = new RangeParser(); var equalsParser = new EqualsParser(); var entityParser = new EntityParser <CustomEntity>(); var typeSplitter = new TypeSplitter(); var whereStatementParser = new WhereStatementParser <CustomEntity>(rangeParser, equalsParser, entityParser, typeSplitter); var whereParser = new WhereParser(whereStatementParser, new ParserOptions()); // Act var stopwatch = Stopwatch.StartNew(); var whereNode = whereParser.ParseWhere("testKey:testValue"); stopwatch.Stop(); // Assert this.WriteTimeElapsed(stopwatch); var equalsOperator = whereNode; Assert.That(equalsOperator, Is.Not.Null); var expected = new WhereNode { Conjunctive = Conjunctives.None, Next = null, Statement = new WhereStatement { As = null, Value = new EqualsOperator { Statement = "testKey:testValue", Name = "testKey", CaseInsensitive = false, Value = "testValue", IsNot = false } } }; whereNode.ShouldDeepEqual(expected); }