public void Test_that_null_is_returned_if_all_providers_return_no_serializer_when_getting_property_serializer() { var nestedProvider1Mock = new Mock <IMetamodelProvider>(); var nestedProvider2Mock = new Mock <IMetamodelProvider>(); nestedProvider1Mock .Setup(x => x.TryGetPropertySerializer(It.IsAny <PropertyInfo>())) .Returns <PropertyInfo>(t => null); nestedProvider2Mock .Setup(x => x.TryGetPropertySerializer(It.IsAny <PropertyInfo>())) .Returns <PropertyInfo>(t => null); var provider = new CompositeMetamodelProvider(); IMetamodelProvider metamodelProvider = provider; provider .AddProvider(nestedProvider1Mock.Object) .AddProvider(nestedProvider2Mock.Object); // Act var serializer = metamodelProvider.TryGetPropertySerializer(typeof(TestType).GetProperty(nameof(TestType.Property))); // Assert Assert.IsNull(serializer); }
public void Test_that_not_annotated_property_is_not_exists_in_metamodel() { // Arrange var notSerializableTypeProperty = typeof(TestTypeWithProperties).GetProperty("NotAnnotatedNotSerializableType"); var serializableTypeProperty = typeof(TestTypeWithProperties).GetProperty("NotAnnotatedSerializableType"); // Act var notSerializablePropertySerializer = _metamodelProvider.TryGetPropertySerializer(notSerializableTypeProperty); var serializablePropertySerializer = _metamodelProvider.TryGetPropertySerializer(serializableTypeProperty); // Assert Assert.IsNull(notSerializablePropertySerializer); Assert.IsNull(serializablePropertySerializer); }
public void Test_that_property_rules_applied_in_the_same_order_as_they_was_registered2() { // Arrange var provider = new ConventionBasedMetamodelProvider(); IMetamodelProvider metamodelProvider = provider; provider .AddPropertySerializerRule( p => p.PropertyType == typeof(string), p => new AnotherValueSerializerMock()) .AddPropertySerializerRule( p => p.Name == "Property", p => new ValueSerializerMock()); // Act var testTypeSerializer = metamodelProvider.TryGetPropertySerializer(typeof(TestType).GetProperty(nameof(TestType.Property))); var anotherTestTypeSerializer = metamodelProvider.TryGetPropertySerializer(typeof(AnotherTestType).GetProperty(nameof(AnotherTestType.Property))); // Assert Assert.IsNotNull(testTypeSerializer); Assert.IsNotNull(anotherTestTypeSerializer); Assert.IsInstanceOfType(testTypeSerializer, typeof(ValueSerializerMock)); Assert.IsInstanceOfType(anotherTestTypeSerializer, typeof(AnotherValueSerializerMock)); }
public void Test_that_property_expression_works1() { // Arrange var provider = new ImperativeMetamodelProvider(); IMetamodelProvider metamodelProvider = provider; // Act provider.UseSerializer((TestEntity e) => e.StringProperty, new JsonStorageValueSerializer()); // Assert var serialier = metamodelProvider.TryGetPropertySerializer(TestEntityType.GetProperty(nameof(TestEntity.StringProperty))); Assert.IsNotNull(serialier); Assert.IsInstanceOfType(serialier, typeof(JsonStorageValueSerializer)); }
public void Test_that_for_no_matched_property_null_serializer_is_returned() { // Arrange var provider = new ConventionBasedMetamodelProvider(); IMetamodelProvider metamodelProvider = provider; provider .AddPropertySerializerRule( p => p.Name == "FictionalProperty", p => new ValueSerializerMock()); // Act var serializer = metamodelProvider.TryGetPropertySerializer(typeof(TestType).GetProperty(nameof(TestType.Property))); // Assert Assert.IsNull(serializer); }
public IStorageValueSerializer TryGetSerializer(PropertyInfo property) { try { // Serializer defined on the property, overrides that one, defined on the type, which property has return(_provider.TryGetPropertySerializer(property) ?? _provider.TryGetTypeSerializer(property.PropertyType) ?? TryGetCollectionSerializer(property.PropertyType) ?? TryGetNullableSerializer(property.PropertyType)); } catch (Exception ex) { throw new InvalidOperationException($"Failed to get storage value serializer for property {property.DeclaringType}.{property.Name}, in context of type {property.ReflectedType}", ex); } }
public void Test_that_provider_used_in_the_order_which_they_was_registered_when_getting_property_serializer() { // Arrange var counter = 0; var mock1Order = 0; var mock2Order = 0; var nestedProvider1Mock = new Mock <IMetamodelProvider>(); var nestedProvider2Mock = new Mock <IMetamodelProvider>(); nestedProvider1Mock .Setup(x => x.TryGetPropertySerializer(It.IsAny <PropertyInfo>())) .Returns <PropertyInfo>(t => { ++counter; mock1Order = counter; return(null); }); nestedProvider2Mock .Setup(x => x.TryGetPropertySerializer(It.IsAny <PropertyInfo>())) .Returns <PropertyInfo>(t => { ++counter; mock2Order = counter; return(null); }); var provider = new CompositeMetamodelProvider(); IMetamodelProvider metamodelProvider = provider; provider .AddProvider(nestedProvider1Mock.Object) .AddProvider(nestedProvider2Mock.Object); // Act metamodelProvider.TryGetPropertySerializer(typeof(TestType).GetProperty(nameof(TestType.Property))); // Assert nestedProvider1Mock.Verify(x => x.TryGetPropertySerializer(It.IsAny <PropertyInfo>()), Times.Once); nestedProvider2Mock.Verify(x => x.TryGetPropertySerializer(It.IsAny <PropertyInfo>()), Times.Once); Assert.AreEqual(1, mock1Order); Assert.AreEqual(2, mock2Order); }
public void Test_that_serializer_returned_by_provider_which_registered_before_is_used_and_no_registered_later_providers_are_used_when_getting_property_erializer() { // Arrange var nestedProvider1Mock = new Mock <IMetamodelProvider>(); var nestedProvider2Mock = new Mock <IMetamodelProvider>(); var nestedProvider3Mock = new Mock <IMetamodelProvider>(); nestedProvider1Mock .Setup(x => x.TryGetPropertySerializer(It.IsAny <PropertyInfo>())) .Returns <PropertyInfo>(t => null); nestedProvider2Mock .Setup(x => x.TryGetPropertySerializer(It.IsAny <PropertyInfo>())) .Returns <PropertyInfo>(t => new ValueSerializerMock()); nestedProvider3Mock .Setup(x => x.TryGetPropertySerializer(It.IsAny <PropertyInfo>())) .Returns <PropertyInfo>(t => new AnotherValueSerializerMock()); var provider = new CompositeMetamodelProvider(); IMetamodelProvider metamodelProvider = provider; provider .AddProvider(nestedProvider1Mock.Object) .AddProvider(nestedProvider2Mock.Object) .AddProvider(nestedProvider3Mock.Object); // Act var serializer = metamodelProvider.TryGetPropertySerializer(typeof(TestType).GetProperty(nameof(TestType.Property))); // Assert nestedProvider1Mock.Verify(x => x.TryGetPropertySerializer(It.IsAny <PropertyInfo>()), Times.Once); nestedProvider2Mock.Verify(x => x.TryGetPropertySerializer(It.IsAny <PropertyInfo>()), Times.Once); nestedProvider3Mock.Verify(x => x.TryGetPropertySerializer(It.IsAny <PropertyInfo>()), Times.Never); Assert.IsNotNull(serializer); Assert.IsInstanceOfType(serializer, typeof(ValueSerializerMock)); }