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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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"));
        }
Exemple #8
0
        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);
        }
Exemple #9
0
        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 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);
        }