Beispiel #1
0
        private static AggregatedDifference AnonymousTypeDifference <TA, TE>(TA actual, TE expected, Type type,
                                                                             AggregatedDifference result)
        {
            var criteria = new ClassMemberCriteria(BindingFlags.Instance);

            criteria.SetPublic();
            criteria.CaptureProperties();
            criteria.CaptureFields();
            // use field based comparison
            var wrapper       = ReflectionWrapper.BuildFromInstance(type, expected, criteria);
            var actualWrapped = ReflectionWrapper.BuildFromInstance(actual.GetType(), actual, criteria);

            foreach (var match in actualWrapped.MemberMatches(wrapper).Where(match => !match.DoValuesMatches))
            {
                result.Add(DifferenceDetails.FromMatch(match));
            }

            return(result);
        }
Beispiel #2
0
        internal List <MemberMatch> MemberMatches <TU>(TU expectedValue)
        {
            var expectedWrapped =
                ReflectionWrapper.BuildFromInstance(expectedValue?.GetType() ?? typeof(TU), expectedValue, this.Criteria);

            var result = new List <MemberMatch>();

            expectedWrapped.MapFields(this, 1, (expected, actual, depth) =>
            {
                if (actual?.Value == null || expected?.Value == null)
                {
                    result.Add(new MemberMatch(expected, actual));
                    return(false);
                }

                if (depth <= 0 && expected.ValueType.ImplementsEquals())
                {
                    result.Add(new MemberMatch(expected, actual));
                    return(false);
                }

                if (!expected.IsArray)
                {
                    return(true);
                }

                if (actual.IsArray && ((Array)expected.Value).Length == ((Array)actual.Value).Length)
                {
                    return(true);
                }

                result.Add(new MemberMatch(expected, actual));
                return(false);
            });
            return(result);
        }