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; }
private ReflectionWrapper(Type type, object value, ClassMemberCriteria criteria) { this.Criteria = criteria; this.ValueType = type; this.Value = value; }
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)); }
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); }
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)); }
internal static ReflectionWrapper BuildFromType(Type type, ClassMemberCriteria criteria) { return(new(type, null, criteria)); }