public void CreateGenericPropertySetterForStruct()
        {
            var    prop   = typeof(IInternalInterface).GetProperty("PublicProp");
            var    setter = PropertyAccessorGenerator.CreateSetter <object, int>(prop, false);
            object s      = new InternalStruct(); //the value type must be boxed

            setter(s, 123);
            Assert.AreEqual(123, ((InternalStruct)s).PublicProp);

            var propWithPrivateSetter = typeof(InternalStruct).GetProperty("PropWithPrivateSetter");
            var privateSetter         = PropertyAccessorGenerator.CreateSetter <object, int>(propWithPrivateSetter, true);

            privateSetter(s, 234);
            Assert.AreEqual(234, ((InternalStruct)s).PropWithPrivateSetter);

            var stringProp   = typeof(InternalStruct).GetProperty("StringProp");
            var stringSetter = PropertyAccessorGenerator.CreateSetter <object, string>(stringProp, false);

            stringSetter(s, "some string");
            Assert.AreEqual("some string", ((InternalStruct)s).StringProp);

            var objectValueSetter = PropertyAccessorGenerator.CreateSetter <object, object>(prop, false);

            objectValueSetter(s, 321);
            Assert.AreEqual(321, ((InternalStruct)s).PublicProp);
        }
Beispiel #2
0
        public void CreateGenericSetterForStruct()
        {
            var intField = typeof(InternalStruct).GetField("_intField", BindingFlags.NonPublic | BindingFlags.Instance);

            Assert.NotNull(intField);

            var    intSetter = FieldAccessorGenerator.CreateSetter <object, int>(intField);
            object s         = new InternalStruct();

            intSetter(s, 876);
            Assert.AreEqual(876, intField.GetValue(s));

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

            intSetter2(s, 8762);
            Assert.AreEqual(8762, intField.GetValue(s));

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

            Assert.NotNull(stringField);

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

            stringSetter(s, "str1");
            Assert.AreEqual("str1", stringField.GetValue(s));

            stringSetter(s, null);
            Assert.AreEqual(null, stringField.GetValue(s));

            var stringSetter2 = FieldAccessorGenerator.CreateSetter <object, object>(stringField);

            stringSetter2(s, "str12");
            Assert.AreEqual("str12", stringField.GetValue(s));
        }
Beispiel #3
0
        public void CreateSetterForStruct()
        {
            var intField = typeof(InternalStruct).GetField("_intField", BindingFlags.NonPublic | BindingFlags.Instance);

            Assert.NotNull(intField);

            var    intSetter = FieldAccessorGenerator.CreateSetter(intField);
            object s         = new InternalStruct();

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

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

            Assert.NotNull(stringField);

            var stringSetter = FieldAccessorGenerator.CreateSetter(stringField);

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

            stringSetter(s, null);
            Assert.AreEqual(null, stringField.GetValue(s));
        }
        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));
        }
Beispiel #5
0
        public void CreateGenericGetterForStruct()
        {
            var intField = typeof(InternalStruct).GetField("_intField", BindingFlags.NonPublic | BindingFlags.Instance);

            Assert.NotNull(intField);

            var intGetter = FieldAccessorGenerator.CreateGetter <InternalStruct, int>(intField);
            var s         = new InternalStruct();

            intField.SetValue(s, 1231);
            Assert.AreEqual(intField.GetValue(s), intGetter(s));

            var intGetter2 = FieldAccessorGenerator.CreateGetter <object, int>(intField);

            intField.SetValue(s, 1232);
            Assert.AreEqual(intField.GetValue(s), intGetter2(s));

            var intGetter3 = FieldAccessorGenerator.CreateGetter <InternalStruct, object>(intField);

            intField.SetValue(s, 1233);
            Assert.AreEqual(intField.GetValue(s), intGetter3(s));

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

            Assert.NotNull(stringField);

            var stringGetter = FieldAccessorGenerator.CreateGetter <InternalStruct, string>(stringField);

            stringField.SetValue(s, "str1");
            Assert.AreEqual(stringField.GetValue(s), stringGetter(s));

            stringField.SetValue(s, null);
            Assert.AreEqual(null, stringGetter(s));

            var stringGetter2 = FieldAccessorGenerator.CreateGetter <InternalStruct, object>(stringField);

            stringField.SetValue(s, "str2");
            Assert.AreEqual(stringField.GetValue(s), stringGetter2(s));

            var stringGetter3 = FieldAccessorGenerator.CreateGetter <object, string>(stringField);

            stringField.SetValue(s, "str3");
            Assert.AreEqual(stringField.GetValue(s), stringGetter3(s));
        }
        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));
        }