public void can_notify_after_deserialization()
		{
			var original = new FakeSerializableNotifier();
			
			var serializer = new BinaryFormatter();
			var stream = new MemoryStream();
			serializer.Serialize(stream, original);

			stream.Position = 0;
			var deserialized = (FakeSerializableNotifier)serializer.Deserialize(stream);

			deserialized.FakeProperty = "some string value";
		}
		public void can_be_serialized_and_deserialized() {
			var original = new FakeSerializableNotifier();
			original.FakeProperty = "some string value";
			
			var serializer = new BinaryFormatter();
			var stream = new MemoryStream();
			serializer.Serialize(stream, original);

			stream.Position=0;
			var deserialized = (FakeSerializableNotifier)serializer.Deserialize(stream);

			Assert.AreNotSame(original, deserialized);
			Assert.AreEqual(original.FakeProperty, deserialized.FakeProperty); 
		}
        public void can_notify_after_deserialization()
        {
            var original = new FakeSerializableNotifier();

            var serializer = new BinaryFormatter();
            var stream     = new MemoryStream();

            serializer.Serialize(stream, original);

            stream.Position = 0;
            var deserialized = (FakeSerializableNotifier)serializer.Deserialize(stream);

            deserialized.FakeProperty = "some string value";
        }
		public void can_accept_handlers_after_deserialization()
		{
			var original = new FakeSerializableNotifier();

			var serializer = new BinaryFormatter();
			var stream = new MemoryStream();
			serializer.Serialize(stream, original);

			stream.Position = 0;
			var deserialized = (FakeSerializableNotifier)serializer.Deserialize(stream);

			int handlerCalls = 0;
			deserialized.PropertyChanged += (o, e) => { handlerCalls++; };
			deserialized.FakeProperty = "some string value";

			Assert.AreEqual(1, handlerCalls);
		}
        public void can_be_serialized_and_deserialized()
        {
            var original = new FakeSerializableNotifier();

            original.FakeProperty = "some string value";

            var serializer = new BinaryFormatter();
            var stream     = new MemoryStream();

            serializer.Serialize(stream, original);

            stream.Position = 0;
            var deserialized = (FakeSerializableNotifier)serializer.Deserialize(stream);

            original.ShouldNotBeSameAs(deserialized);
            original.FakeProperty.ShouldBe(deserialized.FakeProperty);
        }
        public void can_accept_handlers_after_deserialization()
        {
            var original = new FakeSerializableNotifier();

            var serializer = new BinaryFormatter();
            var stream     = new MemoryStream();

            serializer.Serialize(stream, original);

            stream.Position = 0;
            var deserialized = (FakeSerializableNotifier)serializer.Deserialize(stream);

            var handlerCalls = 0;

            deserialized.PropertyChanged += (o, e) => { handlerCalls++; };
            deserialized.FakeProperty     = "some string value";

            handlerCalls.ShouldBe(1);
        }