示例#1
0
        public void EqualsReturnsCorrectResultForFields()
        {
            // Fixture setup
            var expected      = true;
            var comparerStubs = new[]
            {
                new DelegatingMemberComparer
                {
                    OnIsSatisfiedByField = p => true,
                    OnEquals             = (x, y) => false
                },
                new DelegatingMemberComparer
                {
                    OnIsSatisfiedByField = p => true,
                    OnEquals             = (x, y) => expected
                },
                new DelegatingMemberComparer
                {
                    OnIsSatisfiedByField = p => true,
                    OnEquals             = (x, y) => false
                }
            };

            var sut = new SemanticComparer <FieldHolder <string> >(comparerStubs);

            var value = new FieldHolder <string>();
            var other = new FieldHolder <string>();

            // Exercise system
            var result = BothEquals(sut, value, other);

            // Verify outcome
            Assert.Equal(expected, result.All(b => b));
            // Teardown
        }
示例#2
0
        public void SutIsEqualityComparer(Type expectedType)
        {
            // Fixture setup
            // Exercise system
            var sut = new SemanticComparer <int, string>();

            // Verify outcome
            Assert.IsAssignableFrom(expectedType, sut);
            // Teardown
        }
示例#3
0
        public void EqualsReturnsCorrectResult(string x, string y, bool expected)
        {
            // Fixture setup
            var sut = new SemanticComparer <string>();
            // Exercise system
            var result = BothEquals(sut, x, y);

            // Verify outcome
            Assert.Equal(expected, result.All(b => b));
            // Teardown
        }
示例#4
0
        private static void CompareSemantically <TSource, TDestination>(TSource likenObject, TDestination comparee, bool expectedResult)
        {
            // Fixture setup
            var sut = new SemanticComparer <TSource, TDestination>();
            // Exercise system
            bool result = sut.Equals(likenObject, comparee);

            // Verify outcome
            Assert.Equal(expectedResult, result);
            // Teardown
        }
示例#5
0
        public void SutDoesNotEqualAnonymousObject()
        {
            // Fixture setup
            var    sut             = new SemanticComparer <ConcreteType, ConcreteType>();
            object anonymousObject = new object();
            // Exercise system
            var result = sut.Equals(new ConcreteType(), anonymousObject);

            // Verify outcome
            Assert.False(result);
            // Teardown
        }
示例#6
0
        public void EqualsIsSummetricWithSemanticallyUnequalObjects()
        {
            // Fixture setup
            var source = new ConcreteType("Lorem", "ipsum", "dolor", "sit");
            var dest   = new DoublePropertyHolder <object, object>();

            dest.Property1 = source.Property1;
            dest.Property2 = "abc";
            var sut = new SemanticComparer <ConcreteType, DoublePropertyHolder <object, object> >();

            // Exercise system and verify outcome
            Assert.False(sut.Equals(source, dest) && sut.Equals(dest, source));
            // Teardown
        }
示例#7
0
        public void SutEqualsIdenticalStrongType()
        {
            // Fixture setup
            var ticks = 8293247;
            var value = TimeSpan.FromTicks(ticks);
            var sut   = new SemanticComparer <TimeSpan, TimeSpan>();
            var other = TimeSpan.FromTicks(ticks);
            // Exercise system
            var result = sut.Equals(value, other);

            // Verify outcome
            Assert.True(result);
            // Teardown
        }
示例#8
0
        public void ComparersIsCorrectWhenInitializedWithDefaultConstructor()
        {
            // Fixture setup
            var expected = new[]
            {
                new MemberComparer(new SemanticComparer <TimeSpan, TimeSpan>())
            };
            var sut = new SemanticComparer <TimeSpan>();
            // Exercise system
            var result = sut.Comparers.Cast <MemberComparer>();

            // Verify outcome
            Assert.True(expected.SequenceEqual(result, new MemberComparerComparer()));
            // Teardown
        }
示例#9
0
        public void SutWithSemanticEqualityWillReturnTrue()
        {
            // Fixture setup
            var value = new ConcreteType("Lorem", "ipsum", "dolor", "sit");
            var sut   = new SemanticComparer <ConcreteType, DoublePropertyHolder <object, object> >();
            var other = new DoublePropertyHolder <object, object>();

            other.Property1 = value.Property1;
            other.Property2 = value.Property2;
            // Exercise system
            var result = sut.Equals(value, other);

            // Verify outcome
            Assert.True(result);
            // Teardown
        }
示例#10
0
        public void ComparersIsCorrectWhenInitializedWithEnumerable()
        {
            // Fixture setup
            var expected = new[]
            {
                new DelegatingMemberComparer(),
                new DelegatingMemberComparer(),
                new DelegatingMemberComparer()
            }.ToList();

            var sut = new SemanticComparer <string>(expected);
            // Exercise system
            var result = sut.Comparers;

            // Verify outcome
            Assert.True(expected.SequenceEqual(result));
            // Teardown
        }
示例#11
0
        public void EqualsWhenOverriddenSourcePropertyEqualsReturnsFalseWillReturnFalse()
        {
            // Fixture setup
            var equalityResponse = false;
            var value            = new PropertyHolder <EqualityResponder>();

            value.Property = new EqualityResponder(equalityResponse);
            var sut = new SemanticComparer <PropertyHolder <EqualityResponder>, PropertyHolder <object> >();

            var other = new PropertyHolder <object>();

            other.Property = new object();
            // Exercise system
            var result = sut.Equals(value, other);

            // Verify outcome
            Assert.Equal(equalityResponse, result);
            // Teardown
        }
示例#12
0
        public void SutEqualsIdenticalStrongTypeSequence()
        {
            // Fixture setup
            var sut = new SemanticComparer <TimeSpan, TimeSpan>();

            var ticks = 8293247;

            var value  = TimeSpan.FromTicks(ticks);
            var values = new object[] { value, value, value };

            var other  = TimeSpan.FromTicks(ticks);
            var others = new object[] { other, other, other };

            // Exercise system
            var result = values.SequenceEqual(others, sut);

            // Verify outcome
            Assert.True(result);
            // Teardown
        }
示例#13
0
        public void SutDoesNotEqualAnonymousObjectSequence()
        {
            // Fixture setup
            var sut = new SemanticComparer <ConcreteType, ConcreteType>();

            object anonymousObject = new object();

            object[] anonymousObjects = new object[] { anonymousObject, anonymousObject, anonymousObject };

            ConcreteType concreteType = new ConcreteType();

            ConcreteType[] concreteTypes = new ConcreteType[] { concreteType, concreteType, concreteType };

            // Exercise system
            var result = concreteTypes.SequenceEqual(anonymousObjects, sut);

            // Verify outcome
            Assert.False(result);
            // Teardown
        }
示例#14
0
        public void SutOfAbstractTypeDoesNotEqualConcreteInstanceWhenPropertyDiffers()
        {
            // Fixture setup
            var value = new ConcreteType("Lorem", "ipsum", "dolor", "sit");

            value.Property4 = "Ploeh";
            var sut = new SemanticComparer <ConcreteType, AbstractType>();

            var other = new ConcreteType();

            other.Property1 = value.Property1;
            other.Property2 = value.Property2;
            other.Property3 = value.Property3;
            other.Property4 = "Fnaah";
            // Exercise system
            var result = sut.Equals(value, other);

            // Verify outcome
            Assert.False(result);
            // Teardown
        }
示例#15
0
        public void EqualsReturnsCorrectResultForComplexClass(
            ComplexClass value,
            ComplexClass other,
            bool expected)
        {
            // Fixture setup
            var comparerStubs = new[]
            {
                new DelegatingMemberComparer
                {
                    OnIsSatisfiedByProperty = x => true,
                    OnEquals = (x, y) => x.Equals(y)
                },
                new DelegatingMemberComparer
                {
                    OnIsSatisfiedByProperty = x =>
                                              x.PropertyType == typeof(Entity),

                    OnEquals = (x, y) =>
                               ((Entity)x).Name.Equals(
                        ((Entity)y).Name)
                },
                new DelegatingMemberComparer
                {
                    OnIsSatisfiedByProperty = x =>
                                              x.PropertyType == typeof(OperatingSystem),

                    OnEquals = (x, y) =>
                               ((OperatingSystem)x).Version.Equals(
                        ((OperatingSystem)y).Version)
                }
            };
            var sut = new SemanticComparer <ComplexClass>(comparerStubs);
            // Exercise system
            var result = BothEquals(sut, value, other);

            // Verify outcome
            Assert.Equal(expected, result.All(b => b));
            // Teardown
        }
示例#16
0
        public void EqualsForwardsCorrectCallToComparers()
        {
            // Fixture setup
            var value = new TypeWithDifferentParameterTypesAndProperties(
                1, "abc", 3, Guid.NewGuid());

            var other = new TypeWithDifferentParameterTypesAndProperties(
                1, "ABC", 3, Guid.NewGuid());

            var comparerStubs = new[]
            {
                new DelegatingMemberComparer
                {
                    OnIsSatisfiedByProperty = x => true,
                    OnEquals = (x, y) => x.Equals(y)
                },
                new DelegatingMemberComparer
                {
                    OnIsSatisfiedByProperty = x =>
                                              x.PropertyType == typeof(Guid),

                    OnEquals = (x, y) => true
                },
                new DelegatingMemberComparer
                {
                    OnIsSatisfiedByProperty = x =>
                                              x.PropertyType == typeof(string),

                    OnEquals = (x, y) =>
                               StringComparer.OrdinalIgnoreCase.Equals(x as string, y as string)
                }
            };
            var sut = new SemanticComparer <TypeWithDifferentParameterTypesAndProperties>(comparerStubs);
            // Exercise system
            var result = BothEquals(sut, value, other);

            // Verify outcome
            Assert.True(result.All(b => b));
            // Teardown
        }
示例#17
0
        public void SutOfAbstractTypeEqualsConcreteInstancesThatDifferOnlyOnMemberNotDefinedByAbstraction()
        {
            // Fixture setup
            var value = new ConcreteType("Lorem", "ipsum", "dolor", "sit");

            value.Property5 = "Ploeh";
            var sut = new SemanticComparer <ConcreteType, AbstractType>();

            var other = new ConcreteType();

            other.Property1 = value.Property1;
            other.Property2 = value.Property2;
            other.Property3 = value.Property3;
            other.Property4 = value.Property4;
            other.Property5 = "Fnaah";
            // Exercise system
            var result = sut.Equals(value, other);

            // Verify outcome
            Assert.True(result);
            // Teardown
        }
示例#18
0
        private static IEnumerable <bool> BothEquals <T>(SemanticComparer <T> sut, T x, T y)
        {
            yield return(sut.Equals(x, y));

            yield return(((IEqualityComparer)sut).Equals(x, y));
        }