public void Mixin_With_InterfaceProxy_With_Target() { var generator = new ProxyGenerator(); var options = new ProxyGeneratorOptions(); options.AddMixinInstance(new PropertyChangedNotifier()); var target = new MyClass_b(); var proxy = generator.CreateInterfaceProxyWithTarget <IMyClass_b>(target, options); Assert.AreEqual(0, MyClass_b.States.Count); proxy.Title = "New title"; Assert.AreEqual(1, MyClass_b.States.Count); Assert.AreEqual(StateTypes.Notify, MyClass_b.States[0]); MyClass_b.States.Clear(); proxy.UpdateTitle(); // target.Title => out of the Proxy, cannot intercept Assert.AreEqual(0, MyClass_b.States.Count); }
public void Get_Unique_Proxy_Name() { var moduleDefinition = new ModuleDefinition(); var typeDefinition = moduleDefinition.GetTypeDefinition(typeof(TypeM1), null, null); var target = typeof(TypeM1); var typeDefinition2 = moduleDefinition.GetTypeDefinition(typeof(TypeM1), target, null); var o = new ProxyGeneratorOptions(); o.AddMixinInstance(new MyMixin()); var typeDefinition3 = moduleDefinition.GetTypeDefinition(typeof(TypeM1), null, o); var typeDefinition4 = moduleDefinition.GetTypeDefinition(typeof(ITypeM1), target, null); var typeDefinition5 = moduleDefinition.GetTypeDefinition(typeof(ITypeM1), target, o); Assert.AreEqual(5, moduleDefinition.TypeDefinitions.Count); Assert.AreEqual(0, moduleDefinition.TypeDefinitions.IndexOf(typeDefinition)); Assert.AreEqual("NIntercept.Proxies.TypeM1_Proxy", typeDefinition.FullName); Assert.AreEqual(1, moduleDefinition.TypeDefinitions.IndexOf(typeDefinition2)); Assert.AreEqual("NIntercept.Proxies.TypeM1_1_Proxy", typeDefinition2.FullName); Assert.AreEqual(2, moduleDefinition.TypeDefinitions.IndexOf(typeDefinition3)); Assert.AreEqual("NIntercept.Proxies.TypeM1_2_Proxy", typeDefinition3.FullName); Assert.AreEqual(0, moduleDefinition.TypeDefinitions.IndexOf(typeDefinition4)); Assert.AreEqual("NIntercept.Proxies.ITypeM1_Proxy", typeDefinition4.FullName); Assert.AreEqual(1, moduleDefinition.TypeDefinitions.IndexOf(typeDefinition5)); Assert.AreEqual("NIntercept.Proxies.ITypeM1_1_Proxy", typeDefinition5.FullName); }
public void Find_IndexOf() { var moduleDefinition = new ModuleDefinition(); var typeDefinition = moduleDefinition.GetTypeDefinition(typeof(TypeM1), null, null); var target = typeof(TypeM1); var typeDefinition2 = moduleDefinition.GetTypeDefinition(typeof(TypeM1), target, null); var o = new ProxyGeneratorOptions(); o.AddMixinInstance(new MyMixin()); var typeDefinition3 = moduleDefinition.GetTypeDefinition(typeof(TypeM1), null, o); var typeDefinition4 = moduleDefinition.GetTypeDefinition(typeof(ITypeM1), target, null); var typeDefinition5 = moduleDefinition.GetTypeDefinition(typeof(ITypeM1), target, o); Assert.AreEqual(5, moduleDefinition.TypeDefinitions.Count); Assert.AreEqual(0, moduleDefinition.TypeDefinitions.IndexOf(typeDefinition)); Assert.AreEqual(1, moduleDefinition.TypeDefinitions.IndexOf(typeDefinition2)); Assert.AreEqual(2, moduleDefinition.TypeDefinitions.IndexOf(typeDefinition3)); Assert.AreEqual(0, moduleDefinition.TypeDefinitions.IndexOf(typeDefinition4)); Assert.AreEqual(1, moduleDefinition.TypeDefinitions.IndexOf(typeDefinition5)); }
protected virtual void Initialize() { var options = new ProxyGeneratorOptions(); options.AddMixinInstance(new PropertyChangedMixin()); proxies.Add(typeof(MainWindowViewModel), generator.CreateClassProxy <MainWindowViewModel>(options)); }
public void MixinNumberNotEquals() { var comparer = new ProxyGeneratorOptionsComparer(); var o1 = new ProxyGeneratorOptions(); o1.AddMixinInstance(new TypeITD()); var o2 = new ProxyGeneratorOptions(); Assert.AreEqual(false, comparer.Equals(o1, o2)); }
public void SameMxinsTypeNotEquals() { var comparer = new ProxyGeneratorOptionsComparer(); var o1 = new ProxyGeneratorOptions(); o1.AddMixinInstance(new TypeITD()); var o2 = new ProxyGeneratorOptions(); o2.AddMixinInstance(new TypeITD()); Assert.AreEqual(true, comparer.Equals(o1, o2)); }
private static void RunMixinsSample(ProxyGenerator generator) { Console.WriteLine("---------------------- Mixins ----------------------"); var options = new ProxyGeneratorOptions(); options.AddMixinInstance(new PropertyChangedMixin()); var proxy = generator.CreateClassProxy <MyClassWithMixin>(options); // new LogInterceptor()); proxy.Title = "New title"; proxy.UpdateTitle(); // caution with ClassProxy and InterfaceProxy with targets, cannot work because the target is called, and this is not the property Title of the proxy that is called }
public void Return_Same_TypeDefinition_With_Same_Type_And_Same_Target_Type_And_Same_Options() { var moduleDefinition = new ModuleDefinition(); var target = typeof(TypeM1); var o = new ProxyGeneratorOptions(); o.AddMixinInstance(new MyMixin()); var typeDefinition = moduleDefinition.GetTypeDefinition(typeof(TypeM1), target, o); Assert.AreEqual(TypeDefinitionType.ClassProxy, typeDefinition.TypeDefinitionType); Assert.AreEqual(typeof(ClassProxyDefinition), typeDefinition.GetType()); Assert.AreEqual(typeof(TypeM1), typeDefinition.Type); Assert.AreEqual(target, typeDefinition.TargetType); Assert.AreEqual(1, moduleDefinition.TypeDefinitions.Count); Assert.AreEqual(typeDefinition, moduleDefinition.TypeDefinitions[0]); // returns same type definition for same type with same target type or null and same options var target2 = typeof(TypeM1); var o2 = new ProxyGeneratorOptions(); o2.AddMixinInstance(new MyMixin()); var typeDefinition2 = moduleDefinition.GetTypeDefinition(typeof(TypeM1), target2, o2); Assert.AreEqual(TypeDefinitionType.ClassProxy, typeDefinition2.TypeDefinitionType); Assert.AreEqual(typeof(ClassProxyDefinition), typeDefinition2.GetType()); Assert.AreEqual(typeof(TypeM1), typeDefinition2.Type); Assert.AreEqual(target2, typeDefinition2.TargetType); var comparer = new ProxyGeneratorOptionsComparer(); Assert.AreEqual(true, comparer.Equals(o2, typeDefinition2.Options)); Assert.AreEqual(typeDefinition2, typeDefinition); Assert.AreEqual(1, moduleDefinition.TypeDefinitions.Count); Assert.AreEqual(typeDefinition, moduleDefinition.TypeDefinitions[0]); }
public void Mixin_With_ClassProxy() { var generator = new ProxyGenerator(); var options = new ProxyGeneratorOptions(); options.AddMixinInstance(new PropertyChangedNotifier()); var proxy = generator.CreateClassProxy <MyClass>(options); Assert.AreEqual(0, MyClass.States.Count); proxy.Title = "New title"; Assert.AreEqual(1, MyClass.States.Count); Assert.AreEqual(StateTypes.Notify, MyClass.States[0]); MyClass.States.Clear(); proxy.UpdateTitle(); Assert.AreEqual(1, MyClass.States.Count); Assert.AreEqual(StateTypes.Notify, MyClass.States[0]); }
public void Mixin_Without_Interface_Throw() { var o = new ProxyGeneratorOptions(); Assert.ThrowsException <ArgumentException>(() => o.AddMixinInstance(new InvalidMixin())); }
public void Mixin_Do_Not_Include_Doublons_Test() { var o = new ProxyGeneratorOptions(); o.AddMixinInstance(new MyMixin()); var moduleScope = new ModuleScope(); var generator = new ProxyGenerator(moduleScope); var typeDefinition = generator.GetTypeDefinition(typeof(TypeScope1), null, o); TypeBuilder typeBulder = moduleScope.Module.DefineType(typeDefinition.FullName, typeDefinition.TypeAttributes); var proxyScope = new ProxyScope(moduleScope, typeBulder, typeDefinition); proxyScope.DefineTypeAndMembers(); Assert.AreEqual(1, proxyScope.Properties.Count); Assert.AreEqual("MyProperty", proxyScope.Properties[0].Name); Assert.AreEqual(10, proxyScope.Methods.Count); // get set meth, add, remove Assert.AreEqual("get_MyProperty_Callback", proxyScope.Methods[0].Name); Assert.AreEqual("get_MyProperty", proxyScope.Methods[1].Name); Assert.AreEqual("set_MyProperty_Callback", proxyScope.Methods[2].Name); Assert.AreEqual("set_MyProperty", proxyScope.Methods[3].Name); Assert.AreEqual("Method_Callback", proxyScope.Methods[4].Name); Assert.AreEqual("Method", proxyScope.Methods[5].Name); Assert.AreEqual("add_MyEvent_Callback", proxyScope.Methods[6].Name); Assert.AreEqual("add_MyEvent", proxyScope.Methods[7].Name); Assert.AreEqual("remove_MyEvent_Callback", proxyScope.Methods[8].Name); Assert.AreEqual("remove_MyEvent", proxyScope.Methods[9].Name); Assert.AreEqual(1, proxyScope.Events.Count); Assert.AreEqual("MyEvent", proxyScope.Events[0].GetName()); // fields Assert.AreEqual(2, proxyScope.ConstructorFields.Length); Assert.AreEqual("__interceptors", proxyScope.ConstructorFields[0].Name); Assert.AreEqual("__myMixin", proxyScope.ConstructorFields[1].Name); Assert.AreEqual(10, proxyScope.Fields.Count); Assert.AreEqual("__interceptors", proxyScope.Fields[0].Name); Assert.AreEqual("__myMixin", proxyScope.Fields[1].Name); Assert.AreEqual("TypeScope1_MyProperty", proxyScope.Fields[2].Name); Assert.AreEqual("TypeScope1_Proxy_get_MyProperty", proxyScope.Fields[3].Name); Assert.AreEqual("TypeScope1_Proxy_set_MyProperty", proxyScope.Fields[4].Name); Assert.AreEqual("TypeScope1_Method", proxyScope.Fields[5].Name); Assert.AreEqual("TypeScope1_Proxy_Method", proxyScope.Fields[6].Name); Assert.AreEqual("TypeScope1_MyEvent", proxyScope.Fields[7].Name); Assert.AreEqual("TypeScope1_Proxy_add_MyEvent", proxyScope.Fields[8].Name); Assert.AreEqual("TypeScope1_Proxy_remove_MyEvent", proxyScope.Fields[9].Name); // mappings var acc = new TypeAccessor(proxyScope); var propertyMappings = acc.Fields["propertyMappings"].GetValue() as List <PropertyMapping>; Assert.AreEqual(1, propertyMappings.Count); Assert.AreEqual("TypeScope1_MyProperty", propertyMappings[0].MemberField.Name); Assert.AreEqual("TypeScope1_Proxy_get_MyProperty", propertyMappings[0].GetMethodField.Name); Assert.AreEqual("TypeScope1_Proxy_set_MyProperty", propertyMappings[0].SetMethodField.Name); Assert.AreEqual("MyProperty", propertyMappings[0].Property.Name); Assert.AreEqual("get_MyProperty", propertyMappings[0].GetMethodBuilder.Name); Assert.AreEqual("set_MyProperty", propertyMappings[0].SetMethodBuilder.Name); var methodMappings = acc.Fields["methodMappings"].GetValue() as List <MethodMapping>; Assert.AreEqual(1, methodMappings.Count); Assert.AreEqual("TypeScope1_Method", methodMappings[0].MemberField.Name); Assert.AreEqual("TypeScope1_Proxy_Method", methodMappings[0].MethodField.Name); Assert.AreEqual("Method", methodMappings[0].Method.Name); Assert.AreEqual("Method", methodMappings[0].MethodBuilder.Name); var eventMappings = acc.Fields["eventMappings"].GetValue() as List <EventMapping>; Assert.AreEqual(1, eventMappings.Count); Assert.AreEqual("TypeScope1_MyEvent", eventMappings[0].MemberField.Name); Assert.AreEqual("TypeScope1_Proxy_add_MyEvent", eventMappings[0].AddMethodField.Name); Assert.AreEqual("TypeScope1_Proxy_remove_MyEvent", eventMappings[0].RemoveMethodField.Name); Assert.AreEqual("MyEvent", eventMappings[0].Event.Name); Assert.AreEqual("add_MyEvent", eventMappings[0].AddMethodBuilder.Name); Assert.AreEqual("remove_MyEvent", eventMappings[0].RemoveMethodBuilder.Name); }