Beispiel #1
0
        public void TryParseEnumMemberWithFlagsOfTwoValuesInJsonShouldBeTrue()
        {
            var enumType = new EdmEnumType("Ns", "Color", true);
            var red      = enumType.AddMember("Red", new EdmEnumMemberValue(1));
            var green    = enumType.AddMember("Green", new EdmEnumMemberValue(2));
            var blue     = enumType.AddMember("Blue", new EdmEnumMemberValue(4));
            var white    = enumType.AddMember("White", new EdmEnumMemberValue(8));

            // symbolic value
            string jsonEnumPath = " Red , White ";
            IEnumerable <IEdmEnumMember> parsedMember;

            Assert.True(EdmEnumValueParser.TryParseJsonEnumMember(jsonEnumPath, enumType, null, out parsedMember));
            Assert.Equal(2, parsedMember.Count());
            Assert.Equal(red, parsedMember.First());
            Assert.Equal(white, parsedMember.Last());

            // numeric value
            jsonEnumPath = " 11 ";  // 1 + 2 + 8
            Assert.True(EdmEnumValueParser.TryParseJsonEnumMember(jsonEnumPath, enumType, null, out parsedMember));
            Assert.Equal(3, parsedMember.Count());
            Assert.Equal(red, parsedMember.ElementAt(0));
            Assert.Equal(green, parsedMember.ElementAt(1));
            Assert.Equal(white, parsedMember.ElementAt(2));
        }
Beispiel #2
0
        public void TryParseEnumMemberOfOneValueShouldBeTrue()
        {
            var    enumType             = new EdmEnumType("Ns", "Color");
            var    blue                 = enumType.AddMember("Blue", new EdmEnumMemberValue(0));
            var    white                = enumType.AddMember("White", new EdmEnumMemberValue(1));
            var    complexType          = new EdmComplexType("Ns", "Address");
            string enumPath             = "  Ns.Color/Blue  ";
            List <IEdmSchemaType> types = new List <IEdmSchemaType> {
                enumType, complexType
            };
            IEnumerable <IEdmEnumMember> parsedMember;

            Assert.True(EdmEnumValueParser.TryParseEnumMember(enumPath, BuildModelFromTypes(types), null, out parsedMember));
            Assert.Equal(blue, parsedMember.Single());

            // JSON
            string jsonEnumPath = "Blue";

            Assert.True(EdmEnumValueParser.TryParseJsonEnumMember(jsonEnumPath, enumType, null, out parsedMember));
            Assert.Equal(blue, parsedMember.Single());

            jsonEnumPath = "1";
            Assert.True(EdmEnumValueParser.TryParseJsonEnumMember(jsonEnumPath, enumType, null, out parsedMember));
            Assert.Equal(white, parsedMember.Single());
        }
Beispiel #3
0
        public void TryParseEnumMemberWithFlagsOfTwoValuesShouldBeTrue()
        {
            var    enumType             = new EdmEnumType("Ns", "Permission", true);
            var    read                 = enumType.AddMember("Read", new EdmEnumMemberValue(0));
            var    write                = enumType.AddMember("Write", new EdmEnumMemberValue(1));
            var    complexType          = new EdmComplexType("Ns", "Address");
            string enumPath             = " Ns.Permission/Read   Ns.Permission/Write ";
            List <IEdmSchemaType> types = new List <IEdmSchemaType> {
                enumType, complexType
            };
            IEnumerable <IEdmEnumMember> parsedMember;

            Assert.True(EdmEnumValueParser.TryParseEnumMember(enumPath, BuildModelFromTypes(types), null, out parsedMember));
            Assert.Equal(2, parsedMember.Count());
            Assert.Equal(read, parsedMember.First());
            Assert.Equal(write, parsedMember.Last());

            // JSON
            string jsonEnumPath = " Read , Write ";

            Assert.True(EdmEnumValueParser.TryParseJsonEnumMember(jsonEnumPath, enumType, null, out parsedMember));
            Assert.Equal(2, parsedMember.Count());
            Assert.Equal(read, parsedMember.First());
            Assert.Equal(write, parsedMember.Last());
        }
Beispiel #4
0
        private IEnumerable <IEdmEnumMember> ComputeReferenced()
        {
            IEnumerable <IEdmEnumMember> member;

            // In OData Json CSDL, a enum member expression is a string value. "@self.HasPattern": "Red"
            // But in OData XML CSDL, a enum member expression is an element like: <EnumMember>org.example.Pattern/Red</EnumMember>
            // So, in OData JSON CSDL, we have to use the Term type to construct EnumMember.
            if (this.expression.EnumType != null)
            {
                return(EdmEnumValueParser.TryParseJsonEnumMember(this.expression.EnumMemberPath, this.expression.EnumType, this.Location, out member) ? member : null);
            }

            return(EdmEnumValueParser.TryParseEnumMember(this.expression.EnumMemberPath, this.Schema.Model, this.Location, out member) ? member : null);
        }
Beispiel #5
0
        public void TryParseEnumMemberOfInvalidEnumMemberShouldBeFalse()
        {
            var enumType = new EdmEnumType("Ns", "Color");

            enumType.AddMember("Blue", new EdmEnumMemberValue(0));
            enumType.AddMember("White", new EdmEnumMemberValue(1));
            var    complexType          = new EdmComplexType("Ns", "Address");
            string enumPath             = "Ns.Color/Green";
            List <IEdmSchemaType> types = new List <IEdmSchemaType> {
                enumType, complexType
            };
            IEnumerable <IEdmEnumMember> parsedMember;

            Assert.False(EdmEnumValueParser.TryParseEnumMember(enumPath, BuildModelFromTypes(types), null, out parsedMember));

            // JSON
            string jsonEnumPath = "Green";

            Assert.False(EdmEnumValueParser.TryParseJsonEnumMember(jsonEnumPath, enumType, null, out parsedMember));
        }
Beispiel #6
0
        private IEnumerable <EdmError> ComputeErrors()
        {
            IEnumerable <IEdmEnumMember> member;

            if (this.expression.EnumType != null)
            {
                if (!EdmEnumValueParser.TryParseJsonEnumMember(this.expression.EnumMemberPath, this.expression.EnumType, this.Location, out member))
                {
                    return(new EdmError[] { new EdmError(this.Location, EdmErrorCode.InvalidEnumMemberPath, Edm.Strings.CsdlParser_InvalidEnumMemberPath(this.expression.EnumMemberPath)) });
                }
            }
            else
            {
                if (!EdmEnumValueParser.TryParseEnumMember(this.expression.EnumMemberPath, this.Schema.Model, this.Location, out member))
                {
                    return(new EdmError[] { new EdmError(this.Location, EdmErrorCode.InvalidEnumMemberPath, Edm.Strings.CsdlParser_InvalidEnumMemberPath(this.expression.EnumMemberPath)) });
                }
            }

            return(Enumerable.Empty <EdmError>());
        }