public void NormalizeTreeResultsInReversedPath()
        {
            // Arrange: $select=1/2/3
            NonSystemToken endPath = new NonSystemToken("3", null, new NonSystemToken("2", null, new NonSystemToken("1", null, null)));

            Assert.Equal("3/2/1", endPath.ToPathString());

            SelectToken selectToken = new SelectToken(new SelectTermToken[]
            {
                new SelectTermToken(endPath)
            });

            // Act
            SelectToken normalizedToken = SelectTreeNormalizer.NormalizeSelectTree(selectToken);

            // Assert
            Assert.NotNull(normalizedToken);
            SelectTermToken  updatedSegmentToken = Assert.Single(normalizedToken.SelectTerms);
            PathSegmentToken segmentToken        = updatedSegmentToken.PathToProperty;

            segmentToken.ShouldBeNonSystemToken("1")
            .NextToken.ShouldBeNonSystemToken("2")
            .NextToken.ShouldBeNonSystemToken("3");

            Assert.Equal("1/2/3", segmentToken.ToPathString());
        }
예제 #2
0
        public void SelectSetCorrectly()
        {
            // Arrange & Act
            SelectToken     select     = new SelectToken(new PathSegmentToken[] { new NonSystemToken("1", null, null) });
            ExpandTermToken expandTerm = new ExpandTermToken(new NonSystemToken("stuff", null, null),
                                                             null /*filterOption*/,
                                                             null /*orderByOption*/,
                                                             null /*topOption*/,
                                                             null /*skipOption*/,
                                                             null /*countQueryOption*/,
                                                             null /*levelsOption*/,
                                                             null /*searchOption*/,
                                                             select,
                                                             null /*expandOption*/);

            // Assert
            Assert.NotNull(expandTerm.SelectOption);
            Assert.NotNull(expandTerm.SelectOption.Properties);
            Assert.Single(expandTerm.SelectOption.Properties);

            Assert.NotNull(expandTerm.SelectOption.SelectTerms);
            SelectTermToken selectTerm = Assert.Single(expandTerm.SelectOption.SelectTerms);

            selectTerm.PathToProperty.ShouldBeNonSystemToken("1");
        }
예제 #3
0
        public void AllNestedQueryOptionsInSelectAreAllowed()
        {
            // Arrange & Act
            SelectTermToken selectTerm = this.ParseSelectOptions("($select=one($select=subone);$filter=true;$count=true;$top=1;$skip=2)");

            // Assert
            Assert.NotNull(selectTerm);

            // $select
            Assert.NotNull(selectTerm.SelectOption);
            SelectTermToken innerSelectTerms = Assert.Single(selectTerm.SelectOption.SelectTerms);

            innerSelectTerms.PathToProperty.ShouldBeNonSystemToken("one");

            SelectTermToken innerInnerSelectTerms = Assert.Single(innerSelectTerms.SelectOption.SelectTerms);

            innerInnerSelectTerms.PathToProperty.ShouldBeNonSystemToken("subone");

            // $filter
            Assert.NotNull(selectTerm.FilterOption);
            selectTerm.FilterOption.ShouldBeLiteralQueryToken(true);

            // $count
            Assert.NotNull(selectTerm.CountQueryOption);
            Assert.True(selectTerm.CountQueryOption);

            // $top
            Assert.NotNull(selectTerm.TopOption);
            Assert.Equal(1, selectTerm.TopOption);

            // $skip
            Assert.NotNull(selectTerm.SkipOption);
            Assert.Equal(2, selectTerm.SkipOption);
        }
예제 #4
0
        public void NestedSearchInSelectIsAllowed(string optionsText)
        {
            // Arrange & Act
            SelectTermToken selectTerm = this.ParseSelectOptions(optionsText);

            // Assert
            Assert.NotNull(selectTerm.SearchOption);
            selectTerm.SearchOption.ShouldBeStringLiteralToken("Searchme");
        }
예제 #5
0
        public void NestedTopInSelectIsAllowed(string optionsText)
        {
            // Arrange & Act
            SelectTermToken selectTerm = this.ParseSelectOptions(optionsText);

            // Assert
            Assert.NotNull(selectTerm);
            Assert.NotNull(selectTerm.TopOption);
            Assert.Equal(24, selectTerm.TopOption);
        }
예제 #6
0
        public void NestedFilterOptionInSelectIsAllowed(string optionsText)
        {
            // Arrange & Act
            SelectTermToken selectTerm = this.ParseSelectOptions(optionsText);

            // Assert
            Assert.NotNull(selectTerm);
            Assert.NotNull(selectTerm.FilterOption);
            selectTerm.FilterOption.ShouldBeLiteralQueryToken(true);
        }
예제 #7
0
        public void NestedCountInSelectIsAllowed(string optionsText)
        {
            // Arrange & Act
            SelectTermToken selectTerm = this.ParseSelectOptions(optionsText);

            // Assert
            Assert.NotNull(selectTerm);
            Assert.NotNull(selectTerm.CountQueryOption);
            Assert.True(selectTerm.CountQueryOption);
        }
예제 #8
0
        public void InnerCountSetCorrectly()
        {
            // Arrange & Act
            SelectTermToken selectTerm = new SelectTermToken(new NonSystemToken("stuff", null, null),
                                                             null, null, null, null, false, null, null, null);

            // Assert
            Assert.NotNull(selectTerm.CountQueryOption);
            Assert.False(selectTerm.CountQueryOption);
        }
예제 #9
0
        public void InnerSkipSetCorrectly()
        {
            // Arrange & Act
            long            skip       = 42;
            SelectTermToken selectTerm = new SelectTermToken(new NonSystemToken("stuff", null, null),
                                                             null, null, null, skip, null, null, null, null);

            // Assert
            Assert.NotNull(selectTerm.SkipOption);
            Assert.Equal(42, selectTerm.SkipOption);
        }
예제 #10
0
        public void NestedOrderbyInSelectIsAllowed(string optionsText)
        {
            // Arrange & Act
            SelectTermToken selectTerm = this.ParseSelectOptions(optionsText);

            // Assert
            Assert.NotNull(selectTerm);
            Assert.NotNull(selectTerm.OrderByOptions);
            OrderByToken orderBy = Assert.Single(selectTerm.OrderByOptions);

            orderBy.Expression.ShouldBeEndPathToken("two");
        }
예제 #11
0
        public void InnerSearchSetCorrectly()
        {
            // Arrange & Act
            SelectTermToken selectTerm = new SelectTermToken(new NonSystemToken("stuff", null, null),
                                                             null, null, null, null, null, new StringLiteralToken("searchMe"), null, null);

            // Assert
            Assert.NotNull(selectTerm.SearchOption);
            StringLiteralToken token = Assert.IsType <StringLiteralToken>(selectTerm.SearchOption);

            Assert.Equal("searchMe", token.Text);
        }
예제 #12
0
        public void NestedExpandInSelectIsAllowed()
        {
            // Arrange & Act
            SelectTermToken selectTerm = this.ParseSelectOptions("($expand=two)");

            // Assert
            Assert.NotNull(selectTerm);
            Assert.NotNull(selectTerm.ExpandOption);
            ExpandTermToken two = Assert.Single(selectTerm.ExpandOption.ExpandTerms);

            two.PathToNavigationProp.ShouldBeNonSystemToken("two");
        }
예제 #13
0
        public void ParseNestedFilterInSelectWorks()
        {
            // Arrange & Act
            SelectToken selectToken = ParseSelectClause("Address($filter=true)");

            // Assert
            Assert.NotNull(selectToken);
            SelectTermToken selectTermToken = Assert.Single(selectToken.SelectTerms);

            selectTermToken.PathToProperty.ShouldBeNonSystemToken("Address");
            Assert.NotNull(selectTermToken.FilterOption);
            selectTermToken.FilterOption.ShouldBeLiteralQueryToken(true);
        }
예제 #14
0
        public void InnerSelectSetCorrectly()
        {
            // Arrange & Act
            SelectToken     select     = new SelectToken(new PathSegmentToken[] { new NonSystemToken("abc", null, null) });
            SelectTermToken selectTerm = new SelectTermToken(new NonSystemToken("stuff", null, null), select);

            // Assert
            Assert.NotNull(selectTerm.SelectOption);
            PathSegmentToken token          = Assert.Single(selectTerm.SelectOption.Properties);
            NonSystemToken   nonSystemToken = Assert.IsType <NonSystemToken>(token);

            Assert.Equal("abc", nonSystemToken.Identifier);
        }
예제 #15
0
        public void InnerFilterSetCorrectly()
        {
            // Arrange & Act
            QueryToken      filter     = new LiteralToken(21);
            SelectTermToken selectTerm = new SelectTermToken(new NonSystemToken("stuff", null, null),
                                                             filter, null, null, null, null, null, null, null);

            // Assert
            Assert.NotNull(selectTerm.FilterOption);
            LiteralToken literalToken = Assert.IsType <LiteralToken>(selectTerm.FilterOption);

            Assert.Equal(QueryTokenKind.Literal, literalToken.Kind);
            Assert.Equal(21, literalToken.Value);
        }
예제 #16
0
        public void SelectTermTokenPathIsSet()
        {
            // Arrange
            PathSegmentToken         pathToken    = new NonSystemToken("SomeProp", null, null);
            SelectExpandOptionParser optionParser = new SelectExpandOptionParser(5);

            // Act
            SelectTermToken selectTermToken = optionParser.BuildSelectTermToken(pathToken, "");

            // Assert
            Assert.NotNull(selectTermToken);
            Assert.NotNull(selectTermToken.PathToProperty);
            Assert.Equal("SomeProp", selectTermToken.PathToProperty.Identifier);
        }
예제 #17
0
        public void NestedSelectInSelectIsAllowed(string optionsText)
        {
            // Arrange & Act
            SelectTermToken selectTerm = this.ParseSelectOptions(optionsText);

            // Assert
            Assert.NotNull(selectTerm);
            Assert.NotNull(selectTerm.SelectOption);

            SelectTermToken[] innerSelectTerms = selectTerm.SelectOption.SelectTerms.ToArray();
            Assert.Equal(2, innerSelectTerms.Length);

            innerSelectTerms[0].PathToProperty.ShouldBeNonSystemToken("four");
            innerSelectTerms[1].PathToProperty.ShouldBeNonSystemToken("five");
        }
예제 #18
0
        public void AllNestedOptionsAreNullIfNotPresentInSelect()
        {
            // Arrange & Act
            SelectTermToken selectTerm = this.ParseSelectOptions("");

            // Assert
            Assert.NotNull(selectTerm);
            Assert.Null(selectTerm.FilterOption);
            Assert.Null(selectTerm.OrderByOptions);
            Assert.Null(selectTerm.TopOption);
            Assert.Null(selectTerm.SkipOption);
            Assert.Null(selectTerm.CountQueryOption);
            Assert.Null(selectTerm.SearchOption);
            Assert.Null(selectTerm.SelectOption);
        }
예제 #19
0
        public void InnerQueryOptionsCanBeNull()
        {
            // Arrange & Act
            SelectTermToken selectTermToken = new SelectTermToken(new NonSystemToken("stuff", null, null),
                                                                  null, null, null, null, null, null, null, null);

            // Assert
            Assert.Null(selectTermToken.FilterOption);
            Assert.Null(selectTermToken.OrderByOptions);
            Assert.Null(selectTermToken.TopOption);
            Assert.Null(selectTermToken.SkipOption);
            Assert.Null(selectTermToken.CountQueryOption);
            Assert.Null(selectTermToken.SearchOption);
            Assert.Null(selectTermToken.SelectOption);
        }
예제 #20
0
        public static SelectTermToken ShouldBeSelectTermToken(this QueryToken token, string propertyName, bool checkNullParent)
        {
            Assert.NotNull(token);
            SelectTermToken selectTermToken = Assert.IsType <SelectTermToken>(token);

            Assert.Equal(QueryTokenKind.SelectTerm, selectTermToken.Kind);
            Assert.Equal(propertyName, selectTermToken.PathToProperty.Identifier);

            if (checkNullParent)
            {
                Assert.Null(selectTermToken.PathToProperty.NextToken);
            }

            return(selectTermToken);
        }
예제 #21
0
        public void ParseNestedTopAndSkipInSelectWorks()
        {
            // Arrange & Act
            SelectToken selectToken = ParseSelectClause("Address($top=2;$skip=4)");

            // Assert
            Assert.NotNull(selectToken);
            SelectTermToken selectTermToken = Assert.Single(selectToken.SelectTerms);

            selectTermToken.PathToProperty.ShouldBeNonSystemToken("Address");
            Assert.NotNull(selectTermToken.TopOption);
            Assert.Equal(2, selectTermToken.TopOption);

            Assert.NotNull(selectTermToken.SkipOption);
            Assert.Equal(4, selectTermToken.SkipOption);
        }
예제 #22
0
        public void ParseOrderByThisInSelectWorks(string queryString, OrderByDirection orderByDirection)
        {
            // Arrange & Act
            SelectToken selectToken = ParseSelectClause(queryString);

            // Assert
            Assert.NotNull(selectToken);
            SelectTermToken selectTermToken = Assert.Single(selectToken.SelectTerms);

            selectTermToken.PathToProperty.ShouldBeNonSystemToken("Emails");
            Assert.NotNull(selectTermToken.OrderByOptions);
            OrderByToken orderBy = Assert.Single(selectTermToken.OrderByOptions);

            orderBy.Expression.ShouldBeRangeVariableToken("$this");
            Assert.Equal(orderByDirection, orderBy.Direction);
        }
예제 #23
0
        public void InnerExpandSetCorrectly()
        {
            // Arrange & Act
            ExpandTermToken innerExpandTerm = new ExpandTermToken(new NonSystemToken("abc", null, null), null, null);

            ExpandToken expand = new ExpandToken(new[] { innerExpandTerm });

            SelectTermToken selectTerm = new SelectTermToken(new NonSystemToken("stuff", null, null), null, expand);

            // Assert
            Assert.NotNull(selectTerm.ExpandOption);
            ExpandTermToken token = Assert.Single(selectTerm.ExpandOption.ExpandTerms);

            ReferenceEquals(token.PathToNavigationProp, token.PathToProperty);
            Assert.Equal("abc", token.PathToProperty.Identifier);
        }
예제 #24
0
        public void InnerQueryOptionsPropertySetCorrectly()
        {
            // Arrange & Act
            SelectTermToken selectTermToken1 = new SelectTermToken(new NonSystemToken("stuff", null, null));
            SelectTermToken selectTermToken2 = new SelectTermToken(new NonSystemToken("stuff", null, null), null);

            // Assert
            Assert.NotNull(selectTermToken1.PathToProperty);
            NonSystemToken nonSystemToken = Assert.IsType <NonSystemToken>(selectTermToken1.PathToProperty);

            Assert.Equal("stuff", nonSystemToken.Identifier);

            Assert.NotNull(selectTermToken2.PathToProperty);
            nonSystemToken = Assert.IsType <NonSystemToken>(selectTermToken2.PathToProperty);
            Assert.Equal("stuff", nonSystemToken.Identifier);
        }
예제 #25
0
        [InlineData("($expand=two($expand=three;);)")] // Deep nested expands with semicolon
        public void DeepNestedExpandsInSelectAreAllowed(string optionsText)
        {
            // Arrange & Act
            SelectTermToken selectTerm = this.ParseSelectOptions(optionsText);

            // Assert
            Assert.NotNull(selectTerm);
            Assert.NotNull(selectTerm.ExpandOption);

            ExpandTermToken two = Assert.Single(selectTerm.ExpandOption.ExpandTerms);

            two.PathToNavigationProp.ShouldBeNonSystemToken("two");

            ExpandTermToken three = Assert.Single(two.ExpandOption.ExpandTerms);

            three.PathToNavigationProp.ShouldBeNonSystemToken("three");
        }
예제 #26
0
        public void ParseNestedOrderByAndSearchInSelectWorks()
        {
            // Arrange & Act
            SelectToken selectToken = ParseSelectClause("Address($orderby=abc;$search=xyz)");

            // Assert
            Assert.NotNull(selectToken);
            SelectTermToken selectTermToken = Assert.Single(selectToken.SelectTerms);

            selectTermToken.PathToProperty.ShouldBeNonSystemToken("Address");
            Assert.NotNull(selectTermToken.OrderByOptions);
            OrderByToken orderBy = Assert.Single(selectTermToken.OrderByOptions);

            orderBy.Expression.ShouldBeEndPathToken("abc");

            Assert.NotNull(selectTermToken.SearchOption);
            selectTermToken.SearchOption.ShouldBeStringLiteralToken("xyz");
        }
예제 #27
0
        public void InnerComputeSetCorrectly()
        {
            // Arrange & Act
            ComputeToken    compute    = new ComputeToken(new ComputeExpressionToken[] { });
            SelectTermToken selectTerm = new SelectTermToken(new NonSystemToken("stuff", null, null),
                                                             null /*filterOption*/,
                                                             null /*orderByOption*/,
                                                             null /*topOption*/,
                                                             null /*skipOption*/,
                                                             null /*countQueryOption*/,
                                                             null /*searchOption*/,
                                                             null /*selectOption*/,
                                                             compute);

            // Assert
            Assert.NotNull(selectTerm.ComputeOption);
            Assert.Same(compute, selectTerm.ComputeOption);
        }
예제 #28
0
        public void InnerOrderBySetCorrectly()
        {
            // Arrange & Act
            OrderByToken    orderBy    = new OrderByToken(new LiteralToken(42), OrderByDirection.Descending);
            SelectTermToken selectTerm = new SelectTermToken(new NonSystemToken("stuff", null, null),
                                                             null, new OrderByToken[] { orderBy }, null, null, null, null, null, null);

            // Assert
            Assert.NotNull(selectTerm.OrderByOptions);
            OrderByToken expectedOrderBy = Assert.Single(selectTerm.OrderByOptions);

            Assert.Equal(QueryTokenKind.OrderBy, expectedOrderBy.Kind);

            Assert.NotNull(expectedOrderBy.Expression);
            LiteralToken literalToken = Assert.IsType <LiteralToken>(expectedOrderBy.Expression);

            Assert.Equal(QueryTokenKind.Literal, literalToken.Kind);
            Assert.Equal(42, literalToken.Value);
        }
예제 #29
0
        public void ParseNestedSelectInSelectWorks()
        {
            // Arrange & Act
            SelectToken selectToken = ParseSelectClause("Address($select=abc,xyz)");

            // Assert
            Assert.NotNull(selectToken);
            SelectTermToken selectTermToken = Assert.Single(selectToken.SelectTerms);

            selectTermToken.PathToProperty.ShouldBeNonSystemToken("Address");

            Assert.NotNull(selectTermToken.SelectOption);
            Assert.Equal(2, selectTermToken.SelectOption.SelectTerms.Count());
            SelectTermToken nestedSelectTermToken = selectTermToken.SelectOption.SelectTerms.First();

            nestedSelectTermToken.PathToProperty.ShouldBeNonSystemToken("abc");

            nestedSelectTermToken = selectTermToken.SelectOption.SelectTerms.Last();
            nestedSelectTermToken.PathToProperty.ShouldBeNonSystemToken("xyz");
        }
        public void SelectedAndExpandedNavPropProduceExpandedNavPropSelectionItemAndPathSelectionItem()
        {
            // Arrange: $select=MyDog&$expand=MyDog
            ExpandTermToken innerExpandTermToken = new ExpandTermToken(new NonSystemToken("MyDog", null, null));
            ExpandToken     expandToken          = new ExpandToken(new ExpandTermToken[] { innerExpandTermToken });

            SelectTermToken innerSelectTermToken = new SelectTermToken(new NonSystemToken("MyDog", null, null));
            SelectToken     selectToken          = new SelectToken(new SelectTermToken[] { innerSelectTermToken });

            // Act
            SelectExpandClause clause = BinderForPerson.Bind(expandToken, selectToken);

            // Assert
            Assert.NotNull(clause);
            Assert.False(clause.AllSelected);
            Assert.Equal(2, clause.SelectedItems.Count());

            clause.SelectedItems.First().ShouldBeExpansionFor(HardCodedTestModel.GetPersonMyDogNavProp());
            clause.SelectedItems.Last().ShouldBePathSelectionItem(new ODataPath(new NavigationPropertySegment(HardCodedTestModel.GetPersonMyDogNavProp(), HardCodedTestModel.GetPeopleSet())));
        }