public void InequalityIsCorrect()
 {
     EntitySetSegment segment1 = new EntitySetSegment(HardCodedTestModel.GetPeopleSet());
     EntitySetSegment segment2 = new EntitySetSegment(HardCodedTestModel.GetDogsSet());
     BatchSegment segment3 = BatchSegment.Instance;
     segment1.Equals(segment2).Should().BeFalse();
     segment1.Equals(segment3).Should().BeFalse();
 }
        public void Translate_EntitySetSegment_To_EntitySetPathSegment_Works()
        {
            // Arrange
            IEdmEntitySet entityset = _model.FindDeclaredEntitySet("RoutingCustomers");
            EntitySetSegment segment = new EntitySetSegment(entityset);

            // Act
            IEnumerable<ODataPathSegment> segments = _translator.Translate(segment);

            // Assert
            ODataPathSegment pathSegment = Assert.Single(segments);
            EntitySetPathSegment entitySetPathSegment = Assert.IsType<EntitySetPathSegment>(pathSegment);
            Assert.Same(entityset, entitySetPathSegment.EntitySetBase);
        }
示例#3
0
 /// <summary>
 /// Translate an EntitySetSegment
 /// </summary>
 /// <param name="segment">the segment to Translate</param>
 /// <returns>Defined by the implementer.</returns>
 public override string Translate(EntitySetSegment segment)
 {
     Debug.Assert(segment != null, "segment != null");
     return("/" + segment.EntitySet.Name);
 }
示例#4
0
 /// <summary>
 /// Translate an EntitySetSegment
 /// </summary>
 /// <param name="segment">the segment to Translate</param>
 /// <returns>Defined by the implementer.</returns>
 public virtual T Translate(EntitySetSegment segment)
 {
     throw new NotImplementedException();
 }
示例#5
0
 /// <summary>
 /// Translate an EntitySetSegment
 /// </summary>
 /// <param name="segment">the segment to Translate</param>
 /// <returns>Translated odata path segment.</returns>
 public override ODataPathSegment Translate(EntitySetSegment segment)
 {
     return(segment);
 }
 public void TargetEdmEntitySetIsEntitySet()
 {
     EntitySetSegment segment = new EntitySetSegment(HardCodedTestModel.GetPeopleSet());
     segment.TargetEdmNavigationSource.Should().BeSameAs(HardCodedTestModel.GetPeopleSet());
 }
示例#7
0
        /// <summary>
        /// Tries to parse a segment as an entity set or singleton.
        /// </summary>
        /// <param name="identifier">The name of the segment</param>
        /// <param name="parenthesisExpression">The parenthesis expression</param>
        /// <returns>Whether or not the identifier referred to an entity set or singleton.</returns>
        private bool TryCreateSegmentForNavigationSource(string identifier, string parenthesisExpression)
        {
            ODataPathSegment segment = null;
            IEdmEntitySet targetEdmEntitySet;
            IEdmSingleton targetEdmSingleton;

            IEdmNavigationSource source = this.configuration.Resolver.ResolveNavigationSource(this.configuration.Model, identifier);

            if ((targetEdmEntitySet = source as IEdmEntitySet) != null)
            {
                segment = new EntitySetSegment(targetEdmEntitySet) { Identifier = identifier };
            }
            else if ((targetEdmSingleton = source as IEdmSingleton) != null)
            {
                segment = new SingletonSegment(targetEdmSingleton) { Identifier = identifier };
            }

            if (segment != null)
            {
                this.parsedSegments.Add(segment);
                this.TryBindKeyFromParentheses(parenthesisExpression);
                return true;
            }

            return false;
        }
示例#8
0
 /// <summary>
 /// Handle an EntitySetSegment
 /// </summary>
 /// <param name="segment">the segment to Handle</param>
 public virtual void Handle(EntitySetSegment segment)
 {
     throw new NotImplementedException();
 }
        /// <summary>
        /// Remove redundant entity set path to keep the last non-contained entity set.
        /// </summary>
        private void RemoveRedundantEntitySetPath()
        {
            List<ODataPathSegment> newSegments = new List<ODataPathSegment>();

            // Find the last non-contained navigation property segment.
            var navigationPropertySegment = this.lastSegment as NavigationPropertySegment;
            while (navigationPropertySegment == null ||
                navigationPropertySegment.NavigationProperty.ContainsTarget ||
                navigationPropertySegment.NavigationProperty.TargetMultiplicity() == EdmMultiplicity.One)
            {
                newSegments.Insert(0, this.lastSegment);
                this.RemoveLastSegment();
                navigationPropertySegment = this.lastSegment as NavigationPropertySegment;

                // Have traversed all segments.
                if (this.lastSegment == null)
                {
                    break;
                }
            }

            // Translate the last non-contained property segment to entity set segment.
            if (navigationPropertySegment != null)
            {
                var entitySetSegment = new EntitySetSegment(navigationPropertySegment.NavigationSource as IEdmEntitySet);
                newSegments.Insert(0, entitySetSegment);
            }

            // Set segments to newSegments.
            this.segments.Clear();
            this.segments = newSegments;
            this.lastSegment = this.segments.Last();
        }
示例#10
0
 public void EqualityIsCorrect()
 {
     EntitySetSegment segment1 = new EntitySetSegment(HardCodedTestModel.GetPeopleSet());
     EntitySetSegment segment2 = new EntitySetSegment(HardCodedTestModel.GetPeopleSet());
     segment1.Equals(segment2).Should().BeTrue();
 }
示例#11
0
 public void TypeComuptedCorrecretly()
 {
     EntitySetSegment segment = new EntitySetSegment(HardCodedTestModel.GetPeopleSet());
     segment.EdmType.Should().BeOfType<EdmCollectionType>();
     segment.EdmType.As<EdmCollectionType>().ShouldBeEquivalentTo<IEdmType>(new EdmCollectionType(new EdmEntityTypeReference(HardCodedTestModel.GetPersonType(), false)));
 }
示例#12
0
 public void EntitySetSetCorrectly()
 {
     EntitySetSegment segment = new EntitySetSegment(HardCodedTestModel.GetPeopleSet());
     segment.EntitySet.Name.Should().Be(HardCodedTestModel.GetPeopleSet().Name);
 }
示例#13
0
 public void SingleResultIsFalse()
 {
     EntitySetSegment segment = new EntitySetSegment(HardCodedTestModel.GetPeopleSet());
     segment.SingleResult.Should().BeFalse();
 }
示例#14
0
 public void TargetKindIsResource()
 {
     EntitySetSegment segment = new EntitySetSegment(HardCodedTestModel.GetPeopleSet());
     segment.TargetKind.Should().Be(RequestTargetKind.Resource);
 }
示例#15
0
 public void TargetEdmTypeIsTypeOfEntitySet()
 {
     EntitySetSegment segment = new EntitySetSegment(HardCodedTestModel.GetPeopleSet());
     segment.TargetEdmType.Should().BeSameAs(HardCodedTestModel.GetPeopleSet().EntityType());
 }
示例#16
0
        public void TargetEdmEntitySetIsEntitySet()
        {
            EntitySetSegment segment = new EntitySetSegment(HardCodedTestModel.GetPeopleSet());

            segment.TargetEdmNavigationSource.Should().BeSameAs(HardCodedTestModel.GetPeopleSet());
        }
示例#17
0
        public void TargetEdmTypeIsTypeOfEntitySet()
        {
            EntitySetSegment segment = new EntitySetSegment(HardCodedTestModel.GetPeopleSet());

            segment.TargetEdmType.Should().BeSameAs(HardCodedTestModel.GetPeopleSet().EntityType());
        }
 public override INavigatable Translate(EntitySetSegment segment)
 {
     return(this.modelContext.GetEntitySetOrThrow(segment.EntitySet.Name));
 }
示例#19
0
        public override void Handle(EntitySetSegment segment)
        {
            this.ThrowIfResolved();

            this.NavigationSource = segment.EntitySet;
            this.Property = null;
            this.Type = segment.EdmType;
            this.ElementType = this.GetElementType(this.Type);

            this.PushParentSegment();
            this.childSegments.Add(segment);

            if (segment.EntitySet is IEdmEntitySet)
            {
                this.canonicalSegments.Clear();
            }

            this.canonicalSegments.Add(segment);
        }
示例#20
0
 public override bool Translate(EntitySetSegment segment)
 {
     return(GetNextSegment() is EntitySetSegment entitySetSegment && entitySetSegment.EntitySet == segment.EntitySet);
 }
示例#21
0
 /// <summary>
 /// Handle an EntitySetSegment
 /// </summary>
 /// <param name="segment">the segment to Handle</param>
 public virtual void Handle(EntitySetSegment segment)
 {
     throw new NotImplementedException();
 }
 /// <summary>
 /// Translate an EntitySetSegment
 /// </summary>
 /// <param name="segment">the segment to Translate</param>
 /// <returns>Translated the path segment template.</returns>
 public override ODataSegmentTemplate Translate(EntitySetSegment segment)
 {
     return(new EntitySetSegmentTemplate(segment));
 }
示例#23
0
        private void RemoveRedundantContainingPathSegments()
        {
            // Find the last non-contained navigation property segment:
            //   Collection valued: entity set
            //   -or-
            //   Single valued: singleton
            // Copy over other path segments such as: not a navigation path segment, contained navigation property,
            // single valued navigation property with navigation source targetting an entity set (we won't have key
            // information for that navigation property.)
            _segments.Reverse();
            NavigationPropertySegment navigationPropertySegment = null;
            List<ODataPathSegment> newSegments = new List<ODataPathSegment>();
            foreach (ODataPathSegment segment in _segments)
            {
                navigationPropertySegment = segment as NavigationPropertySegment;
                if (navigationPropertySegment != null)
                {
                    EdmNavigationSourceKind navigationSourceKind =
                        navigationPropertySegment.NavigationSource.NavigationSourceKind();
                    if ((navigationPropertySegment.NavigationProperty.TargetMultiplicity() == EdmMultiplicity.Many &&
                         navigationSourceKind == EdmNavigationSourceKind.EntitySet) ||
                        (navigationSourceKind == EdmNavigationSourceKind.Singleton))
                    {
                        break;
                    }
                }

                newSegments.Insert(0, segment);
            }

            // Start the path with the navigation source of the navigation property found above.
            if (navigationPropertySegment != null)
            {
                IEdmNavigationSource navigationSource = navigationPropertySegment.NavigationSource;
                Contract.Assert(navigationSource != null);
                if (navigationSource.NavigationSourceKind() == EdmNavigationSourceKind.Singleton)
                {
                    SingletonSegment singletonSegment = new SingletonSegment((IEdmSingleton)navigationSource);
                    newSegments.Insert(0, singletonSegment);
                }
                else
                {
                    Contract.Assert(navigationSource.NavigationSourceKind() == EdmNavigationSourceKind.EntitySet);
                    EntitySetSegment entitySetSegment = new EntitySetSegment((IEdmEntitySet)navigationSource);
                    newSegments.Insert(0, entitySetSegment);
                }
            }

            _segments = newSegments;
        }
示例#24
0
 /// <summary>
 /// Handle a EntitySetSegment
 /// </summary>
 /// <param name="segment">the segment to handle</param>
 public override void Handle(EntitySetSegment segment)
 {
 }