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); }
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)); }
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)); }
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)); }