コード例 #1
0
        /// <summary>
        /// Returns the type from the entity model type annotation for this payload element.
        /// </summary>
        /// <param name="payloadElement">The payload element to return the type for.</param>
        /// <returns>The type from the annotation or null if none was present.</returns>
        private static IEdmTypeReference GetEdmTypeFromEntityModelTypeAnnotation(ODataPayloadElement payloadElement)
        {
            Debug.Assert(payloadElement != null, "payloadElement != null");

            EntityModelTypeAnnotation typeAnnotation = payloadElement.GetAnnotation <EntityModelTypeAnnotation>();

            return(typeAnnotation == null ? null : typeAnnotation.EdmModelType);
        }
コード例 #2
0
        /// <summary>
        /// Gets the <see cref="EntityType"/> of the specified entry or feed payload element.
        /// </summary>
        /// <param name="payloadElement">The payload element to get the entity type for.</param>
        /// <param name="model">The model to find the entity type in.</param>
        /// <returns>The <see cref="EntityType"/> of the <paramref name="payloadElement"/>.</returns>
        public static IEdmEntityType GetPayloadElementEntityType(ODataPayloadElement payloadElement, IEdmModel model)
        {
            ExceptionUtilities.CheckArgumentNotNull(payloadElement, "payloadElement");
            ExceptionUtilities.CheckArgumentNotNull(model, "model");

            ODataPayloadKind payloadKind = payloadElement.GetPayloadKindFromPayloadElement();

            ExceptionUtilities.Assert(
                payloadKind == ODataPayloadKind.Resource || payloadKind == ODataPayloadKind.ResourceSet,
                "Can only determine entity type for entry or feed payloads.");

            EntityModelTypeAnnotation typeAnnotation = payloadElement.GetAnnotation <EntityModelTypeAnnotation>();

            if (typeAnnotation != null)
            {
                var entityDataType = typeAnnotation.EdmModelType;
                Debug.Assert(entityDataType != null, "entityDataType != null");
                return(model.EntityTypes().Single(et => et.FullName() == entityDataType.FullName()));
            }

            string entityTypeName;

            if (payloadKind == ODataPayloadKind.Resource)
            {
                EntityInstance entity = payloadElement as EntityInstance;
                Debug.Assert(entity != null, "entity != null");
                entityTypeName = entity.FullTypeName;
                return(model.EntityTypes().Single(et => et.TestFullName() == entityTypeName));
            }
            else
            {
                //if feed has entries figure out type otherwise use first entity type
                EntitySetInstance feed = payloadElement as EntitySetInstance;
                Debug.Assert(feed != null, "feed != null");
                if (feed.Count > 0)
                {
                    return(model.EntityTypes().Single(et => et.TestFullName() == ((TypedValue)feed.First()).FullTypeName));
                }
                else
                {
                    return(model.EntityTypes().First());
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// Validator for spatial values.
        /// </summary>
        /// <param name="payloadElement">The payload element to validate.</param>
        /// <param name="testConfigLimits">The test configuration limits to modify.</param>
        public static void SpatialValueValidator(ODataPayloadElement payloadElement, TestConfigurationLimits testConfigLimits)
        {
            PrimitiveValue primitiveValue = payloadElement as PrimitiveValue;

            ExceptionUtilities.Assert(primitiveValue != null, "This validator only works on primitive values.");

            if (primitiveValue.ClrValue is ISpatial)
            {
                // Spatial values require V3.
                testConfigLimits.RaiseMinPayloadVersion(ODataVersion.V4);
            }
            else if (primitiveValue.ClrValue == null)
            {
                EntityModelTypeAnnotation typeAnnotation = primitiveValue.GetAnnotation <EntityModelTypeAnnotation>();
                if (typeAnnotation != null && typeAnnotation.EdmModelType.Definition.IsSpatial())
                {
                    testConfigLimits.RaiseMinPayloadVersion(ODataVersion.V4);
                }
            }
        }
コード例 #4
0
        /// <summary>
        /// Determins the payload kind appropriate for the payload element used for this test.
        /// </summary>
        /// <param name="payloadElement">The payload element to get the kind for.</param>
        /// <returns>The payload kind to be used for this test.</returns>
        public static ODataPayloadKind GetPayloadKindFromPayloadElement(this ODataPayloadElement payloadElement)
        {
            if (payloadElement == null)
            {
                return(ODataPayloadKind.Unsupported);
            }

            switch (payloadElement.ElementType)
            {
            case ODataPayloadElementType.NullPropertyInstance:
            case ODataPayloadElementType.PrimitiveProperty:
            case ODataPayloadElementType.PrimitiveMultiValueProperty:
            case ODataPayloadElementType.NamedStreamInstance:
            case ODataPayloadElementType.NavigationPropertyInstance:
                return(ODataPayloadKind.Property);

            case ODataPayloadElementType.ComplexMultiValueProperty:
            case ODataPayloadElementType.EntitySetInstance:
                return(ODataPayloadKind.ResourceSet);

            case ODataPayloadElementType.ComplexProperty:
            case ODataPayloadElementType.EntityInstance:
                return(ODataPayloadKind.Resource);

            case ODataPayloadElementType.PrimitiveCollection:
            case ODataPayloadElementType.ComplexInstanceCollection:
            case ODataPayloadElementType.PrimitiveMultiValue:
            case ODataPayloadElementType.ComplexMultiValue:
                return(ODataPayloadKind.Collection);

            case ODataPayloadElementType.ODataErrorPayload:
                return(ODataPayloadKind.Error);

            case ODataPayloadElementType.DeferredLink:
                return(ODataPayloadKind.EntityReferenceLink);

            case ODataPayloadElementType.LinkCollection:
                return(ODataPayloadKind.EntityReferenceLinks);

            case ODataPayloadElementType.ServiceDocumentInstance:
                return(ODataPayloadKind.ServiceDocument);

            case ODataPayloadElementType.PrimitiveValue:
                EntityModelTypeAnnotation typeAnnotation = payloadElement.GetAnnotation <EntityModelTypeAnnotation>();
                if (typeAnnotation != null && ((IEdmPrimitiveType)typeAnnotation.EdmModelType.Definition).PrimitiveKind == EdmPrimitiveTypeKind.Binary)
                {
                    return(ODataPayloadKind.BinaryValue);
                }

                return(ODataPayloadKind.Value);

            case ODataPayloadElementType.BatchRequestPayload:
            case ODataPayloadElementType.BatchResponsePayload:
                return(ODataPayloadKind.Batch);

            case ODataPayloadElementType.ComplexInstance:
                // TODO: ODataLib test item: Add new ODataPayloadElement for parameters payload
                return(ODataPayloadKind.Parameter);

            default:
                ExceptionUtilities.Assert(
                    false,
                    "Payload element type '{0}' is not yet recognized by GetPayloadKindFromPayloadElement.",
                    payloadElement.ElementType);
                return(ODataPayloadKind.Unsupported);
            }
        }