Esempio n. 1
0
        public override ConstraintResult ApplyTo <TActual>(TActual actual)
        {
            var eq = new EqualConstraint(Expected);

            Description = Prefix + eq.Description;
            var success = eq.ApplyTo(actual).IsSuccess;

            if (AppliedOp == Op.Not)
            {
                success = !success;
            }
            return(new ErrConstraintResult(this, actual, success));
        }
Esempio n. 2
0
        public override ConstraintResult ApplyTo <TActual>(TActual actual)
        {
            // null checks mimic how nunit equals work
            if (expected == null && actual == null)
            {
                return(new ConstraintResult(this, actual, true));
            }
            if (expected == null)
            {
                return(new MessageConstraintResult(this, actual, "Expected is null"));
            }
            if (actual == null)
            {
                return(new MessageConstraintResult(this, actual, "Actual is null"));
            }

            // actual should contain all of the properties which expected has
            // though actual may have extra properties which expected does not
            var expectedProperties = new List <PropertyInfo>(expected.GetType().GetProperties().Where(p => propertiesToIgnore.Contains(p.Name) == false));
            var actualProperties   = new List <PropertyInfo>(actual.GetType().GetProperties());

            var missingProperties = expectedProperties.Select(p => p.Name).Except(actualProperties.Select(p => p.Name)).ToList();

            if (missingProperties.Any())
            {
                return(new MessageConstraintResult(this, actual, $"Expected contains the following properties which actual is missing: {string.Join(", ", missingProperties)}"));
            }

            // loop though expected objects properties, and use nunit equal constraint to see if properties are equal
            var result = new MultiEqualsConstraintResult(this, actual);

            foreach (var expectedProperty in expectedProperties)
            {
                var expectedPropertyValue = expectedProperty.GetValue(expected, null);
                var actualPropertyValue   = actualProperties.Single(p => p.Name == expectedProperty.Name).GetValue(actual, null);

                var equalConstraint = new EqualConstraint(expectedPropertyValue);
                result.AddResult(expectedProperty.Name, equalConstraint.ApplyTo(actualPropertyValue));
            }

            return(result);
        }