Exemple #1
0
 private ReflectionWrapper(string nameInSource, string prefix, string labelPattern, Type type, object value,
                           ClassMemberCriteria criteria) : this(type, value, criteria)
 {
     this.NameInSource = nameInSource;
     this.prefix       = prefix;
     this.labelPattern = labelPattern;
 }
Exemple #2
0
 private ReflectionWrapper(Type type, object value,
                           ClassMemberCriteria criteria)
 {
     this.Criteria  = criteria;
     this.ValueType = type;
     this.Value     = value;
 }
Exemple #3
0
        internal static ReflectionWrapper BuildFromField(string prefix, string name, Type type, object value,
                                                         ClassMemberCriteria criteria)
        {
            string labelPattern;

            if (EvaluateCriteria(AutoPropertyMask, name, out var nameInSource))
            {
                if (criteria.WithProperties)
                {
                    return(null);
                }
                labelPattern = $"autoproperty '{{0}}' (field '{name}')";
            }
            else if (EvaluateCriteria(AnonymousTypeFieldMask, name, out nameInSource))
            {
                labelPattern = "field '{0}'";
            }
            else
            {
                nameInSource = name;
                labelPattern = "field '{0}'";
            }

            return(new ReflectionWrapper(nameInSource, prefix, labelPattern, value?.GetType() ?? type, value,
                                         criteria));
        }
Exemple #4
0
        internal static ReflectionWrapper BuildFromInstance(Type type, object value, ClassMemberCriteria criteria)
        {
            if (type == typeof(ReflectionWrapper))
            {
                return(value as ReflectionWrapper);
            }

            return(new ReflectionWrapper(type, value, criteria));
        }
        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);
        }
Exemple #6
0
 internal static ReflectionWrapper BuildFromProperty(string prefix, string name, Type type, object value,
                                                     ClassMemberCriteria criteria)
 {
     return(new(name, prefix, "property '{0}'", value?.GetType() ?? type, value, criteria));
 }
Exemple #7
0
 internal static ReflectionWrapper BuildFromType(Type type, ClassMemberCriteria criteria)
 {
     return(new(type, null, criteria));
 }