public void WriteMessageTo_WithCollectionMemberAgainstSameTypeWithoutCollection_ContainsMemberDiscrepancy()
        {
            var withAddresses = new CustomerWithCollection
            {
                Name        = "name",
                PhoneNumber = "number",
                Addresses   = new[]
                {
                    new Address {
                        AddressLineOne = "1_1", AddressLineTwo = "1_2", City = "city_1", State = "state_1", Zipcode = "zip_1"
                    },
                    new Address {
                        AddressLineOne = "2_1", AddressLineTwo = "2_2", City = "city_2", State = "state_2", Zipcode = "zip_2"
                    }
                }
            };

            var withoutAddresses = new CustomerWithCollection
            {
                Name        = "name",
                PhoneNumber = "number",
            };

            var subject = new MatchingConstraint(withoutAddresses);

            Assert.That(getMessage(subject, withAddresses),
                        memberContainer("Addresses") &
                        expectedValue(null) &
                        actualValue(Does.Contain("<")));
        }
        public void WriteMessageTo_WithCollectionMemberWithLessMembers_ContainsIndexedDiscrepancy()
        {
            var withAddresses = new CustomerWithCollection
            {
                Name        = "name",
                PhoneNumber = "number",
                Addresses   = new[]
                {
                    new Address {
                        AddressLineOne = "1_1", AddressLineTwo = "1_2", City = "city_1", State = "state_1", Zipcode = "zip_1"
                    },
                    new Address {
                        AddressLineOne = "2_1", AddressLineTwo = "2_2", City = "city_2", State = "state_2", Zipcode = "zip_2"
                    }
                }
            };

            var lessAddresses = new
            {
                Name        = "name",
                PhoneNumber = "number",
                Addresses   = new object[] { new { AddressLineOne = "1_1" } }
            };

            var subject = new MatchingConstraint(lessAddresses);

            Assert.That(getMessage(subject, withAddresses),
                        memberContainer("Addresses") &
                        indexOfOffendingCollectionItem(1) &
                        missingExpectedMember() &
                        actualValue(Does.Contain("Address")));
        }
        public void WriteMessageTo_DifferentDeepValue_ContainsMemberDiscrepancy()
        {
            var actual = new
            {
                A = "a",
                B = new
                {
                    C = 1,
                    D = new { E = TimeSpan.Zero }
                }
            };

            var expected = new
            {
                A = "a",
                B = new
                {
                    C = 1,
                    D = new { E = TimeSpan.MaxValue }
                }
            };

            var subject = new MatchingConstraint(expected);

            Assert.That(getMessage(subject, actual),
                        offendingMember("E") &
                        actualValue(TimeSpan.Zero) &
                        expectedValue(TimeSpan.MaxValue));
        }
        public void ApplyTo_WithCollectionMemberWithSameShapeAndDifferentValues_False()
        {
            var complex = new CustomerWithCollection
            {
                Name        = "name",
                PhoneNumber = "number",
                Addresses   = new[]
                {
                    new Address {
                        AddressLineOne = "1_1", AddressLineTwo = "1_2", City = "city_1", State = "state_1", Zipcode = "zip_1"
                    },
                    new Address {
                        AddressLineOne = "2_1", AddressLineTwo = "2_2", City = "city_2", State = "state_2", Zipcode = "zip_2"
                    }
                }
            };

            var expected = new
            {
                Name      = "name",
                Addresses = new object[]
                {
                    new { State = "state_1" },
                    new { Zipcode = "notSameValue" }
                }
            };

            var subject = new MatchingConstraint(expected);

            Assert.That(matches(subject, complex), Is.False);
        }
        public void ApplyTo_WithCollectionMemberAgainstSameTypeWithoutCollection_False()
        {
            var withAddresses = new CustomerWithCollection
            {
                Name        = "name",
                PhoneNumber = "number",
                Addresses   = new[]
                {
                    new Address {
                        AddressLineOne = "1_1", AddressLineTwo = "1_2", City = "city_1", State = "state_1", Zipcode = "zip_1"
                    },
                    new Address {
                        AddressLineOne = "2_1", AddressLineTwo = "2_2", City = "city_2", State = "state_2", Zipcode = "zip_2"
                    }
                }
            };

            var withoutAddresses = new CustomerWithCollection
            {
                Name        = "name",
                PhoneNumber = "number",
            };

            var subject = new MatchingConstraint(withoutAddresses);

            Assert.That(matches(subject, withAddresses), Is.False);
        }
        public void ApplyTo_DifferentDeepValue_False()
        {
            var actual = new
            {
                A = "a",
                B = new
                {
                    C = 1,
                    D = new { E = TimeSpan.Zero }
                }
            };

            var expected = new
            {
                A = "a",
                B = new
                {
                    C = 1,
                    D = new { E = TimeSpan.MaxValue }
                }
            };

            var subject = new MatchingConstraint(expected);

            Assert.That(matches(subject, actual), Is.False);
        }
        public void ApplyTo_PrettyDeepWithSameValues_True()
        {
            var actual = new
            {
                A = "a",
                B = new
                {
                    C = 1,
                    D = new { E = TimeSpan.Zero }
                }
            };

            var expected = new
            {
                A = "a",
                B = new
                {
                    C = 1,
                    D = new { E = TimeSpan.Zero }
                }
            };

            var subject = new MatchingConstraint(expected);

            Assert.That(matches(subject, actual), Is.True);
        }
        public void WriteMessageTo_ExpectedIsSupersetOfActual_ContainsMemberDiscrepancy()
        {
            var subject = new MatchingConstraint(new { A = "a", B = 1 });

            Assert.That(getMessage(subject, new { A = "a" }),
                        offendingMember("B") &
                        expectedValue(1) &
                        missingActualMember()
                        );
        }
        public void WriteMessageTo_ExpectedWithSameShapeAndDifferentValues_ContainsMemberDiscrepancy()
        {
            var subject = new MatchingConstraint(new { A = "differentValue" });

            string message = getMessage(subject, new { A = "b" });

            Assert.That(message,
                        offendingMember("A") &
                        expectedValue("differentValue") &
                        actualValue("b"));
        }
        public void WriteMessageTo_WithCollectionMemberWithSameShapeAndDifferentValues_ContainsIndexedDiscrepancy()
        {
            var complex = new CustomerWithCollection
            {
                Name        = "name",
                PhoneNumber = "number",
                Addresses   = new[]
                {
                    new Address {
                        AddressLineOne = "1_1", AddressLineTwo = "1_2", City = "city_1", State = "state_1", Zipcode = "zip_1"
                    },
                    new Address {
                        AddressLineOne = "2_1", AddressLineTwo = "2_2", City = "city_2", State = "state_2", Zipcode = "zip_2"
                    }
                }
            };

            var expected = new
            {
                Name      = "name",
                Addresses = new object[]
                {
                    new { State = "state_1" },
                    new { Zipcode = "notSameValue" }
                }
            };

            var subject = new MatchingConstraint(expected);

            Assert.That(getMessage(subject, complex),
                        memberContainer("CustomerWithCollection.Addresses") &
                        indexOfOffendingCollectionItem(1) &
                        offendingMember("Zipcode") &
                        expectedValue("notSameValue") &
                        actualValue("zip_2")
                        );
        }
        public void ApplyTo_ExpectedIsSupersetOfActual_False()
        {
            var subject = new MatchingConstraint(new { A = "a", B = 1 });

            Assert.That(matches(subject, new { A = "a" }), Is.False);
        }
        public void ApplyTo_ExpectedWithSameShapeAndDifferentValues_FalseRegardlessOfCasing(string differentValue)
        {
            var subject = new MatchingConstraint(new { A = differentValue });

            Assert.That(matches(subject, new { A = "b" }), Is.False);
        }
        public void ApplyTo_ExpectedWithSameShapeAndSameValues_True()
        {
            var subject = new MatchingConstraint(new { A = "a" });

            Assert.That(matches(subject, new { A = "a" }), Is.True);
        }