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);
        }
Example #2
0
 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);
        }
Example #6
0
        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>();
        }
Example #7
0
        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);
        }
Example #10
0
        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]);
        }
Example #11
0
        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");
        }
Example #12
0
        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);
        }
Example #13
0
        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);
                }
            }
        }