public static void ToDescribedSerialization___Valid___Just_passes_to_specific_factory_version_with_default_factory() { // Arrange var objectToPackageIntoDescribedSerialization = A.Dummy <string>(); var serializerDescription = new SerializationDescription(SerializationKind.Json, SerializationFormat.String, typeof(NullJsonConfiguration).ToRepresentation(), CompressionKind.None); // Act var describedSerialization = objectToPackageIntoDescribedSerialization.ToDescribedSerialization(serializerDescription, unregisteredTypeEncounteredStrategy: UnregisteredTypeEncounteredStrategy.Attempt); // Assert describedSerialization.Should().NotBeNull(); describedSerialization.PayloadTypeRepresentation.Should().Be(objectToPackageIntoDescribedSerialization.GetType().ToRepresentation()); describedSerialization.SerializedPayload.Should().Be("\"" + objectToPackageIntoDescribedSerialization + "\""); describedSerialization.SerializationDescription.Should().Be(serializerDescription); }
public static DescribedSerialization ToDescribedSerialization <T>( this T objectToPackageIntoDescribedSerialization, SerializationDescription serializationDescription, TypeMatchStrategy typeMatchStrategy = TypeMatchStrategy.NamespaceAndName, MultipleMatchStrategy multipleMatchStrategy = MultipleMatchStrategy.ThrowOnMultiple, UnregisteredTypeEncounteredStrategy unregisteredTypeEncounteredStrategy = UnregisteredTypeEncounteredStrategy.Default) { return(DomainExtensions.ToDescribedSerializationUsingSpecificFactory( objectToPackageIntoDescribedSerialization, serializationDescription, SerializerFactory.Instance, CompressorFactory.Instance, typeMatchStrategy, multipleMatchStrategy, unregisteredTypeEncounteredStrategy)); }
/// <inheritdoc /> public ISerializeAndDeserialize BuildSerializer(SerializationDescription serializationDescription, TypeMatchStrategy typeMatchStrategy = TypeMatchStrategy.NamespaceAndName, MultipleMatchStrategy multipleMatchStrategy = MultipleMatchStrategy.ThrowOnMultiple, UnregisteredTypeEncounteredStrategy unregisteredTypeEncounteredStrategy = UnregisteredTypeEncounteredStrategy.Default) { new { serializationDescription }.Must().NotBeNull(); lock (this.sync) { var configurationType = serializationDescription.ConfigurationTypeRepresentation?.ResolveFromLoadedTypes(typeMatchStrategy, multipleMatchStrategy); switch (serializationDescription.SerializationKind) { case SerializationKind.Json: return(new NaosJsonSerializer(configurationType, unregisteredTypeEncounteredStrategy)); default: throw new NotSupportedException(Invariant($"{nameof(serializationDescription)} from enumeration {nameof(SerializationKind)} of {serializationDescription.SerializationKind} is not supported.")); } } }
public static void ToDescribedSerializationWithSpecificFactory___Null_object___Works() { // Arrange string objectToPackageIntoDescribedSerialization = null; var serializerDescription = new SerializationDescription(SerializationKind.Json, SerializationFormat.String, typeof(NullJsonConfiguration).ToRepresentation(), CompressionKind.None); // Act var describedSerialization = objectToPackageIntoDescribedSerialization.ToDescribedSerializationUsingSpecificFactory( serializerDescription, SerializerFactory.Instance, CompressorFactory.Instance); // Assert describedSerialization.Should().NotBeNull(); describedSerialization.PayloadTypeRepresentation.Should().Be(typeof(string).ToRepresentation()); describedSerialization.SerializedPayload.Should().Be("null"); describedSerialization.SerializationDescription.Should().Be(serializerDescription); }
public static void FromDescribedSerializationGeneric___Valid___Just_passes_to_specific_factory_version_with_default_factory() { // Arrange var expected = A.Dummy <string>(); var serializerDescription = new SerializationDescription(SerializationKind.Json, SerializationFormat.String, typeof(NullJsonConfiguration).ToRepresentation(), CompressionKind.None); var payload = "\"" + expected + "\""; var describedSerialization = new DescribedSerialization( expected.GetType().ToRepresentation(), payload, serializerDescription); // Act var actual = describedSerialization.DeserializePayload <string>(unregisteredTypeEncounteredStrategy: UnregisteredTypeEncounteredStrategy.Attempt); // Assert actual.Should().NotBeNull(); actual.Should().Be(expected); }
public static void BuildSerializer___Json___Gets_Json_serializer() { // Arrange var serializerDescription = new SerializationDescription( SerializationKind.Json, SerializationFormat.String, null, CompressionKind.None); // Act var serializer = SerializerFactory.Instance.BuildSerializer(serializerDescription); var jsonSerializer = JsonSerializerFactory.Instance.BuildSerializer(serializerDescription); // Assert serializer.Should().NotBeNull(); serializer.Should().BeOfType <NaosJsonSerializer>(); jsonSerializer.Should().NotBeNull(); jsonSerializer.Should().BeOfType <NaosJsonSerializer>(); }
public static void SerializationDescriptionToSerializerFactory_BuildSerializer___Works_for_matching_description() { // Arrange var configType = typeof(GenericDiscoveryJsonConfiguration <string>); var serializerDescription = new SerializationDescription( SerializationKind.Json, SerializationFormat.String, configType.ToRepresentation()); var seededSerializer = new NaosJsonSerializer(configType); var factory = new SerializationDescriptionToSerializerFactory(serializerDescription, seededSerializer); // Act var actualSerializer = factory.BuildSerializer(serializerDescription); // Assert actualSerializer.Should().BeSameAs(seededSerializer); }
public static void ToDescribedSerializationWithSpecificFactory___All_valid___Works() { // Arrange var objectToPackageIntoDescribedSerialization = A.Dummy <string>(); var serializerDescription = new SerializationDescription(SerializationKind.Json, SerializationFormat.String, typeof(NullJsonConfiguration).ToRepresentation(), CompressionKind.None); // Act var describedSerialization = DomainExtensions.ToDescribedSerializationUsingSpecificFactory( objectToPackageIntoDescribedSerialization, serializerDescription, SerializerFactory.Instance, CompressorFactory.Instance, unregisteredTypeEncounteredStrategy: UnregisteredTypeEncounteredStrategy.Attempt); // Assert describedSerialization.Should().NotBeNull(); describedSerialization.PayloadTypeRepresentation.Should().Be(objectToPackageIntoDescribedSerialization.GetType().ToRepresentation()); describedSerialization.SerializedPayload.Should().Be("\"" + objectToPackageIntoDescribedSerialization + "\""); describedSerialization.SerializationDescription.Should().Be(serializerDescription); }
public static void FromDescribedSerializationWithSpecificFactory___Null_object___Works() { // Arrange string expected = null; var serializerDescription = new SerializationDescription(SerializationKind.Json, SerializationFormat.String, typeof(NullJsonConfiguration).ToRepresentation(), CompressionKind.None); var payload = "null"; var describedSerialization = new DescribedSerialization( typeof(string).ToRepresentation(), payload, serializerDescription); // Act var actual = DomainExtensions.DeserializePayloadUsingSpecificFactory( describedSerialization, SerializerFactory.Instance, CompressorFactory.Instance, unregisteredTypeEncounteredStrategy: UnregisteredTypeEncounteredStrategy.Attempt); // Assert actual.Should().Be(expected); }
public static void AnonymousObject___Can_be_round_tripped_back_into_a_dynamic() { // Arrange var input = new { Item = "item", Items = new[] { "item1", "item2" } }; var serializationDescriptionJson = new SerializationDescription(SerializationKind.Json, SerializationFormat.String); var serializationDescriptionBson = new SerializationDescription(SerializationKind.Bson, SerializationFormat.String); // Act var serializedJson = input.ToDescribedSerialization(serializationDescriptionJson); dynamic deserializedJson = serializedJson.DeserializePayload(); var serializedBson = input.ToDescribedSerialization(serializationDescriptionBson); dynamic deserializedBson = serializedBson.DeserializePayload(); // Assert ((string)deserializedJson.Item).Should().Be(input.Item); ((string)deserializedJson.Items[0]).Should().Be(input.Items[0]); ((string)deserializedJson.Items[1]).Should().Be(input.Items[1]); ((string)deserializedBson.Item).Should().Be(input.Item); ((string)deserializedBson.Items[0]).Should().Be(input.Items[0]); ((string)deserializedBson.Items[1]).Should().Be(input.Items[1]); }
public static void SerializationDescriptionToSerializerFactory_BuildSerializer___Throws_for_nonmatching_description() { // Arrange var configType = typeof(GenericDiscoveryJsonConfiguration <string>); var serializerDescription = new SerializationDescription( SerializationKind.Json, SerializationFormat.String, configType.ToRepresentation()); var seededSerializer = new NaosJsonSerializer(configType); var factory = new SerializationDescriptionToSerializerFactory(serializerDescription, seededSerializer); var invalidDescription = new SerializationDescription(SerializationKind.Bson, SerializationFormat.Binary); // Act var exception = Record.Exception(() => factory.BuildSerializer(invalidDescription)); // Assert exception.Should().NotBeNull(); exception.Should().BeOfType <NotSupportedException>(); exception.Message.Should().StartWith("Supplied 'serializationDescription' (SerializationDescription: SerializationKind=Bson, SerializationFormat=Binary, CompressionKind=None, ConfigurationTypeRepresentation=, Metadata=,) does not match 'supportedSerializationDescription' (SerializationDescription: SerializationKind=Json, SerializationFormat=String, CompressionKind=None, ConfigurationTypeRepresentation=Representation.TypeRepresentation: Namespace = Naos.Serialization.Json, Name = GenericDiscoveryJsonConfiguration`1, AssemblyQualifiedName = Naos.Serialization.Json.GenericDiscoveryJsonConfiguration`1, Naos.Serialization.Json"); }
public static void BuildSerializer___Bson___Gets_Bson_serializer() { // Arrange var expectedConfigType = typeof(NullBsonConfiguration); var serializerDescription = new SerializationDescription( SerializationKind.Bson, SerializationFormat.String, expectedConfigType.ToRepresentation()); // Act var serializer = SerializerFactory.Instance.BuildSerializer(serializerDescription); var bsonSerializer = BsonSerializerFactory.Instance.BuildSerializer(serializerDescription); // Assert serializer.Should().NotBeNull(); serializer.Should().BeOfType <NaosBsonSerializer>(); serializer.ConfigurationType.Should().NotBeNull(); serializer.ConfigurationType.Should().Be(expectedConfigType); bsonSerializer.Should().NotBeNull(); bsonSerializer.Should().BeOfType <NaosBsonSerializer>(); bsonSerializer.ConfigurationType.Should().NotBeNull(); bsonSerializer.ConfigurationType.Should().Be(expectedConfigType); }
public static void RoundtripSerializeWithCallback <T>( this T expected, RoundtripSerializationCallback <T> validationCallback, Type jsonConfigType = null, Type bsonConfigType = null, Type propBagConfigType = null, UnregisteredTypeEncounteredStrategy unregisteredTypeEncounteredStrategy = UnregisteredTypeEncounteredStrategy.Default, bool testBson = true, bool testJson = true, bool testPropBag = false) { new { validationCallback }.Must().NotBeNull(); var serializers = new List <ISerializeAndDeserialize>(); if (testJson) { var jsonSerializer = new NaosJsonSerializer(jsonConfigType, unregisteredTypeEncounteredStrategy); serializers.Add(jsonSerializer); } if (testBson) { var bsonSerializer = new NaosBsonSerializer(bsonConfigType, unregisteredTypeEncounteredStrategy); serializers.Add(bsonSerializer); } if (testPropBag) { var propBagSerializer = new NaosPropertyBagSerializer(propBagConfigType, unregisteredTypeEncounteredStrategy); serializers.Add(propBagSerializer); } if (!serializers.Any()) { throw new InvalidOperationException("No serializers are being tested."); } foreach (var serializer in serializers) { var configurationTypeRepresentation = serializer.ConfigurationType.ToRepresentation(); var stringDescription = new SerializationDescription( serializer.Kind, SerializationFormat.String, configurationTypeRepresentation); var binaryDescription = new SerializationDescription( serializer.Kind, SerializationFormat.Binary, configurationTypeRepresentation); var actualString = expected.ToDescribedSerializationUsingSpecificSerializer(stringDescription, serializer); var actualBinary = expected.ToDescribedSerializationUsingSpecificSerializer(binaryDescription, serializer); var actualFromString = actualString.DeserializePayloadUsingSpecificSerializer(serializer); var actualFromBinary = actualBinary.DeserializePayloadUsingSpecificSerializer(serializer); try { validationCallback(actualString, (T)actualFromString); } catch (Exception ex) { throw new NaosSerializationException(Invariant($"Failure confirming from string with {nameof(serializer)} - {serializer.GetType()} - {actualFromString}"), ex); } try { validationCallback(actualBinary, (T)actualFromBinary); } catch (Exception ex) { throw new NaosSerializationException(Invariant($"Failure confirming from binary with {nameof(serializer)} - {serializer.GetType()} - {actualFromBinary}"), ex); } } }