Exemple #1
0
        public void Cannot_create_property_of_invalid_type()
        {
            var rowType =
                RowType.Create(
                    new[]
            {
                EdmProperty.Primitive("property", PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Int32))
            },
                    null);

            Assert.Equal(
                Strings.EdmProperty_InvalidPropertyType(rowType.FullName),
                Assert.Throws <ArgumentException>(() => EdmProperty.Create("invalidProperty", TypeUsage.Create(rowType))).Message);
        }
        public void Can_update_existing_facet_with_shallow_copy()
        {
            var typeUsage1 = TypeUsage.Create(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String));

            Assert.Equal(5, typeUsage1.Facets.Count);
            Assert.True((bool)typeUsage1.Facets["Nullable"].Value);

            var typeUsage2 = typeUsage1.ShallowCopy(Facet.Create(MetadataItem.NullableFacetDescription, false));

            Assert.Equal(5, typeUsage1.Facets.Count);
            Assert.Equal(5, typeUsage2.Facets.Count);
            Assert.True((bool)typeUsage1.Facets["Nullable"].Value);
            Assert.False((bool)typeUsage2.Facets["Nullable"].Value);
        }
Exemple #3
0
        public void Can_get_list_of_declared_properties()
        {
            var rowType = new RowType();

            Assert.Empty(rowType.DeclaredProperties);

            var property = EdmProperty.Primitive("P", PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String));

            rowType.AddMember(property);

            Assert.Equal(1, rowType.DeclaredProperties.Count);

            rowType.RemoveMember(property);
        }
        [Fact] // Codeplex 1735
        public void EdmAssociationType_ValidateReferentialConstraint_throws_if_types_of_related_properties_dont_match()
        {
            var principal = new EntityType(
                "Principal", "N", DataSpace.CSpace,
                new[] { "IdInt", "IdString" },
                new EdmMember[]
            {
                new EdmProperty("IdInt", TypeUsage.Create(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Int32))),
                new EdmProperty("IdString", TypeUsage.Create(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Int32)))
            });

            var dependent = new EntityType(
                "Dependent", "N", DataSpace.CSpace,
                new[] { "Id" },
                new EdmMember[]
            {
                new EdmProperty("Id", TypeUsage.Create(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Int32))),
                new EdmProperty("IdString", TypeUsage.Create(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String))),
                new EdmProperty("IdInt", TypeUsage.Create(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Int32)))
            });

            var associationType = new AssociationType("AT", "N", true, DataSpace.CSpace);

            var fromRole = new AssociationEndMember("Principal", new RefType(principal), RelationshipMultiplicity.ZeroOrOne);
            var toRole   = new AssociationEndMember("Dependent", new RefType(dependent), RelationshipMultiplicity.Many);

            associationType.Constraint = new ReferentialConstraint(
                fromRole, toRole,
                new[] { principal.Properties["IdString"], principal.Properties["IdInt"] },
                new[] { dependent.Properties["IdString"], dependent.Properties["IdInt"] });

            var validationContext
                = new EdmModelValidationContext(new EdmModel(DataSpace.CSpace), true);

            DataModelErrorEventArgs errorEventArgs = null;

            validationContext.OnError += (_, e) => errorEventArgs = e;

            EdmModelSemanticValidationRules
            .EdmAssociationType_ValidateReferentialConstraint
            .Evaluate(validationContext, associationType);

            Assert.NotNull(errorEventArgs);

            Assert.Equal(
                Strings.EdmModel_Validator_Semantic_TypeMismatchRelationshipConstraint("IdString", "Dependent", "IdString", "Principal", "AT"),
                errorEventArgs.ErrorMessage);

            Assert.Same(associationType.Constraint, errorEventArgs.Item);
        }
Exemple #5
0
        public void Can_get_and_set_name()
        {
            var function
                = new FunctionParameter(
                      "P",
                      TypeUsage.Create(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String)),
                      ParameterMode.InOut);

            Assert.Equal("P", function.Name);

            function.Name = "Foo";

            Assert.Equal("Foo", function.Name);
        }
        public void Create_throws_if_member_value_not_in_range_of_underlying_type()
        {
            var underlyingType = PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Byte);
            var member         = EnumMember.Create("M", Int32.MaxValue, null);

            Assert.Equal(
                new ArgumentException(
                    Strings.EnumMemberValueOutOfItsUnderylingTypeRange(
                        member.Value, member.Name, underlyingType.Name), "members")
                .Message,
                Assert.Throws <ArgumentException>(
                    () => EnumType.Create("EnumName", "N", underlyingType, true, new[] { member }, null))
                .Message);
        }
Exemple #7
0
        public void IsUnderlyingPrimitiveType_returns_true_when_underlying_primitive_property()
        {
            var primitiveType = PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Int32);

            var property = EdmProperty.Primitive("P", primitiveType);

            Assert.True(property.IsUnderlyingPrimitiveType);

            var enumType = new EnumType();

            property = EdmProperty.Enum("P", enumType);

            Assert.True(property.IsUnderlyingPrimitiveType);
        }
Exemple #8
0
        internal static PrimitiveType GetSpatialNormalizedPrimitiveType(EdmType type)
        {
            PrimitiveType type1 = (PrimitiveType)type;

            if (Helper.IsGeographicType(type1) && type1.PrimitiveTypeKind != PrimitiveTypeKind.Geography)
            {
                return(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Geography));
            }
            if (Helper.IsGeometricType(type1) && type1.PrimitiveTypeKind != PrimitiveTypeKind.Geometry)
            {
                return(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Geometry));
            }
            return(type1);
        }
        public void Attempt_to_add_member_of_wrong_DataSpace_to_StructuralType_throws_ArgumentException()
        {
            var ex1 = Assert.Throws <ArgumentException>(
                () => new ComplexType("CT", "NS1", DataSpace.SSpace)
                .AddMember(
                    new EdmProperty(
                        "p",
                        TypeUsage.CreateDefaultTypeUsage(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Byte)))));

            Assert.True(ex1.Message.StartsWith(
                            Resources.Strings.AttemptToAddEdmMemberFromWrongDataSpace(
                                "p", "CT", DataSpace.CSpace, DataSpace.SSpace)));
            Assert.Equal("member", ex1.ParamName);
        }
Exemple #10
0
        public void Can_set_name_and_parent_notified()
        {
            var primitiveType = PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Int32);

            var property = EdmProperty.Primitive("P", primitiveType);

            var entityTypeMock = new Mock <StructuralType>();

            property.ChangeDeclaringTypeWithoutCollectionFixup(entityTypeMock.Object);

            property.Name = "Foo";

            entityTypeMock.Verify(e => e.NotifyItemIdentityChanged(), Times.Once());
        }
        public void EdmType_SystemNamespaceEncountered_not_triggered_for_Edm_primitive_types()
        {
            var validationContext
                = new EdmModelValidationContext(new EdmModel(DataSpace.CSpace), true);
            DataModelErrorEventArgs errorEventArgs = null;

            validationContext.OnError += (_, e) => errorEventArgs = e;

            EdmModelSemanticValidationRules
            .EdmType_SystemNamespaceEncountered
            .Evaluate(validationContext, PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Decimal));

            Assert.Null(errorEventArgs);
        }
Exemple #12
0
 private static Facet CreateConstFacet(string facetName, PrimitiveTypeKind facetTypeKind, object value)
 {
     return
         (Facet.Create(
              new FacetDescription(
                  facetName,
                  PrimitiveType.GetEdmPrimitiveType(facetTypeKind),
                  null,
                  null,
                  value,
                  true,
                  null),
              value));
 }
            public void Nullable_CSpace_primitive_type_returned_for_non_nullable_SSpace_primitive_type()
            {
                var sSpaceTypeUsage =
                    FakeSqlProviderServices
                    .Instance.GetProviderManifest("2008")
                    .GetStoreType(TypeUsage.CreateDefaultTypeUsage(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String)));

                var cSpaceTypeUsage = sSpaceTypeUsage.ModelTypeUsage;

                Assert.Equal(DataSpace.CSpace, cSpaceTypeUsage.EdmType.GetDataSpace());
                Assert.Equal(
                    ((PrimitiveType)sSpaceTypeUsage.EdmType).PrimitiveTypeKind,
                    ((PrimitiveType)cSpaceTypeUsage.EdmType).PrimitiveTypeKind);
                Assert.True((bool)sSpaceTypeUsage.Facets["Nullable"].Value);
            }
Exemple #14
0
        public void IsUnicodeConstant_returns_true_for_const_Unicode_facet_and_value_cannot_be_changed()
        {
            var typeUsage =
                TypeUsage.Create(
                    PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String),
                    new[] { CreateConstFacet("Unicode", PrimitiveTypeKind.Boolean, true) });

            var property = new EdmProperty("P", typeUsage);

            Assert.True(property.IsUnicodeConstant);
            Assert.Equal(true, property.IsUnicode);

            property.IsFixedLength = false;
            Assert.Equal(true, property.IsUnicode);
        }
Exemple #15
0
        public void IsMaxLengthConstant_returns_true_for_const_MaxLength_facet_and_value_cannot_be_changed()
        {
            var typeUsage =
                TypeUsage.Create(
                    PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String),
                    new[] { CreateConstFacet("MaxLength", PrimitiveTypeKind.Int32, 200) });

            var property = new EdmProperty("P", typeUsage);

            Assert.True(property.IsMaxLengthConstant);
            Assert.Equal(200, property.MaxLength);

            property.MaxLength = 300;
            Assert.Equal(200, property.MaxLength);
        }
        public void Create_throws_if_namespaceName_is_null_or_empty()
        {
            var underlyingType = PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Int32);

            Assert.Equal(
                Strings.ArgumentIsNullOrWhitespace("namespaceName"),
                Assert.Throws <ArgumentException>(
                    () => EnumType.Create("EnumName", null, underlyingType, true, null, null))
                .Message);
            Assert.Equal(
                Strings.ArgumentIsNullOrWhitespace("namespaceName"),
                Assert.Throws <ArgumentException>(
                    () => EnumType.Create("EnumName", String.Empty, underlyingType, true, null, null))
                .Message);
        }
Exemple #17
0
        public void WriteFunctionImportReturnTypeAttributes_writes_Type_attribute_for_non_inline_definition()
        {
            var fixture = new Fixture();

            var returnParameter =
                new FunctionParameter(
                    "RetValue",
                    TypeUsage.CreateDefaultTypeUsage(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Int32)),
                    ParameterMode.ReturnValue);

            fixture.Writer.WriteFunctionReturnTypeElementHeader();
            fixture.Writer.WriteFunctionImportReturnTypeAttributes(returnParameter, null, false);

            Assert.Equal("<ReturnType Type=\"Int32\"", fixture.ToString());
        }
Exemple #18
0
        public void IsScaleConstant_returns_true_for_const_Scale_facet_and_value_cannot_be_changed()
        {
            var typeUsage =
                TypeUsage.Create(
                    PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String),
                    new[] { CreateConstFacet("Scale", PrimitiveTypeKind.Byte, (byte)10) });

            var property = new EdmProperty("P", typeUsage);

            Assert.True(property.IsScaleConstant);
            Assert.Equal(10, (byte)property.Scale);

            property.Scale = 15;
            Assert.Equal(10, (byte)property.Scale);
        }
Exemple #19
0
            public void Add_is_implemented()
            {
                var typeUsage    = TypeUsage.CreateDefaultTypeUsage(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String));
                var metadataItem = new EntityType("E", "N", DataSpace.CSpace);

                metadataItem.MetadataProperties.Source.Add(MetadataProperty.Create("PN", typeUsage, "PV"));
                var count = metadataItem.MetadataProperties.Count;

                var annotation = MetadataProperty.CreateAnnotation("AN", "AV");

                metadataItem.Annotations.Add(annotation);

                Assert.Same(annotation, metadataItem.MetadataProperties.ElementAt(count));
                Assert.Same(annotation, metadataItem.Annotations.Single());
            }
Exemple #20
0
        public void SetMetadataProperties_sets_metadata_properties()
        {
            var typeUsage =
                TypeUsage.CreateDefaultTypeUsage(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String));

            var property = EdmProperty.Create("foo", typeUsage);

            property.SetMetadataProperties(
                new List <MetadataProperty>
            {
                MetadataProperty.Create(
                    "foo", TypeUsage.CreateDefaultTypeUsage(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String)), "bar")
            });

            Assert.NotNull(property.MetadataProperties.SingleOrDefault(p => p.Name == "foo" && (string)p.Value == "bar"));
        }
        public void Can_add_entity_set_to_container()
        {
            var entityContainer = new EntityContainer("Container", DataSpace.CSpace);
            var entityType      = new EntityType("E", "N", DataSpace.CSpace);
            var typeUsage       = TypeUsage.CreateDefaultTypeUsage(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String));
            var entitySet       = EntitySet.Create("S", "dbo", "T", "Q", entityType, new[] { new MetadataProperty("P", typeUsage, "V") });

            Assert.Equal(0, entityContainer.EntitySets.Count);
            Assert.Null(entitySet.EntityContainer);

            entityContainer.AddEntitySetBase(entitySet);

            Assert.Equal(1, entityContainer.EntitySets.Count);
            Assert.Same(entitySet, entityContainer.EntitySets.Single());
            Assert.Same(entityContainer, entitySet.EntityContainer);
        }
Exemple #22
0
        public void Can_remove_member()
        {
            var entityType = new EntityType("E", "N", DataSpace.CSpace);

            Assert.Empty(entityType.Members);

            var property = EdmProperty.Primitive("P", PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String));

            entityType.AddMember(property);

            Assert.Equal(1, entityType.Members.Count);

            entityType.RemoveMember(property);

            Assert.Empty(entityType.Members);
        }
        public void VisitFunctionReturnParameter_writes_return_and_collection_header_for_primitive_return_type()
        {
            var schemaWriterMock = new Mock <EdmXmlSchemaWriter>();
            var returnParameter  =
                new FunctionParameter(
                    "r",
                    TypeUsage.CreateDefaultTypeUsage(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String)),
                    ParameterMode.ReturnValue);

            new EdmSerializationVisitor(schemaWriterMock.Object).VisitFunctionReturnParameter(returnParameter);

            schemaWriterMock.Verify(sw => sw.WriteFunctionReturnTypeElementHeader(), Times.Never());
            schemaWriterMock.Verify(sw => sw.WriteCollectionTypeElementHeader(), Times.Never());
            schemaWriterMock.Verify(sw => sw.WriteRowTypeElementHeader(), Times.Never());
            schemaWriterMock.Verify(sw => sw.WriteEndElement(), Times.Never());
        }
Exemple #24
0
        public void EdmModel_NameIsNotAllowed_triggered_for_conceptual_property_with_period()
        {
            var property = EdmProperty.CreatePrimitive("Property.With.Dots", PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Int32));

            var validationContext
                = new EdmModelValidationContext(new EdmModel(DataSpace.CSpace), true);
            DataModelErrorEventArgs errorEventArgs = null;

            validationContext.OnError += (_, e) => errorEventArgs = e;

            EdmModelSyntacticValidationRules
            .EdmModel_NameIsNotAllowed
            .Evaluate(validationContext, property);

            Assert.NotNull(errorEventArgs);
        }
Exemple #25
0
        public void Can_set_primitive_type_and_new_type_usage_is_create_with_facets()
        {
            var primitiveType = PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String);

            var property = EdmProperty.Primitive("P", primitiveType);

            property.StoreGeneratedPattern = StoreGeneratedPattern.Computed;
            property.ConcurrencyMode       = ConcurrencyMode.Fixed;
            property.MaxLength             = 42;

            property.PrimitiveType = PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Binary);

            Assert.Equal(StoreGeneratedPattern.Computed, property.StoreGeneratedPattern);
            Assert.Equal(ConcurrencyMode.Fixed, property.ConcurrencyMode);
            Assert.Equal(42, property.MaxLength);
        }
Exemple #26
0
        public void WriteFunctionImportParameterElement_writes_full_element_with_attributes()
        {
            var fixture = new Fixture();

            var functionImportParameter =
                new FunctionParameter(
                    "miles",
                    TypeUsage.CreateDefaultTypeUsage(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Int32)),
                    ParameterMode.InOut);

            fixture.Writer.WriteFunctionImportParameterElementHeader(functionImportParameter);

            Assert.Equal(
                "<Parameter Name=\"miles\" Mode=\"InOut\" Type=\"Int32\"",
                fixture.ToString());
        }
Exemple #27
0
            public void Count_is_implemented()
            {
                var typeUsage    = TypeUsage.CreateDefaultTypeUsage(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String));
                var metadataItem = new EntityType("E", "N", DataSpace.CSpace);

                metadataItem.MetadataProperties.Source.Add(MetadataProperty.Create("PN", typeUsage, "PV"));

                var count = metadataItem.MetadataProperties.Count;

                Assert.Equal(0, metadataItem.Annotations.Count);

                metadataItem.Annotations.Add(MetadataProperty.CreateAnnotation("AN", "AV"));

                Assert.Equal(count + 1, metadataItem.MetadataProperties.Count);
                Assert.Equal(1, metadataItem.Annotations.Count);
            }
Exemple #28
0
        public void WriteFunctionParameterHeader_should_write_element_and_attributes()
        {
            var fixture = new Fixture();

            var typeUsage
                = TypeUsage.Create(
                      PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String),
                      new FacetValues
            {
                MaxLength = 123
            });

            var functionParameter
                = new FunctionParameter(
                      "Foo",
                      typeUsage,
                      ParameterMode.In);

            fixture.Writer.WriteFunctionParameterHeader(functionParameter);

            Assert.Equal(
                "<Parameter Name=\"Foo\" Type=\"String\" Mode=\"In\" MaxLength=\"123\"",
                fixture.ToString());

            fixture = new Fixture();

            typeUsage
                = TypeUsage.Create(
                      PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Decimal),
                      new FacetValues
            {
                Precision = (byte?)4,
                Scale     = (byte?)8
            });

            functionParameter
                = new FunctionParameter(
                      "Foo",
                      typeUsage,
                      ParameterMode.In);

            fixture.Writer.WriteFunctionParameterHeader(functionParameter);

            Assert.Equal(
                "<Parameter Name=\"Foo\" Type=\"Decimal\" Mode=\"In\" Precision=\"4\" Scale=\"8\"",
                fixture.ToString());
        }
Exemple #29
0
        public void WriteFunctionMapping_should_write_complex_parameter_bindings()
        {
            var fixture = new Fixture();

            var entityType = new EntityType("E", "N", DataSpace.CSpace);
            var entitySet  = new EntitySet("ES", "S", null, null, entityType);

            new EntityContainer("EC", DataSpace.SSpace).AddEntitySetBase(entitySet);

            var storageModificationFunctionMapping
                = new ModificationFunctionMapping(
                      entitySet,
                      entityType,
                      new EdmFunction("F", "N", DataSpace.SSpace, new EdmFunctionPayload()),
                      new[]
            {
                new ModificationFunctionParameterBinding(
                    new FunctionParameter(
                        "P",
                        TypeUsage.Create(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Int32)),
                        ParameterMode.In),
                    new ModificationFunctionMemberPath(
                        new[]
                {
                    EdmProperty.CreateComplex("C1", new ComplexType()),
                    EdmProperty.CreateComplex("C2", new ComplexType()),
                    new EdmProperty("M")
                },
                        null),
                    true)
            },
                      null,
                      null);

            fixture.Writer.WriteFunctionMapping("InsertFunction", storageModificationFunctionMapping);

            Assert.Equal(
                @"<InsertFunction FunctionName=""N.F"">
  <ComplexProperty Name=""C1"" TypeName=""."">
    <ComplexProperty Name=""C2"" TypeName=""."">
      <ScalarProperty Name=""M"" ParameterName=""P"" Version=""Current"" />
    </ComplexProperty>
  </ComplexProperty>
</InsertFunction>",
                fixture.ToString());
        }
Exemple #30
0
        public void Declared_members_should_be_accessible_by_name()
        {
            var entityType =
                EntityType.Create(
                    "Blog",
                    "BlogModel",
                    DataSpace.CSpace,
                    new[] { "Id", "Title" },
                    new[] {
                EdmProperty.CreatePrimitive("Id", PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Int32)),
                EdmProperty.CreatePrimitive("Title", PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String))
            },
                    null);

            Assert.NotNull(entityType.DeclaredMembers["Id"]);
            Assert.NotNull(entityType.DeclaredMembers["Title"]);
        }