示例#1
0
        public void Equals_True_SimplePoco_ValuesSet_SqlServerDateTimeEqualityComparer()
        {
            // Arrange
            var componentUnderTest = new FieldValueEqualityComparer();

            FieldValueEqualityComparer.SetAssembliesWithTypesToUseValueSemanticsOn(new[] { typeof(SimplePoco).Assembly });
            FieldValueEqualityComparer.UseDateTimeEqualityComparer(new SqlServerDateTimeEqualityComparer());

            // Act
            var actual = componentUnderTest.Equals(new SimplePoco
            {
                MyInt           = 1,
                MyString        = "test",
                MyIgnoredString = "xxx",
                MyDateTime      = new DateTime(2000, 1, 1, 0, 0, 1).AddMilliseconds(999)
            }, new SimplePoco
            {
                MyInt           = 1,
                MyString        = "test",
                MyIgnoredString = "xxx",
                MyDateTime      = new DateTime(2000, 1, 1, 0, 0, 2).AddMilliseconds(998)
            });

            // Assert
            Assert.AreEqual(true, actual);
        }
示例#2
0
        public void Equals_True_ComplexPoco_DictionaryNotEqual()
        {
            // Arrange
            var componentUnderTest = new FieldValueEqualityComparer();

            FieldValueEqualityComparer.SetAssembliesWithTypesToUseValueSemanticsOn(new[] { typeof(SimplePoco).Assembly });

            // Act
            var actual = componentUnderTest.Equals(new ComplexPoco
            {
                SimplePocoDictionary = new Dictionary <string, SimplePoco>
                {
                    { "1", new SimplePoco() }
                }
            }, new ComplexPoco
            {
                SimplePocoDictionary = new Dictionary <string, SimplePoco>
                {
                    { "2", new SimplePoco() }
                }
            });

            // Assert
            Assert.AreEqual(false, actual);
        }
示例#3
0
        public void Equals_False_SimplePoco_ValuesSet_Dictionaries()
        {
            // Arrange
            var componentUnderTest = new FieldValueEqualityComparer();

            FieldValueEqualityComparer.SetAssembliesWithTypesToUseValueSemanticsOn(new[] { typeof(SimplePoco).Assembly });

            var list1 = new Dictionary <string, SimplePoco>
            {
                { "1", new SimplePoco
                  {
                      MyInt           = 1,
                      MyString        = "test",
                      MyIgnoredString = "some value",
                      MyDateTime      = new DateTime(2000, 1, 1)
                  } }
            };
            var list2 = new Dictionary <string, SimplePoco>
            {
                { "1", new SimplePoco
                  {
                      MyInt           = 2,
                      MyString        = "test",
                      MyIgnoredString = "some value",
                      MyDateTime      = new DateTime(2000, 1, 1)
                  } }
            };

            // Act
            var actual = componentUnderTest.Equals(list1, list2);

            // Assert
            Assert.AreEqual(false, actual);
        }
示例#4
0
        public void Equals_True_WithEqualityComparer_InComplexType()
        {
            // Arrange
            var componentUnderTest = new FieldValueEqualityComparer();

            FieldValueEqualityComparer.SetAssembliesWithTypesToUseValueSemanticsOn(new[] { typeof(SimplePoco).Assembly });

            var lhs = new ComplexPoco
            {
                SimplePoco = new SimplePoco
                {
                    MyString = "1"
                }
            };
            var rhs = new ComplexPoco
            {
                SimplePoco = new SimplePoco
                {
                    MyString = "xxx"
                }
            };

            // Act
            FieldValueEqualityComparer.AddFieldValueEqualityComparer(new SimplePocoEqualityComparer());
            var actual = componentUnderTest.Equals(lhs, rhs);

            // Assert
            Assert.AreEqual(true, actual);
        }
示例#5
0
        public void Equals_True_SimplePoco_ValuesSet_Use_NoValueCompareAttribute()
        {
            // Arrange
            var componentUnderTest = new FieldValueEqualityComparer();

            FieldValueEqualityComparer.SetAssembliesWithTypesToUseValueSemanticsOn(new[] { typeof(SimplePoco).Assembly });

            // Act
            var actual = componentUnderTest.Equals(new SimplePoco
            {
                MyInt           = 1,
                MyString        = "test",
                MyIgnoredString = "some value",
                MyDateTime      = new DateTime(2000, 1, 1)
            }, new SimplePoco
            {
                MyInt           = 1,
                MyString        = "test",
                MyIgnoredString = "some different value",
                MyDateTime      = new DateTime(2000, 1, 1)
            });

            // Assert
            Assert.AreEqual(true, actual);
        }
示例#6
0
        public void Equals_False_GenericType_ComplexPoco()
        {
            // Arrange
            var componentUnderTest = new FieldValueEqualityComparer();

            FieldValueEqualityComparer.SetAssembliesWithTypesToUseValueSemanticsOn(new[] { typeof(SimplePoco).Assembly });

            // Act
            var actual = componentUnderTest.Equals(
                new GenericType <ComplexPoco>
            {
                Instance = new ComplexPoco
                {
                    MyStrings = new[] { "1", "2" }
                }
            },
                new GenericType <ComplexPoco>
            {
                Instance = new ComplexPoco
                {
                    MyStrings = new[] { "1", "2" }
                }
            });

            // Assert
            Assert.AreEqual(true, actual);
        }
示例#7
0
        public void Equals_True_CircularReference_DoubleNavigation()
        {
            // Arrange
            var componentUnderTest = new FieldValueEqualityComparer();

            FieldValueEqualityComparer.SetAssembliesWithTypesToUseValueSemanticsOn(new[] { typeof(SimplePoco).Assembly });

            var parent1 = new CircularReference();
            var child1  = new CircularReference();
            var other1  = new CircularReference();

            parent1.Child        = child1;
            child1.Parent        = parent1;
            child1.OtheReference = other1;
            other1.Child         = parent1;

            var parent2 = new CircularReference();
            var child2  = new CircularReference();
            var other2  = new CircularReference();

            parent2.Child        = child2;
            child2.Parent        = parent2;
            child2.OtheReference = other2;
            other2.Child         = parent2;

            // Act
            var actual = componentUnderTest.Equals(parent1, parent2);

            // Assert
            Assert.AreEqual(true, actual);
        }
示例#8
0
        public void Equals_False_CircularReference()
        {
            // Arrange
            var componentUnderTest = new FieldValueEqualityComparer();

            FieldValueEqualityComparer.SetAssembliesWithTypesToUseValueSemanticsOn(new[] { typeof(SimplePoco).Assembly });

            var parent1 = new CircularReference();
            var child1  = new CircularReference();

            parent1.Child   = child1;
            child1.Parent   = parent1;
            child1.MyString = "test";

            var parent2 = new CircularReference();
            var child2  = new CircularReference();

            parent2.Child = child2;
            child2.Parent = parent2;

            // Act
            var actual = componentUnderTest.Equals(parent1, parent2);

            // Assert
            Assert.AreEqual(false, actual);
        }
示例#9
0
        public void Equals_False_ComplexPoco_InList_ValuesDifferent()
        {
            // Arrange
            var componentUnderTest = new FieldValueEqualityComparer();

            FieldValueEqualityComparer.SetAssembliesWithTypesToUseValueSemanticsOn(new[] { typeof(SimplePoco).Assembly });

            var lhs = new List <ComplexPoco>
            {
                new ComplexPoco(),
                new ComplexPoco {
                    MyInt = 1
                }
            };
            var rhs = new List <ComplexPoco>
            {
                new ComplexPoco(),
                new ComplexPoco {
                    MyInt = 2
                }
            };

            // Act
            var actual = componentUnderTest.Equals(lhs, rhs);

            // Assert
            Assert.AreEqual(false, actual);
        }
示例#10
0
        public void Equals_False_SimplePoco_ValuesSet()
        {
            // Arrange
            var componentUnderTest = new FieldValueEqualityComparer();

            FieldValueEqualityComparer.SetAssembliesWithTypesToUseValueSemanticsOn(new[] { typeof(SimplePoco).Assembly });

            // Act
            var actual = componentUnderTest.Equals(new SimplePoco
            {
                MyInt           = 1,
                MyString        = "test",
                MyIgnoredString = "xxx",
                MyDateTime      = new DateTime(2000, 1, 1)
            }, new SimplePoco
            {
                MyInt           = 1,
                MyString        = "test other",
                MyIgnoredString = "xxx",
                MyDateTime      = new DateTime(2000, 1, 1)
            });

            // Assert
            Assert.AreEqual(false, actual);
        }
示例#11
0
        public void Equals_True_SimplePoco()
        {
            // Arrange
            var componentUnderTest = new FieldValueEqualityComparer();

            FieldValueEqualityComparer.SetAssembliesWithTypesToUseValueSemanticsOn(new[] { typeof(SimplePoco).Assembly });

            // Act
            var actual = componentUnderTest.Equals(new SimplePoco(), new SimplePoco());

            // Assert
            Assert.AreEqual(true, actual);
        }
示例#12
0
        public void Equals_False_SimplePoco_NotSetTheAssembly()
        {
            // Arrange
            var componentUnderTest = new FieldValueEqualityComparer();

            FieldValueEqualityComparer.SetAssembliesWithTypesToUseValueSemanticsOn(new Assembly[] { });

            // Act
            var actual = componentUnderTest.Equals(new SimplePoco(), new SimplePoco());

            // Assert
            Assert.AreEqual(false, actual);
        }
示例#13
0
        public void Equals_True_List_SingleLevel()
        {
            // Arrange
            var componentUnderTest = new FieldValueEqualityComparer();

            FieldValueEqualityComparer.SetAssembliesWithTypesToUseValueSemanticsOn(new[] { typeof(SimplePoco).Assembly });

            var list1 = new[]
            {
                new SimplePoco
                {
                    MyInt           = 1,
                    MyString        = "test",
                    MyIgnoredString = "xxx",
                    MyDateTime      = new DateTime(2000, 1, 1)
                },
                new SimplePoco
                {
                    MyInt           = 1,
                    MyString        = "test",
                    MyIgnoredString = "xxx",
                    MyDateTime      = new DateTime(2000, 1, 1)
                }
            };

            var list2 = new[]
            {
                new SimplePoco
                {
                    MyInt           = 1,
                    MyString        = "test",
                    MyIgnoredString = "xxx",
                    MyDateTime      = new DateTime(2000, 1, 1)
                },
                new SimplePoco
                {
                    MyInt           = 1,
                    MyString        = "test",
                    MyIgnoredString = "xxx",
                    MyDateTime      = new DateTime(2000, 1, 1)
                }
            };

            // Act
            var actual = componentUnderTest.Equals(list1, list2);

            // Assert
            Assert.AreEqual(true, actual);
        }
示例#14
0
        public void Equals_False_WithNoTypeComparer()
        {
            // Arrange
            var componentUnderTest = new FieldValueEqualityComparer();

            FieldValueEqualityComparer.SetAssembliesWithTypesToUseValueSemanticsOn(new[] { typeof(SimplePoco).Assembly });

            var lhs = new SimplePoco();
            var rhs = new InheritedSimplePoco();

            // Act
            var actual = componentUnderTest.Equals(lhs, rhs);

            // Assert
            Assert.AreEqual(false, actual);
        }
示例#15
0
        public void Equals_False_ComplexPoco_NUllableDateTime_Rhs()
        {
            // Arrange
            var componentUnderTest = new FieldValueEqualityComparer();

            FieldValueEqualityComparer.SetAssembliesWithTypesToUseValueSemanticsOn(new[] { typeof(SimplePoco).Assembly });

            // Act
            var actual = componentUnderTest.Equals(new ComplexPoco
            {
                MyNullableDateTime = new DateTime()
            }, new ComplexPoco
            {
            });

            // Assert
            Assert.AreEqual(false, actual);
        }
示例#16
0
        public void AreEqual_True_ComplexPoco()
        {
            // Arrange
            var componentUnderTest = new FieldValueEqualityComparer();

            FieldValueEqualityComparer.SetAssembliesWithTypesToUseValueSemanticsOn(new[] { typeof(SimplePoco).Assembly });
            var simplePoco = new SimplePoco {
                MyInt = 23
            };
            var lhs = new ComplexPoco
            {
                MyInt                = 1,
                MyStrings            = new[] { "1", "2" },
                SimplePocoArray      = new[] { new SimplePoco(), simplePoco },
                SimplePocoDictionary = new Dictionary <string, SimplePoco>
                {
                    { "1", new SimplePoco {
                          MyString = "test"
                      } },
                    { "2", simplePoco }
                },
                Bytes = Encoding.Default.GetBytes("test")
            };
            var rhs = new ComplexPoco
            {
                MyInt                = 1,
                MyStrings            = new[] { "1", "2" },
                SimplePocoArray      = new[] { new SimplePoco(), simplePoco },
                SimplePocoDictionary = new Dictionary <string, SimplePoco>
                {
                    { "1", new SimplePoco {
                          MyString = "test"
                      } },
                    { "2", simplePoco }
                },
                Bytes = Encoding.Default.GetBytes("test")
            };

            // Act
            var actual = FieldValueEqualityComparer.AreEqual(lhs, rhs);

            // Assert
            Assert.AreEqual(true, actual);
        }
示例#17
0
        public void Equals_False_ComplexPoco_ArraysNotEqual_DifferentSizes()
        {
            // Arrange
            var componentUnderTest = new FieldValueEqualityComparer();

            FieldValueEqualityComparer.SetAssembliesWithTypesToUseValueSemanticsOn(new[] { typeof(SimplePoco).Assembly });

            // Act
            var actual = componentUnderTest.Equals(new ComplexPoco
            {
                MyStrings = new[] { "1", "2" }
            }, new ComplexPoco
            {
                MyStrings = new[] { "1" }
            });

            // Assert
            Assert.AreEqual(false, actual);
        }
示例#18
0
        public void Equals_False_ComplexPoco_InDictionary_RhsNull()
        {
            // Arrange
            var componentUnderTest = new FieldValueEqualityComparer();

            FieldValueEqualityComparer.SetAssembliesWithTypesToUseValueSemanticsOn(new[] { typeof(SimplePoco).Assembly });

            var lhs = new Dictionary <string, ComplexPoco>
            {
                { "a", new ComplexPoco() },
                { "b", new ComplexPoco() }
            };

            // Act
            var actual = componentUnderTest.Equals(lhs, null);

            // Assert
            Assert.AreEqual(false, actual);
        }
示例#19
0
        public void Equals_True_ComplexPoco_ArraysEqual_BothNull()
        {
            // Arrange
            var componentUnderTest = new FieldValueEqualityComparer();

            FieldValueEqualityComparer.SetAssembliesWithTypesToUseValueSemanticsOn(new[] { typeof(SimplePoco).Assembly });

            // Act
            var actual = componentUnderTest.Equals(new ComplexPoco
            {
                MyStrings = null
            }, new ComplexPoco
            {
                MyStrings = null
            });

            // Assert
            Assert.AreEqual(true, actual);
        }
示例#20
0
        public void Equals_False_List_SimpleType()
        {
            // Arrange
            var componentUnderTest = new FieldValueEqualityComparer();

            FieldValueEqualityComparer.SetAssembliesWithTypesToUseValueSemanticsOn(new[] { typeof(SimplePoco).Assembly });

            var list1 = new[]
            {
                "a", "b", "c"
            };

            var list2 = new[]
            {
                "a", "a", "a"
            };

            // Act
            var actual = componentUnderTest.Equals(list1, list2);

            // Assert
            Assert.AreEqual(false, actual);
        }