public void Test_ReflectManager_Method() { var manager = new ReflectManager(); var te = manager.CreateInstance<TestEmit>(); Assert.IsNull(te.Name); manager.InvokeMethod(te, "SetAge", new object[] { 9 }); Assert.AreEqual(9, te.Age); var age1 = (int)manager.InvokeMethod(te, "GetAge", null); Assert.AreEqual(9, age1); string propertyName = null; te.PropertyChanged += (sender, args) => { propertyName = args.PropertyName; }; var methodInfo = manager.GetMethodInfo(te.GetType(), "OnPropertyChanged", new object[] { "parameter" }); Assert.IsNotNull(methodInfo); manager.RaiseEvent(te, "PropertyChanged", new PropertyChangedEventArgs("Age")); Assert.AreEqual(propertyName, "Age"); Exception exception = null; try { manager.InvokeMethod(te, "GetAgeEx", null); } catch(MissingMemberException e) { exception = e; } Assert.IsNotNull(exception); exception = null; try { manager.RaiseEvent(te, "NoEvent", null); } catch (MissingMemberException e) { exception = e; } Assert.IsNotNull(exception); manager.RegisterExtensionType(typeof(TestEmit), typeof(TestEmitExtension)); methodInfo = manager.GetMethodInfo(te.GetType(), "GetAgeEx", null); Assert.IsNotNull(methodInfo); var age = (int)manager.InvokeMethod(te, "GetAgeEx", null); Assert.AreEqual(9, age); manager.UnRegisterExtensionType(typeof(TestEmit), typeof(TestEmitExtension)); exception = null; try { manager.InvokeMethod(te, "GetAgeEx", null); } catch(MissingMemberException e) { exception = e; } Assert.IsNotNull(exception); te.Name2 = "2"; exception = null; try { DynamicEngine.RaiseEvent(te, "name2", new PropertyChangedEventArgs("Age")); } catch (MissingMemberException e) { exception = e; } Assert.IsNotNull(exception); manager.RegisterExtensionType(typeof(TestEmit), typeof(TestEmitExtension2)); age = (int)manager.InvokeMethod(te, "GetAgeEx2", null); Assert.AreEqual(9, age); TestEmit.AgeEx = 0; object age2 = manager.InvokeMethod(typeof(TestEmit), "AddAgeEx", null); Assert.AreEqual(1, age2); age2 = manager.InvokeMethod(te, manager.GetMethodInfo(typeof(TestEmit), "AddAgeEx", null), null); Assert.AreEqual(2, age2); age2 = manager.InvokeMethod(typeof(TestEmit), "SetAgeEx", new object[] { 5 }); Assert.AreEqual(5, age2); age2 = manager.InvokeMethod(te, "SetAgeEx", new object[] { 7 }); Assert.AreEqual(7, age2); const string name = "yohan"; var parameters = new object[] { name, 1 }; manager.InvokeMethod(te, "ChangeProperty", parameters); Assert.AreEqual("yohan1", parameters[0]); parameters = new object[] { name }; manager.InvokeMethod(te, "ChangeProperty", parameters); Assert.AreEqual("yohan", parameters[0]); }
public void Test_ReflectManager_Method() { var manager = new ReflectManager(); var te = manager.CreateInstance <TestEmit>(); Assert.IsNull(te.Name); manager.InvokeMethod(te, "SetAge", new object[] { 9 }); Assert.AreEqual(9, te.Age); var age1 = (int)manager.InvokeMethod(te, "GetAge", null); Assert.AreEqual(9, age1); string propertyName = null; te.PropertyChanged += (sender, args) => { propertyName = args.PropertyName; }; var methodInfo = manager.GetMethodInfo(te.GetType(), "OnPropertyChanged", new object[] { "parameter" }); Assert.IsNotNull(methodInfo); manager.RaiseEvent(te, "PropertyChanged", new PropertyChangedEventArgs("Age")); Assert.AreEqual(propertyName, "Age"); Exception exception = null; try { manager.InvokeMethod(te, "GetAgeEx", null); } catch (MissingMemberException e) { exception = e; } Assert.IsNotNull(exception); exception = null; try { manager.RaiseEvent(te, "NoEvent", null); } catch (MissingMemberException e) { exception = e; } Assert.IsNotNull(exception); manager.RegisterExtensionType(typeof(TestEmit), typeof(TestEmitExtension)); methodInfo = manager.GetMethodInfo(te.GetType(), "GetAgeEx", null); Assert.IsNotNull(methodInfo); var age = (int)manager.InvokeMethod(te, "GetAgeEx", null); Assert.AreEqual(9, age); manager.UnRegisterExtensionType(typeof(TestEmit), typeof(TestEmitExtension)); exception = null; try { manager.InvokeMethod(te, "GetAgeEx", null); } catch (MissingMemberException e) { exception = e; } Assert.IsNotNull(exception); te.Name2 = "2"; exception = null; try { DynamicEngine.RaiseEvent(te, "name2", new PropertyChangedEventArgs("Age")); } catch (MissingMemberException e) { exception = e; } Assert.IsNotNull(exception); manager.RegisterExtensionType(typeof(TestEmit), typeof(TestEmitExtension2)); age = (int)manager.InvokeMethod(te, "GetAgeEx2", null); Assert.AreEqual(9, age); TestEmit.AgeEx = 0; object age2 = manager.InvokeMethod(typeof(TestEmit), "AddAgeEx", null); Assert.AreEqual(1, age2); age2 = manager.InvokeMethod(te, manager.GetMethodInfo(typeof(TestEmit), "AddAgeEx", null), null); Assert.AreEqual(2, age2); age2 = manager.InvokeMethod(typeof(TestEmit), "SetAgeEx", new object[] { 5 }); Assert.AreEqual(5, age2); age2 = manager.InvokeMethod(te, "SetAgeEx", new object[] { 7 }); Assert.AreEqual(7, age2); const string name = "yohan"; var parameters = new object[] { name, 1 }; manager.InvokeMethod(te, "ChangeProperty", parameters); Assert.AreEqual("yohan1", parameters[0]); parameters = new object[] { name }; manager.InvokeMethod(te, "ChangeProperty", parameters); Assert.AreEqual("yohan", parameters[0]); }