public void SutIsMemberComparer()
        {
            // Fixture setup
            var dummyComparer = new DelegatingEqualityComparer();
            var sut           = new MemberComparer(dummyComparer);

            // Exercise system and verify outcome
            Assert.IsAssignableFrom <IMemberComparer>(sut);
            // Teardown
        }
        public void ComparerIsCorrect()
        {
            // Fixture setup
            var expected = new DelegatingEqualityComparer();
            var sut      = new MemberComparer(expected);
            // Exercise system
            var result = sut.Comparer;

            // Verify outcome
            Assert.Equal(expected, result);
            // Teardown
        }
        public void IsSatisfiedByWithDefaultSpecificationForFieldReturnsCorrectResult()
        {
            // Fixture setup
            var field         = typeof(FieldHolder <int>).GetProperty("Field");
            var dummyComparer = new DelegatingEqualityComparer();
            var sut           = new MemberComparer(dummyComparer);
            // Exercise system
            var result = sut.IsSatisfiedBy(field);

            // Verify outcome
            Assert.True(result);
            // Teardown
        }
        public void InitializeWithNullFieldSpecificationThrows()
        {
            // Fixture setup
            var dummyComparer      = new DelegatingEqualityComparer();
            var dummySpecification = new DelegatingSpecification <PropertyInfo>();

            // Exercise system and verify outcome
            Assert.Throws <ArgumentNullException>(() =>
                                                  new MemberComparer(
                                                      dummyComparer,
                                                      dummySpecification,
                                                      null));
            // Teardown
        }
        public void GetHashCodeForwardsCorrectCallToComparer(
            object obj,
            int expected)
        {
            // Fixture setup
            var comparerStub = new DelegatingEqualityComparer
            {
                OnGetHashCode = x => x == obj ? expected : 0
            };
            var sut = new MemberComparer(comparerStub);
            // Exercise system
            var result = sut.GetHashCode(obj);

            // Verify outcome
            Assert.Equal(expected, result);
            // Teardown
        }
        public void FieldSpecificationIsCorrect()
        {
            // Fixture setup
            var dummyComparer      = new DelegatingEqualityComparer();
            var expected           = new DelegatingSpecification <FieldInfo>();
            var dummySpecification = new DelegatingSpecification <PropertyInfo>();

            var sut = new MemberComparer(
                dummyComparer,
                dummySpecification,
                expected);
            // Exercise system
            var result = sut.FieldSpecification;

            // Verify outcome
            Assert.Equal(expected, result);
            // Teardown
        }
        public void EqualsForwardsCorrectCallToComparer(
            object a,
            object b,
            bool expected)
        {
            // Fixture setup
            var comparerStub = new DelegatingEqualityComparer
            {
                OnEquals = (x, y) => x.Equals(y)
            };
            var sut = new MemberComparer(comparerStub);
            // Exercise system
            var result = sut.Equals(a, b);

            // Verify outcome
            Assert.Equal(expected, result);
            // Teardown
        }
        public void IsSatisfiedByForFieldReturnsCorrectResult(bool expected)
        {
            // Fixture setup
            var field              = typeof(FieldHolder <int>).GetField("Field");
            var dummyComparer      = new DelegatingEqualityComparer();
            var dummySpecification = new DelegatingSpecification <PropertyInfo>();

            var fieldSpecificationStub =
                new DelegatingSpecification <FieldInfo>
            {
                OnIsSatisfiedBy = x => expected
            };

            var sut = new MemberComparer(
                dummyComparer,
                dummySpecification,
                fieldSpecificationStub);
            // Exercise system
            var result = sut.IsSatisfiedBy(field);

            // Verify outcome
            Assert.Equal(expected, result);
            // Teardown
        }