private Diff <T> GeneratePrivate(T baseline, T working) { Diff <T> diff = new Diff <T>(); diff.BaselineItem = baseline; diff.WorkingItem = working; diff.Name = name; foreach (Introspector introspector in introspectors) { DiffVisibleAttribute attribute = introspector.DiffVisibleAttribute; if (attribute != null && !attribute.Visible) { continue; } string baselineValue = introspector.Getter(baseline, introspector.Format); string workingValue = introspector.Getter(working, introspector.Format); if (string.Compare(baselineValue, workingValue, StringComparison.Ordinal) != 0) { diff.AddEntry(attribute != null && attribute.FriendlyName != null ? attribute.FriendlyName : introspector.Name, baselineValue, workingValue); } } return(diff); }
private static void AddPropertyToBaseline(MemberInfo propertyInfo, object baseline, Type baselineType, DiffBaseline diff) { DiffVisibleAttribute attr = (DiffVisibleAttribute)Attribute.GetCustomAttribute(propertyInfo, typeof(DiffVisibleAttribute)); if (attr == null || attr.Visible) { object baselineValue = baselineType.GetProperty(propertyInfo.Name).GetValue(baseline, null); diff.Add(propertyInfo.Name, baselineValue != null ? baselineValue.ToString() : null); } }
/// <summary> /// Executes the specified base property diff. /// </summary> /// <param name="baseline">The base property diff.</param> /// <param name="working">The new object.</param> /// <returns></returns> public Diff <T> Generate(DiffBaseline baseline, T working) { Argument.Assert.IsNotNull(baseline, nameof(baseline)); Argument.Assert.IsNotNull(working, nameof(working)); if (baseline.ReflectedType != working.GetType()) { throw new ArgumentException("The type of 'baseline.ReflectedType' and 'working' must match."); } Diff <T> diff = new Diff <T>(); diff.Name = baseline.ReflectedType.Name; for (int i = 0; i < baseline.Entries.Count; i++) { DiffBaselineEntry entry = baseline.Entries[i]; PropertyInfo propertyInfo = baseline.ReflectedType.GetProperty(entry.Name); DiffVisibleAttribute attr = (DiffVisibleAttribute)Attribute.GetCustomAttribute(propertyInfo, typeof(DiffVisibleAttribute)); if (attr == null || attr.Visible) { string newValueString = null; object newValue = baseline.ReflectedType.GetProperty(entry.Name).GetValue(working, null); if (newValue != null) { newValueString = newValue.ToString(); } if (string.Compare(entry.BaselineValue, newValueString, StringComparison.Ordinal) != 0) { diff.AddEntry(attr != null && attr.FriendlyName != null ? attr.FriendlyName : entry.Name, entry.BaselineValue, newValueString); } } } return(diff); }