コード例 #1
0
        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));
        }
コード例 #2
0
        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 CreateGenericPropertyGetterThrowsException()
        {
            var prop = typeof(IInternalInterface).GetProperty("PublicProp");

            Assert.Throws <ArgumentException>(
                () => PropertyAccessorGenerator.CreateGetter <int, int>(prop, false));
            Assert.Throws <ArgumentException>(
                () => PropertyAccessorGenerator.CreateGetter <IInternalInterface, Type>(prop, false));

            var propWithNoGetter = typeof(IInternalInterface).GetProperty("PropWithNoGetter");

            Assert.Throws <ArgumentException>(
                () => PropertyAccessorGenerator.CreateGetter <IInternalInterface, int>(propWithNoGetter, true));

            var propWithPrivateGetter = typeof(InternalClass).GetProperty("PropWithPrivateGetter");

            Assert.Throws <ArgumentException>(
                () => PropertyAccessorGenerator.CreateGetter <InternalClass, int>(propWithPrivateGetter, false));
            Assert.Throws <ArgumentException>(
                () => PropertyAccessorGenerator.CreateGetter <IInternalInterface, int>(propWithPrivateGetter, false));

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

            Assert.Throws <InvalidCastException>(() => getter(new object()));
            Assert.Throws <NullReferenceException>(() => getter(null));
        }
コード例 #4
0
        public void CreateGetterForStaticProperties()
        {
            var propOfClass    = typeof(InternalClass).GetProperty("StaticProp");
            var getterForClass = PropertyAccessorGenerator.CreateGetter(propOfClass, false);

            InternalClass.StaticProp = 332;
            Assert.AreEqual(InternalClass.StaticProp, getterForClass(null));

            var propOfStruct    = typeof(InternalStruct).GetProperty("StaticProp");
            var getterForStruct = PropertyAccessorGenerator.CreateGetter(propOfStruct, false);

            InternalStruct.StaticProp = 222;
            Assert.AreEqual(InternalStruct.StaticProp, getterForStruct(null));
        }
コード例 #5
0
        public void CreateGenericPropertyGetterForStruct()
        {
            var propFromInterface = typeof(IInternalInterface).GetProperty("PublicProp");
            var s = new InternalStruct {
                PublicProp = 321, StringProp = "some"
            };
            var getter = PropertyAccessorGenerator.CreateGetter <IInternalInterface, int>(propFromInterface, false);

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

            var getter2 = PropertyAccessorGenerator.CreateGetter <InternalStruct, int>(propFromInterface, false);

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

            var getter3 = PropertyAccessorGenerator.CreateGetter <IInternalInterface2, int>(propFromInterface, false);

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

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

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

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

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

            var propFromStruct = typeof(InternalStruct).GetProperty("PublicProp");
            var getter6        = PropertyAccessorGenerator.CreateGetter <InternalStruct, int>(propFromStruct, false);

            Assert.AreEqual(s.PublicProp, getter6(s));

            var getter7 = PropertyAccessorGenerator.CreateGetter <object, int>(propFromStruct, false);

            Assert.AreEqual(s.PublicProp, getter7(s));

            var getter8 = PropertyAccessorGenerator.CreateGetter <object, object>(propFromStruct, false);

            Assert.AreEqual(s.PublicProp, getter8(s));

            var stringProp   = typeof(InternalStruct).GetProperty("StringProp");
            var stringGetter = PropertyAccessorGenerator.CreateGetter <InternalStruct, string>(stringProp, false);

            Assert.AreEqual(s.StringProp, stringGetter(s));

            s.StringProp = null;
            Assert.AreEqual(s.StringProp, stringGetter(s));
        }
コード例 #6
0
        public void CreateGetterForClass()
        {
            var prop   = typeof(IInternalInterface).GetProperty("PublicProp");
            var getter = PropertyAccessorGenerator.CreateGetter(prop, false);
            var c      = new InternalClass {
                PublicProp = 321, StringProp = "some"
            };

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

            var propWithPrivateGetter = typeof(InternalClass).GetProperty("PropWithPrivateGetter");
            var privateGetter         = PropertyAccessorGenerator.CreateGetter(propWithPrivateGetter, true);

            Assert.AreEqual(propWithPrivateGetter.GetValue(c, null), privateGetter(c));

            var stringProp   = typeof(InternalClass).GetProperty("StringProp");
            var stringGetter = PropertyAccessorGenerator.CreateGetter(stringProp, false);

            Assert.AreEqual(c.StringProp, stringGetter(c));

            c.StringProp = null;
            Assert.AreEqual(c.StringProp, stringGetter(c));
        }
コード例 #7
0
        public void CreateGetterForStruct()
        {
            var propFromInterface = typeof(IInternalInterface).GetProperty("PublicProp");
            var s = new InternalStruct {
                PublicProp = 321, StringProp = "some"
            };
            var getter = PropertyAccessorGenerator.CreateGetter(propFromInterface, false);

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

            var propFromStruct = typeof(InternalStruct).GetProperty("PublicProp");
            var getter6        = PropertyAccessorGenerator.CreateGetter(propFromStruct, false);

            Assert.AreEqual(s.PublicProp, getter6(s));

            var stringProp   = typeof(InternalStruct).GetProperty("StringProp");
            var stringGetter = PropertyAccessorGenerator.CreateGetter(stringProp, false);

            Assert.AreEqual(s.StringProp, stringGetter(s));

            s.StringProp = null;
            Assert.AreEqual(s.StringProp, stringGetter(s));
        }