Example #1
0
            public override bool Equals(object actual)
            {
                if (actual == null)
                {
                    return(true);
                }

                Assert.AreEqual(_expected.GetType(), actual.GetType());

                PropertyInfo[] properties = _expected.GetType().GetProperties();
                foreach (PropertyInfo property in properties)
                {
                    if (_ignores.Contains(property.Name))
                    {
                        continue;
                    }

                    if (property.GetIndexParameters().Length > 0)
                    {
                        continue;
                    }

                    if (property.PropertyType.IsAssignableFrom(typeof(ICollection)))
                    {
                        continue;
                    }

                    if (!property.CanRead)
                    {
                        continue;
                    }

                    Debug.WriteLine("Comparing Property " + property.Name);

                    object expectedValue = property.GetValue(_expected, null);
                    object actualValue   = property.GetValue(actual, null);


                    if (expectedValue != null)
                    {
                        if (expectedValue.GetType().IsValueType)
                        {
                            Assert.AreEqual(expectedValue, actualValue, property.Name);
                        }
                        else
                        {
                            var childConstraint = new EqualConstraint(expectedValue);
                            childConstraint._ignores = _ignores;

                            childConstraint.Equals(actualValue);
                        }
                    }
                }

                return(true);
            }