public static void Deserializing_constructors___When_properties_exist___Works() { // Arrange var serializationConfigurationType1 = typeof(IncludeVersionlessAssemblyQualifiedNamePropertyBagSerializationConfiguration <TypesToRegisterPropertyBagSerializationConfiguration <ConstructorWithProperties> >); var serializationConfigurationType2 = typeof(ExcludeVersionlessAssemblyQualifiedNamePropertyBagSerializationConfiguration <TypesToRegisterPropertyBagSerializationConfiguration <ConstructorWithProperties> >); var serializer1 = new ObcPropertyBagSerializer(serializationConfigurationType1.ToPropertyBagSerializationConfigurationType()); var serializer2 = new ObcPropertyBagSerializer(serializationConfigurationType2.ToPropertyBagSerializationConfigurationType()); var expected = new ConstructorWithProperties(A.Dummy <string>(), A.Dummy <int>(), A.Dummy <DateTime>()); var serializedPropertyBag1a = serializer1.SerializeToNamedPropertyBagWithStringValues(expected); var serializedPropertyBag1b = serializer1.SerializeToNamedPropertyBagWithObjectValues(expected); var serializedPropertyBag1c = serializer1.SerializeToOrdinalPropertyBagWithStringValues(expected); var serializedPropertyBag1d = serializer1.SerializeToOrdinalPropertyBagWithObjectValues(expected); var serializedPropertyBag2a = serializer2.SerializeToNamedPropertyBagWithStringValues(expected); var serializedPropertyBag2b = serializer2.SerializeToNamedPropertyBagWithObjectValues(expected); var serializedPropertyBag2c = serializer2.SerializeToOrdinalPropertyBagWithStringValues(expected); var serializedPropertyBag2d = serializer2.SerializeToOrdinalPropertyBagWithObjectValues(expected); // Act void ThrowIfObjectsDiffer(DescribedSerializationBase describedSerialization, ConstructorWithProperties deserialized) { deserialized.Property1.AsTest().Must().BeEqualTo(expected.Property1); deserialized.Property2.AsTest().Must().BeEqualTo(expected.Property2); deserialized.Property3.AsTest().Must().BeEqualTo(expected.Property3); } // Act, Assert expected.RoundtripSerializeViaPropertyBagWithCallbackVerification(ThrowIfObjectsDiffer); var actualPropertyBag1a = serializer1.Deserialize <ConstructorWithProperties>(serializedPropertyBag1a); var actualPropertyBag1b = serializer1.Deserialize <ConstructorWithProperties>(serializedPropertyBag1b); var actualPropertyBag1c = serializer1.Deserialize <ConstructorWithProperties>(serializedPropertyBag1c); var actualPropertyBag1d = serializer1.Deserialize <ConstructorWithProperties>(serializedPropertyBag1d); var actualPropertyBag2a = serializer1.Deserialize <ConstructorWithProperties>(serializedPropertyBag2a); var actualPropertyBag2b = serializer1.Deserialize <ConstructorWithProperties>(serializedPropertyBag2b); var actualPropertyBag2c = serializer1.Deserialize <ConstructorWithProperties>(serializedPropertyBag2c); var actualPropertyBag2d = serializer1.Deserialize <ConstructorWithProperties>(serializedPropertyBag2d); ThrowIfObjectsDiffer(null, actualPropertyBag1a); ThrowIfObjectsDiffer(null, actualPropertyBag1b); ThrowIfObjectsDiffer(null, actualPropertyBag1c); ThrowIfObjectsDiffer(null, actualPropertyBag1d); ThrowIfObjectsDiffer(null, actualPropertyBag2a); ThrowIfObjectsDiffer(null, actualPropertyBag2b); ThrowIfObjectsDiffer(null, actualPropertyBag2c); ThrowIfObjectsDiffer(null, actualPropertyBag2d); }
public static void RoundTrip___Supported_scenarios___Works() { // Arrange var serializationConfigurationType1 = typeof(PropertyBagConfigIncludingAssemblyQualifiedNameForInheritTypeBase); var serializationConfigurationType2 = typeof(PropertyBagConfigExcludingAssemblyQualifiedNameForInheritTypeBase); var serializer1 = new ObcPropertyBagSerializer(serializationConfigurationType1.ToPropertyBagSerializationConfigurationType()); var serializer2 = new ObcPropertyBagSerializer(serializationConfigurationType2.ToPropertyBagSerializationConfigurationType()); var expected = new ComplicatedObject { NullableDecimal = 29m, BaseVersion = new InheritTypeDerive(), DeriveVersion = new InheritTypeDerive(), DeriveVersionArray = new[] { new InheritTypeDerive(), }, DeriveVersionCollection = new[] { new InheritTypeDerive(), }.ToList(), String = A.Dummy <string>(), Int = A.Dummy <int>(), TimeSpan = A.Dummy <TimeSpan>(), DateTime = A.Dummy <DateTime>(), DateTimeNullable = A.Dummy <DateTime>(), CustomWithoutInterface = new CustomWithoutInterface(), CustomWithInterface = new CustomWithInterface(), StringArray = new[] { A.Dummy <string>(), }, StringCollection = new[] { A.Dummy <string>(), }.ToList(), IntCollection = new[] { A.Dummy <int>(), }.ToList(), TimeSpanCollection = new[] { A.Dummy <TimeSpan>(), }.ToList(), DateTimeCollection = new[] { A.Dummy <DateTime>(), }.ToList(), CustomWithoutInterfaceCollection = new[] { new CustomWithoutInterface(), new CustomWithoutInterface(), }.ToList(), CustomWithInterfaceCollection = new[] { new CustomWithInterface(), new CustomWithInterface(), }.ToList(), EnumParseCollection = new[] { EnumParse.Default, EnumParse.Value, }, EnumParse = EnumParse.Value, StringCollectionWithSingleEmptyString = new[] { string.Empty }, StringCollectionWithNulls = new[] { string.Empty, A.Dummy <string>(), null, string.Empty, null, A.Dummy <string>() }, }; void ThrowIfObjectsDiffer(DescribedSerializationBase describedSerialization, ComplicatedObject deserialized) { deserialized.NullableDecimal.Should().Be(expected.NullableDecimal); deserialized.NullableDecimalDefault.Should().BeNull(); deserialized.BaseVersion.Should().NotBeNull(); deserialized.DeriveVersion.Should().NotBeNull(); deserialized.DeriveVersionArray.Count().Should().Be(expected.DeriveVersionArray.Count()); deserialized.DeriveVersionCollection.Count().Should().Be(expected.DeriveVersionCollection.Count()); deserialized.String.Should().Be(expected.String); deserialized.Int.Should().Be(expected.Int); deserialized.TimeSpan.Should().Be(expected.TimeSpan); deserialized.DateTime.Should().Be(expected.DateTime); deserialized.DateTimeNullable.Should().Be(expected.DateTimeNullable); deserialized.CustomWithoutInterface.Should().NotBeNull(); deserialized.CustomWithInterface.Should().NotBeNull(); deserialized.StringDefault.Should().BeNull(); deserialized.IntDefault.Should().Be(default(int)); deserialized.TimeSpanDefault.Should().Be(default(TimeSpan)); deserialized.DateTimeDefault.Should().Be(default(DateTime)); deserialized.DateTimeNullableDefault.Should().BeNull(); deserialized.CustomWithoutInterfaceDefault.Should().BeNull(); deserialized.CustomWithInterfaceDefault.Should().BeNull(); deserialized.StringArray.Should().Equal(expected.StringArray); deserialized.StringCollection.Should().Equal(expected.StringCollection); deserialized.IntCollection.Should().Equal(expected.IntCollection); deserialized.TimeSpanCollection.Should().Equal(expected.TimeSpanCollection); deserialized.DateTimeCollection.Should().Equal(expected.DateTimeCollection); deserialized.CustomWithoutInterfaceCollection.Should().HaveCount(expected.CustomWithoutInterfaceCollection.Count()); deserialized.CustomWithInterfaceCollection.Should().HaveCount(expected.CustomWithInterfaceCollection.Count()); deserialized.EnumParseCollection.Should().Equal(expected.EnumParseCollection); deserialized.EnumDefault.Should().Be(EnumParse.Default); deserialized.EnumParse.Should().Be(expected.EnumParse); deserialized.StringCollectionDefault.Should().BeNull(); deserialized.StringCollectionWithSingleEmptyString.Should().Equal(expected.StringCollectionWithSingleEmptyString); deserialized.StringCollectionWithNulls.Should().Equal(expected.StringCollectionWithNulls); } var serializedPropertyBag1a = serializer1.SerializeToNamedPropertyBagWithStringValues(expected); var serializedPropertyBag1b = serializer1.SerializeToNamedPropertyBagWithObjectValues(expected); var serializedPropertyBag1c = serializer1.SerializeToOrdinalPropertyBagWithStringValues(expected); var serializedPropertyBag1d = serializer1.SerializeToOrdinalPropertyBagWithObjectValues(expected); var serializedPropertyBag2a = serializer2.SerializeToNamedPropertyBagWithStringValues(expected); var serializedPropertyBag2b = serializer2.SerializeToNamedPropertyBagWithObjectValues(expected); var serializedPropertyBag2c = serializer2.SerializeToOrdinalPropertyBagWithStringValues(expected); var serializedPropertyBag2d = serializer2.SerializeToOrdinalPropertyBagWithObjectValues(expected); // Act, Assert expected.RoundtripSerializeViaPropertyBagWithCallbackVerification(ThrowIfObjectsDiffer, serializationConfigurationType1); expected.RoundtripSerializeViaPropertyBagWithCallbackVerification(ThrowIfObjectsDiffer, serializationConfigurationType2); var actualPropertyBag1a = serializer1.Deserialize <ComplicatedObject>(serializedPropertyBag1a); var actualPropertyBag1b = serializer1.Deserialize <ComplicatedObject>(serializedPropertyBag1b); var actualPropertyBag1c = serializer1.Deserialize <ComplicatedObject>(serializedPropertyBag1c); var actualPropertyBag1d = serializer1.Deserialize <ComplicatedObject>(serializedPropertyBag1d); var actualPropertyBag2a = serializer1.Deserialize <ComplicatedObject>(serializedPropertyBag2a); var actualPropertyBag2b = serializer1.Deserialize <ComplicatedObject>(serializedPropertyBag2b); var actualPropertyBag2c = serializer1.Deserialize <ComplicatedObject>(serializedPropertyBag2c); var actualPropertyBag2d = serializer1.Deserialize <ComplicatedObject>(serializedPropertyBag2d); ThrowIfObjectsDiffer(null, actualPropertyBag1a); ThrowIfObjectsDiffer(null, actualPropertyBag1b); ThrowIfObjectsDiffer(null, actualPropertyBag1c); ThrowIfObjectsDiffer(null, actualPropertyBag1d); ThrowIfObjectsDiffer(null, actualPropertyBag2a); ThrowIfObjectsDiffer(null, actualPropertyBag2b); ThrowIfObjectsDiffer(null, actualPropertyBag2c); ThrowIfObjectsDiffer(null, actualPropertyBag2d); }