public void CantWriteWrongType()
        {
            var toWrite = "Hello";
            var reflectionWriter = new ReflectionTypeWriter(typeof(SimpleObjectClass));

            Assert.Throws<ArgumentException>(() => reflectionWriter.WriteType(toWrite, this.mockedWriter.Object));
        }
        public void IgnoresFieldThatUseIgnoreSerializeAttribute()
        {
            var toWrite = new HasIgnoredField();
            var reflectionWriter = new ReflectionTypeWriter(toWrite.GetType());
            reflectionWriter.WriteType(toWrite, this.mockedWriter.Object);

            this.mockedWriter.Verify(mr => mr.Write(It.IsAny<object>()), Times.Once());
        }
        public void IgnoredAutoPropertiesAreNotDeserialized()
        {
            var toWrite = new HasIgnoredAutoProperty(123);
            var reflectionWriter = new ReflectionTypeWriter(toWrite.GetType());
            reflectionWriter.WriteType(toWrite, this.mockedWriter.Object);

            this.mockedWriter.Verify(mr => mr.Write(It.IsAny<Type>()), Times.Never());
        }
        public void CanWriteHardSerializeableCtor()
        {
            var toWrite = new HasHardSerializableCtor(1, 2, 3);
            var reflectionWriter = new ReflectionTypeWriter(toWrite.GetType());
            reflectionWriter.WriteType(toWrite, this.mockedWriter.Object);

            this.mockedWriter.Verify(mw => mw.Write(It.IsAny<object>()), Times.Exactly(3));
        }
        public void AutoPropertiesAreDeserialized()
        {
            var toWrite = new HasAutoProperty();
            var reflectionWriter = new ReflectionTypeWriter(toWrite.GetType());
            reflectionWriter.WriteType(toWrite ,this.mockedWriter.Object);

            this.mockedWriter.Verify(mr => mr.Write(It.IsAny<object>()), Times.Once());
        }
        public void NonAutoPropertiesAreNotDeSerialized()
        {
            var toWrite = new HasPropertyWithBackingField();
            var reflectionWriter = new ReflectionTypeWriter(toWrite.GetType());
            reflectionWriter.WriteType(toWrite, this.mockedWriter.Object);

            this.mockedWriter.Verify(mr => mr.Write(It.IsAny<object>()), Times.Once());
        }