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);
        }
Esempio n. 3
0
        /// <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));
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }