public void CreateObjectPropertyGetterForDerivedTypes()
        {
            var prop = typeof(IInternalInterface).GetProperty("StringProp");
            var c2   = new InternalClass2 {
                StringProp = "some"
            };

            var getter = PropertyAccessorGenerator.CreateGetter <IInternalInterface2, string>(prop, false);

            Assert.AreEqual(c2.StringProp, getter(c2));

            var getter2 = PropertyAccessorGenerator.CreateGetter <InternalClass, string>(prop, false);

            Assert.AreEqual(c2.StringProp, getter2(c2));

            var getter3 = PropertyAccessorGenerator.CreateGetter <IInternalInterface, string>(prop, false);

            Assert.AreEqual(c2.StringProp, getter3(c2));

            var getter4 = PropertyAccessorGenerator.CreateGetter <object, string>(prop, false);

            Assert.AreEqual(c2.StringProp, getter4(c2));

            var getter5 = PropertyAccessorGenerator.CreateGetter <IInternalInterface, object>(prop, false);

            Assert.AreEqual(c2.StringProp, getter5(c2));

            var getter6 = PropertyAccessorGenerator.CreateGetter <object, object>(prop, false);

            Assert.AreEqual(c2.StringProp, getter6(c2));
        }
        public void CreateValueTypePropertyGetterForDerivedTypes()
        {
            var prop = typeof(IInternalInterface).GetProperty("PublicProp");
            var c2   = new InternalClass2 {
                PublicProp = 123
            };

            var getter = PropertyAccessorGenerator.CreateGetter <IInternalInterface2, int>(prop, false);

            Assert.AreEqual(c2.PublicProp, getter(c2));

            var getter2 = PropertyAccessorGenerator.CreateGetter <InternalClass, int>(prop, false);

            Assert.AreEqual(c2.PublicProp, getter2(c2));

            var getter3 = PropertyAccessorGenerator.CreateGetter <IInternalInterface, int>(prop, false);

            Assert.AreEqual(c2.PublicProp, getter3(c2));

            var getter4 = PropertyAccessorGenerator.CreateGetter <object, int>(prop, false);

            Assert.AreEqual(c2.PublicProp, getter4(c2));

            var getter5 = PropertyAccessorGenerator.CreateGetter <IInternalInterface, object>(prop, false);

            Assert.AreEqual(c2.PublicProp, getter5(c2));

            var getter6 = PropertyAccessorGenerator.CreateGetter <object, object>(prop, false);

            Assert.AreEqual(c2.PublicProp, getter6(c2));
        }
예제 #3
0
        public void CreateGenericSetterForClass()
        {
            var intField = typeof(InternalClass).GetField("_intField", BindingFlags.NonPublic | BindingFlags.Instance);

            Assert.NotNull(intField);

            var intSetter = FieldAccessorGenerator.CreateSetter <InternalClass2, int>(intField);
            var c         = new InternalClass2();

            intSetter(c, 1234);
            Assert.AreEqual(1234, intField.GetValue(c));

            var intSetter2 = FieldAccessorGenerator.CreateSetter <InternalClass2, object>(intField);

            intSetter2(c, 12342);
            Assert.AreEqual(12342, intField.GetValue(c));

            var intSetter3 = FieldAccessorGenerator.CreateSetter <object, int>(intField);

            intSetter3(c, 123423);
            Assert.AreEqual(123423, intField.GetValue(c));

            var stringField = typeof(InternalClass).GetField("_stringField", BindingFlags.NonPublic | BindingFlags.Instance);

            Assert.NotNull(stringField);

            var stringSetter = FieldAccessorGenerator.CreateSetter <InternalClass, string>(stringField);

            stringSetter(c, "string");
            Assert.AreEqual("string", stringField.GetValue(c));

            stringSetter(c, null);
            Assert.AreEqual(null, stringField.GetValue(c));
        }
예제 #4
0
        public void CreateSetterForClass()
        {
            var intField = typeof(InternalClass).GetField("_intField", BindingFlags.NonPublic | BindingFlags.Instance);

            Assert.NotNull(intField);

            var intSetter = FieldAccessorGenerator.CreateSetter(intField);
            var c         = new InternalClass2();

            Assert.Throws <InvalidCastException>(() => intSetter(c, "123"));
            intSetter(c, 1234);
            Assert.AreEqual(1234, intField.GetValue(c));

            var stringField = typeof(InternalClass).GetField("_stringField", BindingFlags.NonPublic | BindingFlags.Instance);

            Assert.NotNull(stringField);

            var stringSetter = FieldAccessorGenerator.CreateSetter(stringField);

            Assert.Throws <InvalidCastException>(() => stringSetter(c, 123));
            stringSetter(c, "string");
            Assert.AreEqual("string", stringField.GetValue(c));

            stringSetter(c, null);
            Assert.AreEqual(null, stringField.GetValue(c));
        }
예제 #5
0
        public void CreateGetterForClass()
        {
            var intField = typeof(InternalClass).GetField("_intField", BindingFlags.NonPublic | BindingFlags.Instance);

            Assert.NotNull(intField);

            var intGetter = FieldAccessorGenerator.CreateGetter(intField);
            var c         = new InternalClass2();

            intField.SetValue(c, 123);
            Assert.AreEqual(intField.GetValue(c), intGetter(c));

            var stringField = typeof(InternalClass).GetField("_stringField", BindingFlags.NonPublic | BindingFlags.Instance);

            Assert.NotNull(stringField);

            var stringGetter = FieldAccessorGenerator.CreateGetter(stringField);

            stringField.SetValue(c, "str");
            Assert.AreEqual(stringField.GetValue(c), stringGetter(c));

            stringField.SetValue(c, null);
            Assert.AreEqual(null, stringGetter(c));
        }