public static ConstantNode ShouldBeEnumNode(this QueryNode node, IEdmEnumType enumType, Int64 value) { Assert.NotNull(node); var enumNode = Assert.IsType <ConstantNode>(node); Assert.Equal(enumType.FullTypeName(), enumNode.TypeReference.FullName()); Assert.Equal(value + "", ((ODataEnumValue)enumNode.Value).Value); Assert.Equal(enumType.FullTypeName(), ((ODataEnumValue)enumNode.Value).TypeName); return(enumNode); }
public static AndConstraint <ConstantNode> ShouldBeEnumNode(this QueryNode node, IEdmEnumType enumType, Int64 value) { node.Should().BeOfType <ConstantNode>(); var enumNode = node.As <ConstantNode>(); enumNode.TypeReference.FullName().Should().Be(enumType.FullTypeName()); ((ODataEnumValue)enumNode.Value).Value.Should().Be(value + ""); ((ODataEnumValue)enumNode.Value).TypeName.Should().Be(enumType.FullTypeName()); return(new AndConstraint <ConstantNode>(enumNode)); }
public void CreateEdmTypeSchemaReturnSchemaForEnumType(bool isNullable, OpenApiSpecVersion specVersion) { // Arrange IEdmModel model = EdmModelHelper.TripServiceModel; IEdmEnumType enumType = model.SchemaElements.OfType <IEdmEnumType>().First(c => c.Name == "PersonGender"); Assert.NotNull(enumType); // guard IEdmEnumTypeReference enumTypeReference = new EdmEnumTypeReference(enumType, isNullable); ODataContext context = new ODataContext(model); context.Settings.OpenApiSpecVersion = specVersion; // Act var schema = context.CreateEdmTypeSchema(enumTypeReference); // & Assert Assert.NotNull(schema); if (specVersion == OpenApiSpecVersion.OpenApi2_0) { Assert.NotNull(schema.Reference); Assert.Null(schema.AnyOf); Assert.Equal(ReferenceType.Schema, schema.Reference.Type); Assert.Equal(enumType.FullTypeName(), schema.Reference.Id); Assert.Equal(isNullable, schema.Nullable); } else { if (isNullable) { Assert.NotNull(schema.AnyOf); Assert.NotEmpty(schema.AnyOf); Assert.Null(schema.Reference); Assert.Equal(2, schema.AnyOf.Count); var anyOfRef = schema.AnyOf.FirstOrDefault(); Assert.NotNull(anyOfRef.Reference); Assert.Equal(ReferenceType.Schema, anyOfRef.Reference.Type); Assert.Equal(enumType.FullTypeName(), anyOfRef.Reference.Id); var anyOfNull = schema.AnyOf.Skip(1).FirstOrDefault(); Assert.NotNull(anyOfNull.Type); Assert.Equal("object", anyOfNull.Type); Assert.True(anyOfNull.Nullable); } else { Assert.Null(schema.AnyOf); Assert.NotNull(schema.Reference); Assert.Equal(ReferenceType.Schema, schema.Reference.Type); Assert.Equal(enumType.FullTypeName(), schema.Reference.Id); } } }
public void CreateEdmTypeSchemaReturnSchemaForEnumType(bool isNullable) { // Arrange IEdmModel model = EdmModelHelper.TripServiceModel; IEdmEnumType enumType = model.SchemaElements.OfType <IEdmEnumType>().First(c => c.Name == "PersonGender"); Assert.NotNull(enumType); // guard IEdmEnumTypeReference enumTypeReference = new EdmEnumTypeReference(enumType, isNullable); ODataContext context = new ODataContext(model); // Act var schema = context.CreateEdmTypeSchema(enumTypeReference); // & Assert Assert.NotNull(schema); Assert.Equal(isNullable, schema.Nullable); Assert.Null(schema.Reference); Assert.NotNull(schema.AnyOf); Assert.NotEmpty(schema.AnyOf); var anyOf = Assert.Single(schema.AnyOf); Assert.NotNull(anyOf.Reference); Assert.Equal(ReferenceType.Schema, anyOf.Reference.Type); Assert.Equal(enumType.FullTypeName(), anyOf.Reference.Id); }
public void CreateEdmTypeSchemaReturnSchemaForEnumType(bool isNullable, OpenApiSpecVersion specVersion) { // Arrange IEdmModel model = EdmModelHelper.TripServiceModel; IEdmEnumType enumType = model.SchemaElements.OfType <IEdmEnumType>().First(c => c.Name == "PersonGender"); Assert.NotNull(enumType); // guard IEdmEnumTypeReference enumTypeReference = new EdmEnumTypeReference(enumType, isNullable); ODataContext context = new ODataContext(model); context.Settings.OpenApiSpecVersion = specVersion; // Act var schema = context.CreateEdmTypeSchema(enumTypeReference); // & Assert Assert.NotNull(schema); // Although the schema will be set // for openApiV2 nullable will not be serialized Assert.Equal(isNullable, schema.Nullable); if (specVersion == OpenApiSpecVersion.OpenApi2_0) { Assert.NotNull(schema.Reference); Assert.Null(schema.AnyOf); Assert.Equal(ReferenceType.Schema, schema.Reference.Type); Assert.Equal(enumType.FullTypeName(), schema.Reference.Id); } else { Assert.Null(schema.Reference); Assert.NotNull(schema.AnyOf); Assert.NotEmpty(schema.AnyOf); var anyOf = Assert.Single(schema.AnyOf); Assert.NotNull(anyOf.Reference); Assert.Equal(ReferenceType.Schema, anyOf.Reference.Type); Assert.Equal(enumType.FullTypeName(), anyOf.Reference.Id); } }
private void VisitEnumType(IEdmEnumType enumType) { string qualifiedName = enumType.FullTypeName(); if (_types.ContainsKey(qualifiedName)) { return; // processed } MetaEnumType metaEnum = new MetaEnumType(); metaEnum.QualifiedName = qualifiedName; metaEnum.Name = enumType.Name; metaEnum.IsFlag = enumType.IsFlags; _types[qualifiedName] = metaEnum; }
/// <summary> /// Parse string or integer to enum value /// </summary> /// <param name="enumType">edm enum type</param> /// <param name="value">input string value</param> /// <param name="enumValue">output edm enum value</param> /// <returns>true if parse succeeds, false if fails</returns> internal static bool TryParseEnum(IEdmEnumType enumType, string value, out ODataEnumValue enumValue) { long parsedValue; bool success = enumType.TryParseEnum(value, true, out parsedValue); enumValue = null; if (success) { // ODataEnumValue.Value will always be numeric string like '3', '10' instead of 'Cyan', 'Solid,Yellow', etc. // so user code can easily Enum.Parse() them into CLR value. enumValue = new ODataEnumValue(parsedValue.ToString(CultureInfo.InvariantCulture), enumType.FullTypeName()); } return(success); }
/// <summary> /// Parse string or integer to enum value /// </summary> /// <param name="enumType">edm enum type</param> /// <param name="value">input string value</param> /// <param name="enumValue">output edm enum value</param> /// <returns>true if parse succeeds, false if fails</returns> private static bool TryParseEnum(IEdmEnumType enumType, string value, out ODataEnumValue enumValue) { long parsedValue; bool success = enumType.TryParseEnum(value, true, out parsedValue); enumValue = null; if (success) { enumValue = new ODataEnumValue(parsedValue.ToString(CultureInfo.InvariantCulture), enumType.FullTypeName()); } return success; }
/// <summary> /// Parse string or integer to enum value /// </summary> /// <param name="enumType">edm enum type</param> /// <param name="value">input string value</param> /// <param name="enumValue">output edm enum value</param> /// <returns>true if parse succeeds, false if fails</returns> private static bool TryParseEnum(IEdmEnumType enumType, string value, out ODataEnumValue enumValue) { long parsedValue; bool success = enumType.TryParseEnum(value, true, out parsedValue); enumValue = null; if (success) { enumValue = new ODataEnumValue(parsedValue.ToString(CultureInfo.InvariantCulture), enumType.FullTypeName()); } return(success); }
/// <summary> /// Parse string or integer to enum value /// </summary> /// <param name="enumType">edm enum type</param> /// <param name="value">input string value</param> /// <param name="enumValue">output edm enum value</param> /// <returns>true if parse succeeds, false if fails</returns> internal static bool TryParseEnum(IEdmEnumType enumType, string value, out ODataEnumValue enumValue) { long parsedValue; bool success = enumType.TryParseEnum(value, true, out parsedValue); enumValue = null; if (success) { // ODataEnumValue.Value will always be numeric string like '3', '10' instead of 'Cyan', 'Solid,Yellow', etc. // so user code can easily Enum.Parse() them into CLR value. enumValue = new ODataEnumValue(parsedValue.ToString(CultureInfo.InvariantCulture), enumType.FullTypeName()); } return success; }