public void MemberAccess() { var obj = new TestObject(); dynamic d = new StUtil.Reflection.DynamicReflector(obj) { WrapReturn = false }; Assert.AreEqual("Name", d.Name); Assert.AreEqual(100, d.Value); d.Value = 500; Assert.AreEqual(500, d.Value); d.Name = "Testing"; Assert.AreEqual("Testing", d.Name); d.WrapReturn = true; Assert.AreEqual(500, (int)d.Value); try { d.Value = "Hello"; Assert.Fail("Type mismatch"); } catch (Exception) { } d.WrapReturn = false; Assert.AreEqual("InternalObject", (string)d.obj.GetType().Name); }
public void MethodInvoking() { var obj = new TestObject(); dynamic d = new StUtil.Reflection.DynamicReflector(obj); //Public method Assert.IsTrue((bool)d.Test()); //Private method Assert.AreEqual("olleh", (string)d.Reverse("hello")); }
public void ObjectCreation() { var obj = new TestObject(); dynamic d = new StUtil.Reflection.DynamicReflector(obj) { WrapReturn = false }; var q = d.InternalObject(); Assert.AreEqual("InternalObject", (string)q.GetType().Name); }
public void NestedPropertyAccess() { var obj = new TestObject(); dynamic d = new StUtil.Reflection.DynamicReflector(obj) { WrapReturn = true }; Assert.AreEqual("aa", (string)d.obj.Test); Assert.AreEqual(5, (int)d.obj.Value); d.obj.Value = 999; Assert.AreEqual(999, (int)d.obj.Value); }
public void EventHandling() { var obj = new TestObject(); dynamic d = new StUtil.Reflection.DynamicReflector(obj); bool set = false; //Attach to the event and raise it var evtHandler = new EventHandler((s, e) => { Assert.IsFalse(set); set = true; }); d.TestEvent += evtHandler; d.TestEvent(obj, EventArgs.Empty); Assert.IsTrue(set); //Detatch from the event and raise it set = false; d.TestEvent -= evtHandler; try { d.TestEvent(obj, EventArgs.Empty); Assert.Fail("Invoke should fail as no handlers are attached"); } catch (Exception) { } Assert.IsFalse(set); //Attach to a nested private event d.obj.InternalEvent += evtHandler; d.obj.InternalEvent(obj, EventArgs.Empty); Assert.IsTrue(set); //And detatch set = false; d.obj.InternalEvent -= evtHandler; try { d.obj.InternalEvent(obj, EventArgs.Empty); Assert.Fail("Invoke should fail as no handlers are attached"); } catch (Exception) { } Assert.IsFalse(set); //Bind to an explicitly defined event d.ExplicitEvent += evtHandler; d.ExplicitEvent(obj, EventArgs.Empty); Assert.IsTrue(set); //Detatch set = false; d.ExplicitEvent -= evtHandler; try { d.ExplicitEvent(obj, EventArgs.Empty); Assert.Fail("Invoke should fail as no handlers are attached"); } catch (Exception) { } Assert.IsFalse(set); //Attach to an explicitly defined event with an On method d.ExplicitEvent2 += evtHandler; d.ExplicitEvent2(obj, EventArgs.Empty); Assert.IsTrue(set); //Detatch set = false; d.ExplicitEvent2 -= evtHandler; d.ExplicitEvent2(obj, EventArgs.Empty); Assert.IsFalse(set); //Attach to a reflected method d.TestEvent += d.TriggeredHandler; d.TestEvent(obj, EventArgs.Empty); Assert.IsTrue((bool)d.triggered); //Detatch from the event and raise it d.triggered = false; d.TestEvent -= d.TriggeredHandler; try { d.TestEvent(obj, EventArgs.Empty); Assert.Fail("Invoke should fail as no handlers are attached"); } catch (Exception) { } Assert.IsFalse((bool)d.triggered); }