public static void BsonSerializeStringToBytes()
        {
            // Arrange
            var bsonSerializer = new NaosBsonSerializer <GenericDiscoveryBsonConfiguration <string> >();
            var input          = A.Dummy <string>();

            // Act
            var bsonStringException = Record.Exception(() => bsonSerializer.SerializeToBytes(input));

            // Assert
            bsonStringException.Should().BeOfType <NotSupportedException>();
        }
        public static void ElementTypeOfArrayIsOnlyTypeDiscovered()
        {
            // Arrange
            var bsonConfig     = typeof(GenericDiscoveryBsonConfiguration <RegisteredKey, RegisteredValue>);
            var bsonSerializer = new NaosBsonSerializer(bsonConfig);

            var jsonConfig     = typeof(GenericDiscoveryJsonConfiguration <RegisteredKey, RegisteredValue>);
            var jsonSerializer = new NaosJsonSerializer(jsonConfig);

            var expectedKey = new RegisteredKey {
                Property = A.Dummy <string>()
            };
            var expectedValue = new RegisteredValue {
                Property = A.Dummy <string>()
            };

            var expectedTuple      = new Tuple <RegisteredKey, RegisteredValue>(expectedKey, expectedValue);
            var expectedDictionary = new Dictionary <RegisteredKey, RegisteredValue> {
                { expectedKey, expectedValue }
            };
            var expectedList  = new List <RegisteredKey>(new[] { expectedKey });
            var expectedArray = new[] { expectedValue };

            // Act
            // var tupleBsonString = bsonSerializer.SerializeToString(expectedTuple);
            // var tupleBson = bsonSerializer.Deserialize<Tuple<RegisteredKey, RegisteredValue>>(tupleBsonString);

            var tupleJsonString      = jsonSerializer.SerializeToString(expectedTuple);
            var tupleJson            = jsonSerializer.Deserialize <Tuple <RegisteredKey, RegisteredValue> >(tupleJsonString);
            var dictionaryJsonString = jsonSerializer.SerializeToString(expectedDictionary);
            var dictionaryJson       = jsonSerializer.Deserialize <Dictionary <RegisteredKey, RegisteredValue> >(dictionaryJsonString);
            var listJsonString       = jsonSerializer.SerializeToString(expectedList);
            var listJson             = jsonSerializer.Deserialize <List <RegisteredKey> >(listJsonString);
            var arrayJsonString      = jsonSerializer.SerializeToString(expectedArray);
            var arrayJson            = jsonSerializer.Deserialize <RegisteredValue[]>(arrayJsonString);

            // Assert

            // tupleBson.Should().BeEquivalentTo(expectedTuple);

            tupleJson.Item1.Property.Should().Be(expectedTuple.Item1.Property);
            tupleJson.Item2.Property.Should().Be(expectedTuple.Item2.Property);
            dictionaryJson.Single().Key.Property.Should().Be(expectedDictionary.Single().Key.Property);
            dictionaryJson.Single().Value.Property.Should().Be(expectedDictionary.Single().Value.Property);
            listJson.Single().Property.Should().Be(expectedList.Single().Property);
            arrayJson.Single().Property.Should().Be(expectedArray.Single().Property);
        }
        public static void BsonCanSerializeNull()
        {
            // Arrange
            var serializer = new NaosBsonSerializer();

            // Act
            var actualNullString      = serializer.SerializeToString(null);
            var actualNullBytes       = serializer.SerializeToBytes(null);
            var actualStringException = Record.Exception(() => serializer.SerializeToString(SerializationConfigurationBase.NullSerializedStringValue));
            var actualNullFromString  = serializer.Deserialize <NullableObject>(actualNullString);
            var actualNullFromBytes   = serializer.Deserialize <NullableObject>(actualNullBytes);

            // Assert
            actualNullString.Should().Be(SerializationConfigurationBase.NullSerializedStringValue);
            actualNullFromString.Should().BeNull();
            actualNullFromBytes.Should().BeNull();
            actualStringException.Should().NotBeNull();
            actualStringException.Should().BeOfType <NotSupportedException>();
        }
        public static void RegularColorRoundtrip()
        {
            // Arrange
            var serializer = new NaosBsonSerializer();
            var expected   = new ObjectWithNetDrawingTypes
            {
                Color = A.Dummy <Color>(),
                NullableWithValueColor    = A.Dummy <Color>(),
                NullableWithoutValueColor = null,
            };

            // Act
            var actualString = serializer.SerializeToString(expected);
            var actual       = serializer.Deserialize <ObjectWithNetDrawingTypes>(actualString);

            // Assert
            actual.Color.Should().Be(expected.Color);
            actual.NullableWithValueColor.Should().Be(expected.NullableWithValueColor);
            actual.NullableWithoutValueColor.Should().BeNull();
        }
예제 #5
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);
                }
            }
        }