public void ApplyTo_NonSerializable_False()
        {
            var nonSerializable = new NonSerializable("s");
            var subject = new SerializationConstraint<NonSerializable>(new JsonRoundtripSerializer<NonSerializable>(), Is.Not.Null);

            Assert.That(matches(subject,nonSerializable), Is.False);
        }
        public void ApplyTo_NonSerializable_False()
        {
            var nonSerializable = new NonSerializable("s");
            var subject         = new SerializationConstraint <NonSerializable>(new JsonRoundtripSerializer <NonSerializable>(), Is.Not.Null);

            Assert.That(matches(subject, nonSerializable), Is.False);
        }
        public void WriteMessageTo_NonSerializable_ExpectedContainsConstraintExpectations_ActualContainsExpectationsErrorPlusObject()
        {
            var nonSerializable = new NonSerializable("s");
            var subject         = new SerializationConstraint <NonSerializable>(new JsonRoundtripSerializer <NonSerializable>(), Is.Not.Null);

            Assert.That(getMessage(subject, nonSerializable), Does
                        .StartWith(TextMessageWriter.Pfx_Expected + "Deserialized object not null").And
                        .Contains(TextMessageWriter.Pfx_Actual + "Could not serialize/deserialize object"));
        }
        public void WriteMessageTo_NonSerializable_ExpectedContainsConstraintExpectations_ActualContainsExpectationsErrorPlusObject()
        {
            var nonSerializable = new NonSerializable("s");
            var subject = new SerializationConstraint<NonSerializable>(new JsonRoundtripSerializer<NonSerializable>(), Is.Not.Null);

            Assert.That(getMessage(subject, nonSerializable), Does
                .StartWith(TextMessageWriter.Pfx_Expected + "Deserialized object not null").And
                .Contains(TextMessageWriter.Pfx_Actual + "Could not serialize/deserialize object"));
        }
        public void ApplyTo_NonMatchingSerializable_False()
        {
            var serializable = new Serializable { D = 3m, S = "s" };
            var subject = new SerializationConstraint<Serializable>(new JsonRoundtripSerializer<Serializable>(),
                Is.Not.SameAs(serializable)
                    .And.Property("S").EqualTo("sS")
                    .And.Property("D").EqualTo(3m));

            Assert.That(matches(subject,serializable), Is.False);
        }
        public void WriteMessageTo_NonMatchingSerializable_ActualContainsOffendingValueAndActualObject()
        {
            var serializable = new Serializable { D = 3m, S = "s" };
            var subject = new SerializationConstraint<Serializable>(new JsonRoundtripSerializer<Serializable>(),
                Is.Not.SameAs(serializable)
                    .And.Property("S").EqualTo("sS")
                    .And.Property("D").EqualTo(3m));

            Assert.That(getMessage(subject, serializable), Does.Contain(TextMessageWriter.Pfx_Actual + "\"s\"").And
                .Contains(" -> <" + typeof(Serializable).FullName + ">"));
        }
        public void ApplyTo_NonMatchingSerializable_False()
        {
            var serializable = new Serializable {
                D = 3m, S = "s"
            };
            var subject = new SerializationConstraint <Serializable>(new JsonRoundtripSerializer <Serializable>(),
                                                                     Is.Not.SameAs(serializable)
                                                                     .And.Property("S").EqualTo("sS")
                                                                     .And.Property("D").EqualTo(3m));

            Assert.That(matches(subject, serializable), Is.False);
        }
        public void WriteMessageTo_NonMatchingSerializable_ActualContainsOffendingValueAndActualObject()
        {
            var serializable = new Serializable {
                D = 3m, S = "s"
            };
            var subject = new SerializationConstraint <Serializable>(new JsonRoundtripSerializer <Serializable>(),
                                                                     Is.Not.SameAs(serializable)
                                                                     .And.Property("S").EqualTo("sS")
                                                                     .And.Property("D").EqualTo(3m));

            Assert.That(getMessage(subject, serializable), Does.Contain(TextMessageWriter.Pfx_Actual + "\"s\"").And
                        .Contains(" -> <" + typeof(Serializable).FullName + ">"));
        }
        public void ApplyTo_AppliesConstraintToDeserialized()
        {
            var serializable = new Serializable { D = 3m, S = "s" };
            var deserialized = new Serializable();

            var serializer = Substitute.For<IRoundtripSerializer<Serializable>>();
            var constraint = Substitute.For<Constraint>();
            serializer.Deserialize().Returns(deserialized);

            var subject = new SerializationConstraint<Serializable>(serializer, constraint);
            subject.ApplyTo(serializable);

            constraint.Received().ApplyTo(deserialized);
        }
        public void ApplyTo_AppliesConstraintToDeserialized()
        {
            var serializable = new Serializable {
                D = 3m, S = "s"
            };
            var deserialized = new Serializable();

            var serializer = Substitute.For <IRoundtripSerializer <Serializable> >();
            var constraint = Substitute.For <Constraint>();

            serializer.Deserialize().Returns(deserialized);

            var subject = new SerializationConstraint <Serializable>(serializer, constraint);

            subject.ApplyTo(serializable);

            constraint.Received().ApplyTo(deserialized);
        }
        public void ApplyTo_AsksDeserializerToDeserializeWhatWasSerialized()
        {
            var serializable = new Serializable { D = 3m, S = "s" };

            var serializer = Substitute.For<IRoundtripSerializer<Serializable>>();

            var subject = new SerializationConstraint<Serializable>(serializer, Is.Null);
            subject.ApplyTo(serializable);

            ICall[] receivedCalls = serializer.ReceivedCalls().ToArray();

            // first call: .Serialize(serializable)
            Assert.That(receivedCalls[0].GetMethodInfo().Name, Is.EqualTo("Serialize"));
            Assert.That(receivedCalls[0].GetArguments()[0], Is.SameAs(serializable));

            // second call: Deserialize()
            Assert.That(receivedCalls[1].GetMethodInfo().Name, Is.EqualTo("Deserialize"));

            // third call: Dispose()
            Assert.That(receivedCalls[2].GetMethodInfo().Name, Is.EqualTo("Dispose"));
        }
        public void ApplyTo_AsksDeserializerToDeserializeWhatWasSerialized()
        {
            var serializable = new Serializable {
                D = 3m, S = "s"
            };

            var serializer = Substitute.For <IRoundtripSerializer <Serializable> >();

            var subject = new SerializationConstraint <Serializable>(serializer, Is.Null);

            subject.ApplyTo(serializable);

            ICall[] receivedCalls = serializer.ReceivedCalls().ToArray();

            // first call: .Serialize(serializable)
            Assert.That(receivedCalls[0].GetMethodInfo().Name, Is.EqualTo("Serialize"));
            Assert.That(receivedCalls[0].GetArguments()[0], Is.SameAs(serializable));

            // second call: Deserialize()
            Assert.That(receivedCalls[1].GetMethodInfo().Name, Is.EqualTo("Deserialize"));

            // third call: Dispose()
            Assert.That(receivedCalls[2].GetMethodInfo().Name, Is.EqualTo("Dispose"));
        }