Ejemplo n.º 1
0
        public ObjectComparer(IDeepComparer valueComparer, Type type)
        {
            propertyAccessors =
                type.GetPublicProperties()
                .Where(x => x.CanRead)
                .Where(x => x.GetCustomAttribute <IgnoreEqualsAttribute>() == null)
                .Select(x => new PropertyAccessor(x.DeclaringType !, x))
                .ToArray();

            this.valueComparer = valueComparer;
        }
Ejemplo n.º 2
0
        /// <summary>
        ///     Executes the specified left.
        /// </summary>
        /// <param name="left">The left.</param>
        /// <param name="right">The right.</param>
        /// <returns>CompareResults.</returns>
        public CompareResults Execute(object left, object right)
        {
            var retVal = new CompareResults();

            if (m_Context.Visited(left, right))
            {
                return(retVal);
            }
            m_Context.Add(left, right);
            retVal.Log(String.Format("Compare: {0} to {1}", left.GetType(), right.GetType()));
            FieldInfo[] fields = left.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
            foreach (FieldInfo field in fields)
            {
                object leftValue  = field.GetValue(left);
                object rightValue = field.GetValue(right);
                if (ReferenceEquals(leftValue, rightValue))
                {
                    retVal.SameInstance = true;
                    retVal.Log(String.Format("\tCompare: {0}= {1}", field.Name, "Same Instance"));
                }
                else
                {
                    IDeepComparer  comparer = GetComparer(field.FieldType);
                    CompareResults result   = comparer.Process(leftValue, rightValue, m_Context);
                    if (result.AreEqual == false)
                    {
                        retVal.MarkAsDifferent();
                    }
                    foreach (string entry in result.Messages)
                    {
                        retVal.Log(String.Format("\t{0}\t{1}", field.Name, entry));
                    }
                    retVal.Log(String.Format("\tCompare: {0}= {1}", field.Name, result.AreEqual ? "Match" : "Different"));
                }
            }
            return(retVal);
        }
Ejemplo n.º 3
0
 public CollectionComparer(IDeepComparer itemComparer, PropertyAccessor?sizeProperty)
 {
     this.itemComparer = itemComparer;
     this.sizeProperty = sizeProperty;
 }
 public DictionaryComparer(IDeepComparer comparer)
 {
     this.comparer = new CollectionExtensions.KeyValuePairComparer <TKey, TValue>(
         new DeepEqualityComparer <TKey>(comparer),
         new DeepEqualityComparer <TValue>(comparer));
 }
Ejemplo n.º 5
0
 public ArrayComparer(IDeepComparer itemComparer)
 {
     this.itemComparer = itemComparer;
 }
Ejemplo n.º 6
0
 public DeepEqualityComparer(IDeepComparer?comparer = null)
 {
     this.comparer = comparer ?? SimpleEquals.Build(typeof(T));
 }
Ejemplo n.º 7
0
 public SetComparer(IDeepComparer comparer)
 {
     equalityComparer = new DeepEqualityComparer <T>(comparer);
 }