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