public void AreDeepEqual_SameObjectTypes_DifferentObjects_DeepEqualityComparerAvailable_ReturnsTrue()
        {
            // Arrange
            var service = CreateService();
            var objA    = new MockStruct();
            var objB    = new MockStruct();

            var mockComparer = new Mock <IDeepEqualityComparer>();

            mockComparer.Setup(m => m.CanCompare(It.IsAny <Type>()))
            .Returns(true);
            mockComparer.Setup(m =>
                               m.AreDeepEqual(It.IsAny <object>(), It.IsAny <object>(), It.IsAny <DeepComparisonOptions>()))
            .Returns(true);

            var options = new DeepComparisonOptions()
            {
                DeepEqualityComparers = new List <IDeepEqualityComparer>()
                {
                    mockComparer.Object
                }
            };

            // Act
            var result = service.AreDeepEqual(objA, objB, options);

            // Assert
            Assert.True(result);
        }
        public void GivenDateTimeOffset_SetTarget_SetsParsedValue()
        {
            var targetObject   = new MockStruct();
            var uut            = new NullableDateTimeOffsetSetter();
            var mappingDetails = new TagMapLeaf(targetObject.GetType().GetProperty(nameof(targetObject.Tag1)), uut);
            var messageContext = new FixMessageContext();

            uut.SetTarget <MockStruct>("20190104-19:02:04", mappingDetails, messageContext, ref targetObject);
            Assert.True(targetObject.Tag1.HasValue);
        }
        public void GivenInteger_SetTarget_SetsParsedValue()
        {
            var targetObject   = new MockStruct();
            var uut            = new NullableIntegerSetter();
            var mappingDetails = new TagMapLeaf(targetObject.GetType().GetProperty(nameof(targetObject.Tag1)), uut);
            var messageContext = new FixMessageContext();

            uut.SetTarget <MockStruct>(1.ToString(), mappingDetails, messageContext, ref targetObject);
            Assert.Equal(1, targetObject.Tag1.Value);
        }
Example #4
0
        public void GivenByte_SetTarget_SetsParsedValue()
        {
            var targetObject   = new MockStruct();
            var uut            = new ByteSetter();
            var mappingDetails = new TagMapLeaf(targetObject.GetType().GetProperty(nameof(targetObject.Tag1)), uut);
            var messageContext = new FixMessageContext();

            uut.SetTarget <MockStruct>("=", mappingDetails, messageContext, ref targetObject);
            Assert.Equal(61, targetObject.Tag1);
        }
        public void AreDeepEqual_SameObjectTypes_DifferentObjects_NullComparisonOptions_ThrowsArgumentNullException()
        {
            // Arrange
            var service = CreateService();
            var objA    = new MockStruct();
            var objB    = new MockStruct();

            // Act/Assert
            Assert.Throws <ArgumentNullException>(() => service.AreDeepEqual(objA, objB, null));
        }
Example #6
0
        public void GivenDateTimeOffset_SetTarget_SetsParsedValue()
        {
            var targetObject   = new MockStruct();
            var uut            = new DateTimeOffsetSetter();
            var mappingDetails = new TagMapLeaf(targetObject.GetType().GetProperty(nameof(targetObject.Tag1)), uut);
            var messageContext = new FixMessageContext();

            uut.SetTarget <MockStruct>("20190104-19:02:04", mappingDetails, messageContext, ref targetObject);
            Assert.Equal(new DateTimeOffset(2019, 1, 4, 19, 2, 4, TimeSpan.Zero), targetObject.Tag1);
        }
        public void GetResourceAsStructTest()
        {
            var input = new MockStruct {
                Id = "1", Value = "Mock"
            };

            var response = ApiResponse.OK().WithResource(input, input.Id).AsItemResponse();

            var output = response.GetResourceAs <MockStruct>();

            Assert.Equal(input.Id, output.Id);
        }
        public void AreDeepEqual_DifferentObjectTypes_ReturnsFalse()
        {
            // Arrange
            var service = CreateService();
            var objA    = new object();
            var objB    = new MockStruct();

            // Act
            var result = service.AreDeepEqual(objA, objB, null);

            // Assert
            Assert.False(result);
        }
        public void AreDeepEqual_SameObjectTypes_DifferentObjects_ComparisonOptionsEmptyComparers_ThrowsInvalidOperationException()
        {
            // Arrange
            var service = CreateService();
            var objA    = new MockStruct();
            var objB    = new MockStruct();
            var options = new DeepComparisonOptions()
            {
                DeepEqualityComparers = new List <IDeepEqualityComparer>()
            };

            // Act/Assert
            Assert.Throws <InvalidOperationException>(() => service.AreDeepEqual(objA, objB, options));
        }
        public void GetResourceAsStructAfterSerializationTest()
        {
            var input = new MockStruct {
                Id = "1", Value = "Mock"
            };

            var response = ApiResponse.OK().WithResource(input, input.Id).AsItemResponse();

            var serialized = JsonConvert.SerializeObject(response);

            var deserialized = JsonConvert.DeserializeObject <ApiItemResponse>(serialized);

            var output = deserialized.GetResourceAs <MockStruct>();

            Assert.Equal(input.Id, output.Id);
        }
        public void GetResourceAsStructArrayTest()
        {
            var input1 = new MockStruct {
                Id = "1", Value = "Mock"
            };
            var input2 = new MockStruct {
                Id = "2", Value = "Mock 2"
            };
            var input = new[] { input1, input2 };

            var response = ApiResponse.OK().WithResources(input, (item) => item.Id).AsCollectionResponse();

            var output = response.GetResourcesAs <MockStruct>();

            Assert.Equal(input.Length, output.Count());
        }
Example #12
0
        public void GivenANonNull_ShouldReturnSelectedValue(
            object objectValue,
            int intValue,
            long longValue,
            DateTime dateTimeValue)
        {
            MockStruct?nullableStruct = new MockStruct
            {
                ObjectProperty   = objectValue,
                LongProperty     = longValue,
                IntProperty      = intValue,
                DateTimeProperty = dateTimeValue
            };

            nullableStruct.IfNotNull(v => v.ObjectProperty).Should().Be(objectValue);
            nullableStruct.IfNotNull(v => v.LongProperty).Should().Be(longValue);
            nullableStruct.IfNotNull(v => v.IntProperty).Should().Be(intValue);
            nullableStruct.IfNotNull(v => v.DateTimeProperty).Should().Be(dateTimeValue);
        }
        public void GetResourceAsStructArrayAfterSerializationTest()
        {
            var input1 = new MockStruct {
                Id = "1", Value = "Mock"
            };
            var input2 = new MockStruct {
                Id = "2", Value = "Mock 2"
            };
            var input = new[] { input1, input2 };

            var response = ApiResponse.OK().WithResources(input, (item) => item.Id).AsCollectionResponse();

            var serialized = JsonConvert.SerializeObject(response);

            var deserialized = JsonConvert.DeserializeObject <ApiCollectionResponse>(serialized);

            var output = deserialized.GetResourcesAs <MockStruct>();

            Assert.Equal(input.Length, output.Count());
        }
        public void AreDeepEqual_SameObjectTypes_DifferentObjects_NoDeepEqualityComparersOfTheGivenObjectType_ThrowsInvalidOperationException()
        {
            // Arrange
            var service = CreateService();
            var objA    = new MockStruct();
            var objB    = new MockStruct();

            var mockComparer = new Mock <IDeepEqualityComparer>();

            mockComparer.Setup(m => m.CanCompare(It.IsAny <Type>()))
            .Returns(false);

            var options = new DeepComparisonOptions()
            {
                DeepEqualityComparers = new List <IDeepEqualityComparer>()
                {
                    mockComparer.Object
                }
            };

            // Act/Assert
            Assert.Throws <InvalidOperationException>(() => service.AreDeepEqual(objA, objB, options));
        }
        public void AreDeepEqual_BothCircularObjects_DifferentOriginalComparisonObjects_ReturnsFalse()
        {
            // Arrange
            var comparer = CreateComparer();

            var testA = new MockStruct()
            {
                TestString = "Hi",
                TestInt    = 123,
                TestLongs  = new List <long>()
                {
                    6,
                    9,
                    7
                },
                TestClass = new TestClass()
                {
                    A        = "Test",
                    B        = 8,
                    SubClass = new TestClass()
                }
            };
            var testB = new MockStruct()
            {
                TestString = "Hi",
                TestInt    = 123,
                TestLongs  = new List <long>()
                {
                    6,
                    9,
                    7
                },
                TestClass = new TestClass()
                {
                    A        = "Test",
                    B        = 9,
                    SubClass = new TestClass()
                }
            };

            MockComparerTestSetup.SetupComparer(comparer, (objA, objB, options) =>
            {
                if (objA == null)
                {
                    return(objB == null);
                }

                switch (objA)
                {
                case string str:
                    return(str.Equals((string)objB, StringComparison.Ordinal));

                case int i:
                    return(i == (int)objB);

                case List <int> list:
                    return(list.SequenceEqual((List <int>)objB));

                case TestClass testClass:
                    var b = (TestClass)objB;
                    return(comparer.AreDeepEqual(testClass, b, options));

                case MockStruct mockStruct:
                    var c = (MockStruct)objB;
                    return(comparer.AreDeepEqual(mockStruct, c, options));

                default:
                    return(false);
                }
            }, out var mockObjectCache, out var mockCircularRefMonitor);

            mockCircularRefMonitor.Setup(m =>
                                         m.AddReference(It.Is <MockStruct>(test => Equals(testA, test)), It.IsAny <object>()))
            .Returns(true);
            mockCircularRefMonitor.Setup(m =>
                                         m.AddReference(It.Is <MockStruct>(test => Equals(testB, test)), It.IsAny <object>()))
            .Returns(true);

            var returnValue = new object();

            mockObjectCache.Setup(m => m.TryGet(It.IsAny <object>(), out returnValue))
            .Returns(true);

            // Act
            var result = comparer.AreDeepEqual(testA, testB, new DeepComparisonOptions());

            // Assert
            Assert.False(result);
        }
        public void AreDeepEqual_StructsWithDifferentPropertyValues_ReturnsFalse()
        {
            // Arrange
            var comparer = CreateComparer();

            MockComparerTestSetup.SetupComparer(comparer, (objA, objB, options) =>
            {
                if (objA == null)
                {
                    return(objB == null);
                }

                switch (objA)
                {
                case string str:
                    return(str.Equals((string)objB, StringComparison.Ordinal));

                case int i:
                    return(i == (int)objB);

                case List <int> list:
                    return(list.SequenceEqual((List <int>)objB));

                case TestClass testClass:
                    var b = (TestClass)objB;
                    return(comparer.AreDeepEqual(testClass, b, options));

                case MockStruct mockStruct:
                    var c = (MockStruct)objB;
                    return(comparer.AreDeepEqual(mockStruct, c, options));

                default:
                    return(false);
                }
            });

            var testA = new MockStruct()
            {
                TestString = "Hi",
                TestInt    = 123,
                TestLongs  = new List <long>()
                {
                    6,
                    9,
                    7
                },
                TestClass = new TestClass()
                {
                    A        = "Test",
                    B        = 8,
                    SubClass = new TestClass()
                }
            };
            var testB = new MockStruct()
            {
                TestString = "Hi",
                TestInt    = 123,
                TestLongs  = new List <long>()
                {
                    6,
                    9,
                    7
                },
                TestClass = new TestClass()
                {
                    A        = "Test",
                    B        = 9,
                    SubClass = new TestClass()
                }
            };

            // Act
            var result = comparer.AreDeepEqual(testA, testB, new DeepComparisonOptions());

            // Assert
            Assert.False(result);
        }