Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        /// <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);
        }