public void CombineTermsWorksOnASingleTerm()
 {
     // $expand=stuff
     ExpandToken expand = new ExpandToken(new ExpandTermToken[] { new ExpandTermToken(new NonSystemToken("stuff", null, null)) });
     ExpandTreeNormalizer expandTreeNormalizer = new ExpandTreeNormalizer();
     ExpandToken combinedExpand = expandTreeNormalizer.CombineTerms(expand);
     combinedExpand.ExpandTerms.Single().ShouldBeExpandTermToken("stuff", false);
 }
 public void CombineTermsWorksForMultipleTerms()
 {
     // $expand=1($expand=2), 1($expand=3)
     List<ExpandTermToken> expandTerms = new List<ExpandTermToken>();
     var token2 = new NonSystemToken("2", null, null);
     var token3 = new NonSystemToken("3", null, null);
     expandTerms.Add(new ExpandTermToken(new NonSystemToken("1", /*namedValues*/null, /*nextToken*/null), /*SelectToken*/null, new ExpandToken(new List<ExpandTermToken>() { new ExpandTermToken(token2) })));
     expandTerms.Add(new ExpandTermToken(new NonSystemToken("1", /*namedValues*/null, /*nextToken*/null), /*SelectToken*/null, new ExpandToken(new List<ExpandTermToken>() { new ExpandTermToken(token3) })));
     ExpandToken expand = new ExpandToken(expandTerms);
     ExpandTreeNormalizer expandTreeNormalizer = new ExpandTreeNormalizer();
     ExpandToken combinedExpand = expandTreeNormalizer.CombineTerms(expand);
     combinedExpand.ExpandTerms.Single().ShouldBeExpandTermToken("1", true);
     combinedExpand.ExpandTerms.ElementAt(0).ExpandOption.ExpandTerms.Should().Contain(t => t.PathToNavProp == token2);
     combinedExpand.ExpandTerms.ElementAt(0).ExpandOption.ExpandTerms.Should().Contain(t => t.PathToNavProp == token3);
 }
        public void AddTermsWorksForNestedMultipleTerms()
        {
            // $expand=1($expand=2($expand=5;),4;), 1($expand=2($expand=0;);)
            ExpandTermToken innerExpandTerm1 = new ExpandTermToken(new NonSystemToken("2", null, null),
                                                       null /*selectOption*/,
                                                       new ExpandToken(new ExpandTermToken[] { new ExpandTermToken(new NonSystemToken("5", null, null)) }));
            ExpandTermToken innerExpandTerm2 = new ExpandTermToken(new NonSystemToken("4", null, null));
            ExpandTermToken outerExpandTerm1 = new ExpandTermToken(new NonSystemToken("1", null, null),
                                                                   null /*selectOption*/,
                                                                   new ExpandToken(new ExpandTermToken[] { innerExpandTerm1, innerExpandTerm2 }));

            ExpandTermToken innerExpandTerm3 = new ExpandTermToken(new NonSystemToken("2", null, null),
                                                                   null /*selectOption*/,
                                                                   new ExpandToken(new ExpandTermToken[] { new ExpandTermToken(new NonSystemToken("0", null, null)) }));
            ExpandTermToken outerExpandTerm2 = new ExpandTermToken(new NonSystemToken("1", null, null),
                                                                   null /*selectOption*/,
                                                                   new ExpandToken(new ExpandTermToken[] { innerExpandTerm3 }));
            ExpandTreeNormalizer expandTreeNormalizer = new ExpandTreeNormalizer();
            var addedToken = expandTreeNormalizer.CombineTerms(outerExpandTerm1, outerExpandTerm2);
            addedToken.ShouldBeExpandTermToken("1", true).And.ExpandOption.ExpandTerms.Should().Contain(innerExpandTerm2);
            ExpandTermToken twoToken = addedToken.ExpandOption.ExpandTerms.FirstOrDefault(x => x.PathToNavProp.Identifier == "2");
            twoToken.ShouldBeExpandTermToken("2", true);
            ExpandTermToken fiveToken = twoToken.ExpandOption.ExpandTerms.FirstOrDefault(x => x.PathToNavProp.Identifier == "5");
            ExpandTermToken zeroToken = twoToken.ExpandOption.ExpandTerms.FirstOrDefault(x => x.PathToNavProp.Identifier == "0");
            fiveToken.ShouldBeExpandTermToken("5", true);
            zeroToken.ShouldBeExpandTermToken("0", true);
        }
        public void AddTermsWorksAtDeepLevel()
        {
            // $expand=1($expand=2($expand=3;);), 1($expand=2($expand=0;);)

            ExpandTermToken innerInnerExpandTerm1 = new ExpandTermToken(new NonSystemToken("3", null, null));
            ExpandTermToken innerExpandTerm1 = new ExpandTermToken(new NonSystemToken("2", null, null),
                                                                   null /*selectOption*/,
                                                                   new ExpandToken(new ExpandTermToken[] { innerInnerExpandTerm1 }));
            ExpandTermToken outerExpandTerm1 = new ExpandTermToken(new NonSystemToken("1", null, null),
                                                                   null /*selectOption*/,
                                                                   new ExpandToken(new ExpandTermToken[] { innerExpandTerm1 }));

            ExpandTermToken innerInnerExpandTerm2 = new ExpandTermToken(new NonSystemToken("0", null, null));
            ExpandTermToken innerExpandTerm2 = new ExpandTermToken(new NonSystemToken("2", null, null),
                                                                   null /*selectOption*/,
                                                                   new ExpandToken(new ExpandTermToken[] { innerInnerExpandTerm2 }));
            ExpandTermToken outerExpandTerm2 = new ExpandTermToken(new NonSystemToken("1", null, null),
                                                                   null /*selectOption*/,
                                                                    new ExpandToken(new ExpandTermToken[] { innerExpandTerm2 }));
            ExpandTreeNormalizer expandTreeNormalizer = new ExpandTreeNormalizer();
            var addedToken = expandTreeNormalizer.CombineTerms(outerExpandTerm1, outerExpandTerm2);
            addedToken.ShouldBeExpandTermToken("1", true)
                .And.ExpandOption.ExpandTerms.Single().ShouldBeExpandTermToken("2", true)
                .And.ExpandOption.ExpandTerms.Should().Contain(innerInnerExpandTerm1)
                .And.Contain(innerInnerExpandTerm2);
        }
 public void AddTermsWorksForOneLevelBelow()
 {
     // $expand=1($expand=2;), 1($expand=3;)
     ExpandTermToken innerExpandTerm1 = new ExpandTermToken(new NonSystemToken("2", null, null));
     ExpandToken innerExpand1 = new ExpandToken(new ExpandTermToken[] { innerExpandTerm1 });
     ExpandTermToken outerToken1 = new ExpandTermToken(new NonSystemToken("1", null, null),
                                                       null /*selectOption*/,
                                                       innerExpand1);
     ExpandTermToken innerExpandTerm2 = new ExpandTermToken(new NonSystemToken("3", null, null));
     ExpandToken innerExpand2 = new ExpandToken(new ExpandTermToken[] { innerExpandTerm2 });
     ExpandTermToken outerToken2 = new ExpandTermToken(new NonSystemToken("1", null, null),
                                                       null /*selectOption*/,
                                                       innerExpand2);
     ExpandTreeNormalizer expandTreeNormalizer = new ExpandTreeNormalizer();
     var addedToken = expandTreeNormalizer.CombineTerms(outerToken1, outerToken2);
     addedToken.ShouldBeExpandTermToken("1", true).And.ExpandOption.ExpandTerms.Should().Contain(innerExpandTerm2).And.Contain(innerExpandTerm1);
 }
 public void AddTermsDoesNothingForIdenticalTrees()
 {
     // $expand=1($expand=2;)
     ExpandToken innerExpand = new ExpandToken(new ExpandTermToken[] { new ExpandTermToken(new NonSystemToken("2", null, null)) });
     ExpandTermToken outerExpandToken = new ExpandTermToken(new NonSystemToken("1", null, null),
                                                            null /*selectOption*/,
                                                            innerExpand);
     ExpandTreeNormalizer expandTreeNormalizer = new ExpandTreeNormalizer();
     var addedToken = expandTreeNormalizer.CombineTerms(outerExpandToken, outerExpandToken);
     addedToken.ShouldBeExpandTermToken("1", true).And.ExpandOption.ExpandTerms.Single().ShouldBeExpandTermToken("2", true);
 }