Пример #1
0
        public void AreDeepEqual_DictionariesHaveDifferentValues_ReturnsFalse()
        {
            // Arrange
            var comparer = CreateComparer();

            var dictionaryA = new Dictionary <string, string>()
            {
                { "Key1", "Value1" },
                { "Key2", "Value2" }
            };
            var dictionaryB = new Dictionary <string, string>()
            {
                { "Key1", "ValueA" },
                { "Key2", "ValueB" }
            };

            MockComparerTestSetup.SetupComparer(comparer, (objA, objB, _) =>
            {
                var s1 = (string)objA;
                var s2 = (string)objB;

                return(s1.Equals(s2, StringComparison.OrdinalIgnoreCase));
            });

            // Act
            var result = comparer.AreDeepEqual(dictionaryA, dictionaryB, new DeepComparisonOptions());

            // Assert
            Assert.False(result);
        }
Пример #2
0
        public void AreDeepEqual_List_OrderEnforced_Unordered_SameValues_ReturnsFalse()
        {
            // Arrange
            var testSet1 = new List <string>()
            {
                "Test",
                "Hello",
                "Amazing",
                "World"
            };
            var testSet2 = new List <string>()
            {
                "Test",
                "Hello",
                "World",
                "Amazing"
            };
            var comparer = CreateComparer();

            MockComparerTestSetup.SetupComparer(comparer, (objA, objB, _) =>
            {
                var s1 = (string)objA;
                var s2 = (string)objB;

                return(s1.Equals(s2, StringComparison.OrdinalIgnoreCase));
            });

            var options = new DeepComparisonOptions()
            {
                EnforceEnumerableOrdering = true
            };

            // Act
            var result = comparer.AreDeepEqual(testSet1, testSet2, options);

            // Assert
            Assert.False(result);
        }
Пример #3
0
        public void AreDeepEqual_Array_OrderNotEnforced_Ordered_SameValues_ReturnsTrue()
        {
            // Arrange
            var testSet1 = new[]
            {
                1,
                12,
                3,
                7
            };
            var testSet2 = new[]
            {
                1,
                12,
                3,
                7
            };
            var comparer = CreateComparer();

            MockComparerTestSetup.SetupComparer(comparer, (objA, objB, _) =>
            {
                var int1 = (int)objA;
                var int2 = (int)objB;

                return(int1 == int2);
            });

            var options = new DeepComparisonOptions()
            {
                EnforceEnumerableOrdering = false
            };

            // Act
            var result = comparer.AreDeepEqual(testSet1, testSet2, options);

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

            var testA = new TestClass()
            {
                A    = "Hello",
                B    = 17,
                Ints = new List <int>()
                {
                    1,
                    2,
                    3
                }
            };

            testA.SubClass = testA;

            var testB = new TestClass()
            {
                A    = "Hello",
                B    = 17,
                Ints = new List <int>()
                {
                    1,
                    2,
                    3
                }
            };

            testB.SubClass = testB;

            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 <TestClass>(test => Equals(testA, test)), It.IsAny <TestClass>()))
            .Returns(true);
            mockCircularRefMonitor.Setup(m =>
                                         m.AddReference(It.Is <TestClass>(test => Equals(testB, test)), It.IsAny <TestClass>()))
            .Returns(true);

            var returnValue = (object)testB;

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

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

            // Assert
            Assert.True(result);
        }
        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_ClassesWithEqualProperties_ReturnsTrue()
        {
            // 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));

                default:
                    return(false);
                }
            });

            var testA = new TestClass()
            {
                A    = "Hello",
                B    = 117,
                Ints = new List <int>()
                {
                    5,
                    7,
                    8
                },
                SubClass = new TestClass()
                {
                    A    = "I",
                    B    = 8,
                    Ints = new List <int>()
                }
            };
            var testB = new TestClass()
            {
                A    = "Hello",
                B    = 117,
                Ints = new List <int>()
                {
                    5,
                    7,
                    8
                },
                SubClass = new TestClass()
                {
                    A    = "I",
                    B    = 8,
                    Ints = new List <int>()
                }
            };

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

            // Assert
            Assert.True(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);
        }