public void ObjectWrapperToString()
        {
            var testObject  = new PublicValueTypeTestClass();
            var testObject2 = new InternalValueTypeTestClass();

            var objectWrapper1 = new ObjectWrapper(testObject);

            Assert.AreEqual(testObject.ToString(), objectWrapper1.ToString());

            var objectWrapper2 = new ObjectWrapper(testObject2);

            Assert.AreNotEqual(objectWrapper1.ToString(), objectWrapper2.ToString());
        }
        public void ObjectWrapperGetFieldValue_NonPublic()
        {
            var publicTestObject = new PublicValueTypeTestClass();

            var objectWrapper = new ObjectWrapper(publicTestObject);

            Assert.IsNull(objectWrapper.GetFieldValue(nameof(PublicValueTypeTestClass._internalField)));
            Assert.IsNull(objectWrapper.GetFieldValue("_protectedField"));
            Assert.IsNull(objectWrapper.GetFieldValue("_privateField"));

            var internalTestObject = new InternalValueTypeTestClass();

            objectWrapper = new ObjectWrapper(internalTestObject);
            Assert.IsNull(objectWrapper.GetFieldValue(nameof(InternalValueTypeTestClass._internalField)));
            Assert.IsNull(objectWrapper.GetFieldValue("_protectedField"));
            Assert.IsNull(objectWrapper.GetFieldValue("_privateField"));
        }
        public void ObjectWrapperGetPropertyValue_NonPublic()
        {
            var publicTestObject = new PublicValueTypeTestClass();

            var objectWrapper = new ObjectWrapper(publicTestObject);

            Assert.IsNull(objectWrapper.GetPropertyValue(nameof(PublicValueTypeTestClass.InternalPropertyGetSet)));
            Assert.IsNull(objectWrapper.GetPropertyValue("ProtectedPropertyGetSet"));
            Assert.IsNull(objectWrapper.GetPropertyValue("PrivatePropertyGetSet"));


            var internalTestObject = new InternalValueTypeTestClass();

            objectWrapper = new ObjectWrapper(internalTestObject);
            Assert.IsNull(objectWrapper.GetPropertyValue(nameof(InternalValueTypeTestClass.InternalPropertyGetSet)));
            Assert.IsNull(objectWrapper.GetPropertyValue("ProtectedPropertyGetSet"));
            Assert.IsNull(objectWrapper.GetPropertyValue("PrivatePropertyGetSet"));
        }
        public void ImmediateFieldSetValue_ValueType()
        {
            // Value type / Public
            var publicValueTypeTestObject = new PublicValueTypeTestClass();

            var immediateField = new ImmediateField(PublicValueTypePublicFieldFieldsInfo);

            immediateField.SetValue(publicValueTypeTestObject, 12);
            Assert.AreEqual(12, publicValueTypeTestObject._publicField);

            immediateField = new ImmediateField(PublicValueTypeInternalFieldFieldsInfo);
            immediateField.SetValue(publicValueTypeTestObject, 24);
            Assert.AreEqual(24, publicValueTypeTestObject._internalField);

            immediateField = new ImmediateField(PublicValueTypeProtectedFieldFieldsInfo);
            immediateField.SetValue(publicValueTypeTestObject, 48);
            Assert.AreEqual(48, publicValueTypeTestObject.GetProtectedFieldValue());

            immediateField = new ImmediateField(PublicValueTypePrivateFieldFieldsInfo);
            immediateField.SetValue(publicValueTypeTestObject, 96);
            Assert.AreEqual(96, publicValueTypeTestObject.GetPrivateFieldValue());

            // Value type / Internal
            var internalValueTypeTestObject = new InternalValueTypeTestClass();

            immediateField = new ImmediateField(InternalValueTypePublicFieldFieldsInfo);
            immediateField.SetValue(internalValueTypeTestObject, 192);
            Assert.AreEqual(192, internalValueTypeTestObject._publicField);

            immediateField = new ImmediateField(InternalValueTypeInternalFieldFieldsInfo);
            immediateField.SetValue(internalValueTypeTestObject, 384);
            Assert.AreEqual(384, internalValueTypeTestObject._internalField);

            immediateField = new ImmediateField(InternalValueTypeProtectedFieldFieldsInfo);
            immediateField.SetValue(internalValueTypeTestObject, 728);
            Assert.AreEqual(728, internalValueTypeTestObject.GetProtectedFieldValue());

            immediateField = new ImmediateField(InternalValueTypePrivateFieldFieldsInfo);
            immediateField.SetValue(internalValueTypeTestObject, 1536);
            Assert.AreEqual(1536, internalValueTypeTestObject.GetPrivateFieldValue());
        }