public void GetEdmType_ThrowsArgumentNull_ForInputParameters()
        {
            // Arrange & Act & Assert
            IODataTypeMapper mapper = null;

            ExceptionAssert.ThrowsArgumentNull(() => mapper.GetEdmType(null, null), "mapper");
        }
        /// <summary>
        /// Gets the corresponding Edm type <see cref="IEdmType"/> for the given CLR type <see cref="Type"/>.
        /// </summary>
        /// <param name="mapper">The type mapper.</param>
        /// <param name="edmModel">The given Edm model.</param>
        /// <param name="clrType">The given CLR type.</param>
        /// <returns>Null or the corresponding Edm type.</returns>
        public static IEdmType GetEdmType(this IODataTypeMapper mapper, IEdmModel edmModel, Type clrType)
        {
            if (mapper == null)
            {
                throw Error.ArgumentNull(nameof(mapper));
            }

            return(mapper.GetEdmTypeReference(edmModel, clrType)?.Definition);
        }
        public void GetClrType_ThrowsArgumentNull_ForInputParameters()
        {
            // Arrange & Act & Assert
            IODataTypeMapper mapper = null;

            ExceptionAssert.ThrowsArgumentNull(() => mapper.GetClrType(null, null), "mapper");

            // Arrange & Act & Assert
            mapper = new Mock <IODataTypeMapper>().Object;
            ExceptionAssert.ThrowsArgumentNull(() => mapper.GetClrType(null, null), "edmType");
        }
        public void GetAndSetTypeMapper_RoundTrip()
        {
            // Arrange
            IODataTypeMapper mapper = new Mock <IODataTypeMapper>().Object;
            IEdmModel        model  = new EdmModel();

            // Act
            model.SetTypeMapper(mapper);
            IODataTypeMapper actual = model.GetTypeMapper();

            // Assert
            Assert.Same(mapper, actual);
        }
        /// <summary>
        /// Gets the corresponding <see cref="Type"/> for a given Edm type <see cref="IEdmTypeReference"/>.
        /// </summary>
        /// <param name="mapper">The type mapper.</param>
        /// <param name="edmModel">The Edm model.</param>
        /// <param name="edmType">The Edm type.</param>
        /// <param name="assembliesResolver">The assembly resolver.</param>
        /// <returns>Null or the CLR type.</returns>
        public static Type GetClrType(this IODataTypeMapper mapper, IEdmModel edmModel, IEdmTypeReference edmType, IAssemblyResolver assembliesResolver)
        {
            if (mapper == null)
            {
                throw Error.ArgumentNull(nameof(mapper));
            }

            if (edmType == null)
            {
                throw Error.ArgumentNull(nameof(edmType));
            }

            return(mapper.GetClrType(edmModel, edmType.Definition, edmType.IsNullable, assembliesResolver));
        }
        /// <summary>
        /// Gets the corresponding <see cref="Type"/> for a given Edm primitive type <see cref="IEdmPrimitiveTypeReference"/>.
        /// </summary>
        /// <param name="mapper">The type mapper.</param>
        /// <param name="primitiveType">The Edm primitive type reference.</param>
        /// <returns>Null or the CLR type.</returns>
        public static Type GetPrimitiveType(this IODataTypeMapper mapper, IEdmPrimitiveTypeReference primitiveType)
        {
            if (mapper == null)
            {
                throw Error.ArgumentNull(nameof(mapper));
            }

            if (primitiveType == null)
            {
                throw Error.ArgumentNull(nameof(primitiveType));
            }

            return(mapper.GetClrPrimitiveType(primitiveType.PrimitiveDefinition(), primitiveType.IsNullable));
        }
        /// <summary>
        /// Sets the OData type mapping provider to the model.
        /// </summary>
        /// <param name="model">The Edm model.</param>
        /// <param name="mapper">The given mapper.</param>
        public static void SetTypeMapper(this IEdmModel model, IODataTypeMapper mapper)
        {
            if (model == null)
            {
                throw Error.ArgumentNull(nameof(model));
            }

            if (mapper == null)
            {
                throw Error.ArgumentNull(nameof(mapper));
            }

            model.SetAnnotationValue(model, mapper);
        }
        /// <summary>
        /// Gets the OData type mapping provider from the model.
        /// </summary>
        /// <param name="model">The Edm model.</param>
        /// <returns>The <see cref="IODataTypeMapper"/>.</returns>
        public static IODataTypeMapper GetTypeMapper(this IEdmModel model)
        {
            // use the default one if no model or no mapper registered.
            if (model == null)
            {
                return(DefaultODataTypeMapper.Default);
            }

            IODataTypeMapper provider = model.GetAnnotationValue <IODataTypeMapper>(model);

            if (provider == null)
            {
                return(DefaultODataTypeMapper.Default);
            }

            return(provider);
        }
 /// <summary>
 /// Gets the corresponding <see cref="Type"/> for a given Edm type <see cref="IEdmTypeReference"/>.
 /// </summary>
 /// <param name="mapper">The type mapper.</param>
 /// <param name="edmModel">The Edm model.</param>
 /// <param name="edmType">The Edm type reference.</param>
 /// <returns>Null or the CLR type.</returns>
 public static Type GetClrType(this IODataTypeMapper mapper, IEdmModel edmModel, IEdmTypeReference edmType)
 {
     return(mapper.GetClrType(edmModel, edmType, AssemblyResolverHelper.Default));
 }