public void CanRunCodeBeforeMethodExecution() { var options = new TypeToTypeWrapperOptions() { OnBeforeMethod = (wrapperOptions, type, inst, mi) => { if (mi.Name == "Run") { ((TestClass)inst).AddCount(6); } } }; var wrapper = new TypeToTypeWrapper(); var result = wrapper.CreateType(typeof(TestClass), options); dynamic instance = Activator.CreateInstance(result); instance.Run(); instance.Run(); var instanceCount = instance.GetCount(); Assert.Equal(12, instanceCount); }
public void CanCreateSingleton() { var inst = new TestClass(); var options = new TypeToTypeWrapperOptions() { Factory = (wrapperOptions, type) => inst }; var wrapper = new TypeToTypeWrapper(); var result = wrapper.CreateType(typeof(TestClass), options); dynamic instance = Activator.CreateInstance(result); dynamic instance2 = Activator.CreateInstance(result); instance.AddCount(); instance.AddCount(); instance2.AddCount(); instance2.AddCount(); instance2.AddCount(); var instanceCount = instance.GetCount(); Assert.Equal(5, instanceCount); var instance2Count = instance2.GetCount(); Assert.Equal(5, instance2Count); }
public void CanRunCodeOnConstructorUsingString() { var options = new TypeToTypeWrapperOptions() { OnConstructorCustomCodeGenerator = (wrapperOptions, type) => "_instance.AddCount(21);" }; var wrapper = new TypeToTypeWrapper(); var result = wrapper.CreateType(typeof(TestClass), options); dynamic instance = Activator.CreateInstance(result); var instanceCount = instance.GetCount(); Assert.Equal(21, instanceCount); }
public void CanIncludeSpecificMethodsWithMultipleWildCards() { var wrapper = new TypeToTypeWrapper(); var options = new TypeToTypeWrapperOptions() { IncludedMethods = new List <string>() { "*llo*", "Ru*" } }; var result = wrapper.CreateType(typeof(TestClass), options); var allMethods = result.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); Assert.Equal(2, allMethods.Length); }
public void CanRunCodeOnConstructor() { var options = new TypeToTypeWrapperOptions() { OnConstructor = (wrapperOptions, type, inst) => { ((TestClass)inst).AddCount(15); } }; var wrapper = new TypeToTypeWrapper(); var result = wrapper.CreateType(typeof(TestClass), options); dynamic instance = Activator.CreateInstance(result); var instanceCount = instance.GetCount(); Assert.Equal(15, instanceCount); }
public void CanRenameMethod() { var wrapper = new TypeToTypeWrapper(); var options = new TypeToTypeWrapperOptions() { IncludedMethods = new List <string>() { "Run" }, MethodNameGenerator = (wrapperOptions, type, mInfo) => "CustomMethodName" }; var result = wrapper.CreateType(typeof(TestClass), options); dynamic instance = Activator.CreateInstance(result); instance.CustomMethodName(); }
public void CanIncludeSpecificMethodsWithWildCard() { var wrapper = new TypeToTypeWrapper(); var options = new TypeToTypeWrapperOptions() { IncludedMethods = new List <string>() { "Hello*" } }; var originalType = typeof(TestClass); var result = wrapper.CreateType(originalType, options); var allMethods = result.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); Assert.Single(allMethods); }
public void CanRunCodeAfterMethodExecutionUsingString() { var options = new TypeToTypeWrapperOptions() { OnAfterMethodCustomCodeGenerator = (wrapperOptions, type, mi) => "_instance.AddCount(18);" }; var wrapper = new TypeToTypeWrapper(); var result = wrapper.CreateType(typeof(TestClass), options); dynamic instance = Activator.CreateInstance(result); instance.Run(); instance.Run(); var instanceCount = instance.GetCount(); Assert.Equal(36, instanceCount); }
public void CanAddCustomCode() { var customCode = @"public void RunThings() { var y = 0; var a = 1; a = y + 10; }"; var options = new TypeToTypeWrapperOptions() { CustomCodeGenerator = (wrapperOptions, type) => customCode }; var wrapper = new TypeToTypeWrapper(); var result = wrapper.CreateType(typeof(TestClass), options); dynamic instance = Activator.CreateInstance(result); instance.RunThings(); }