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); }
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); }
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); }