public void SimpleMixin_ClassProxy() { ProxyGenerationOptions options = new ProxyGenerationOptions(); SimpleMixin mixin_instance = new SimpleMixin(); options.AddMixinInstance(mixin_instance); AssertInvocationInterceptor interceptor = new AssertInvocationInterceptor(); object proxy = generator.CreateClassProxy(typeof(SimpleClass), options, interceptor); Assert.IsNotNull(proxy); Assert.IsTrue(typeof(SimpleClass).IsAssignableFrom(proxy.GetType())); Assert.IsFalse(interceptor.Invoked); ISimpleMixin mixin = proxy as ISimpleMixin; Assert.IsNotNull(mixin); Assert.AreEqual(1, mixin.DoSomething()); Assert.IsTrue(interceptor.Invoked); Assert.AreSame(proxy, interceptor.proxy); Assert.AreSame(mixin_instance, interceptor.mixin); }
public void MixinForInterfaces() { ProxyGenerationOptions proxyGenerationOptions = new ProxyGenerationOptions(); SimpleMixin mixin_instance = new SimpleMixin(); proxyGenerationOptions.AddMixinInstance(mixin_instance); AssertInvocationInterceptor interceptor = new AssertInvocationInterceptor(); MyInterfaceImpl target = new MyInterfaceImpl(); object proxy = generator.CreateInterfaceProxyWithTarget( typeof(IMyInterface), target, proxyGenerationOptions, interceptor); Assert.IsNotNull(proxy); Assert.IsTrue(typeof(IMyInterface).IsAssignableFrom(proxy.GetType())); Assert.IsFalse(interceptor.Invoked); ISimpleMixin mixin = proxy as ISimpleMixin; Assert.IsNotNull(mixin); Assert.AreEqual(1, mixin.DoSomething()); Assert.IsTrue(interceptor.Invoked); Assert.AreSame(proxy, interceptor.proxy); Assert.AreSame(mixin_instance, interceptor.mixin); }
public void TestTypeCachingWithMultipleMixins() { ProxyGenerationOptions options = new ProxyGenerationOptions(); SimpleMixin mixin_instance1 = new SimpleMixin(); ComplexMixin mixin_instance2 = new ComplexMixin(); options.AddMixinInstance(mixin_instance1); options.AddMixinInstance(mixin_instance2); AssertInvocationInterceptor interceptor = new AssertInvocationInterceptor(); object proxy1 = generator.CreateClassProxy(typeof(SimpleClass), options, interceptor); options = new ProxyGenerationOptions(); mixin_instance1 = new SimpleMixin(); mixin_instance2 = new ComplexMixin(); options.AddMixinInstance(mixin_instance2); options.AddMixinInstance(mixin_instance1); interceptor = new AssertInvocationInterceptor(); object proxy2 = generator.CreateClassProxy(typeof(SimpleClass), options, interceptor); Assert.IsTrue(proxy1.GetType().Equals(proxy2.GetType())); }
public void SimpleMixin_ClassProxy() { var options = new ProxyGenerationOptions(); var mixin_instance = new SimpleMixin(); options.AddMixinInstance(mixin_instance); var interceptor = new AssertInvocationInterceptor(); var proxy = generator.CreateClassProxy(typeof(SimpleClass), options, interceptor); Assert.IsNotNull(proxy); Assert.IsTrue(proxy is SimpleClass); Assert.IsFalse(interceptor.Invoked); var mixin = proxy as ISimpleMixin; Assert.IsNotNull(mixin); Assert.AreEqual(1, mixin.DoSomething()); Assert.IsTrue(interceptor.Invoked); Assert.AreSame(proxy, interceptor.proxy); Assert.AreSame(mixin_instance, interceptor.mixin); }
public void SimpleMixin_InterfaceProxy_WithtTargetInterface() { var options = new ProxyGenerationOptions(); var mixin_instance = new SimpleMixin(); options.AddMixinInstance(mixin_instance); var interceptor = new AssertInvocationInterceptor(); var proxy = generator.CreateInterfaceProxyWithTargetInterface(typeof(IService), new ServiceImpl(), options, interceptor); Assert.IsNotNull(proxy); Assert.IsTrue(proxy is IService); Assert.IsFalse(interceptor.Invoked); var mixin = proxy as ISimpleMixin; Assert.IsNotNull(mixin); Assert.AreEqual(1, mixin.DoSomething()); Assert.IsTrue(interceptor.Invoked); Assert.AreSame(proxy, interceptor.proxy); Assert.AreSame(mixin_instance, interceptor.mixin); }
public void MixinImplementingMoreThanOneInterface() { ProxyGenerationOptions proxyGenerationOptions = new ProxyGenerationOptions(); ComplexMixin mixin_instance = new ComplexMixin(); proxyGenerationOptions.AddMixinInstance(mixin_instance); AssertInvocationInterceptor interceptor = new AssertInvocationInterceptor(); object proxy = generator.CreateClassProxy( typeof(SimpleClass), proxyGenerationOptions, interceptor ); Assert.IsNotNull(proxy); Assert.IsTrue(typeof(SimpleClass).IsAssignableFrom(proxy.GetType())); Assert.IsFalse(interceptor.Invoked); IThird inter3 = proxy as IThird; Assert.IsNotNull(inter3); inter3.DoThird(); Assert.IsTrue(interceptor.Invoked); Assert.AreSame(proxy, interceptor.proxy); Assert.AreSame(mixin_instance, interceptor.mixin); ISecond inter2 = proxy as ISecond; Assert.IsNotNull(inter2); inter2.DoSecond(); Assert.IsTrue(interceptor.Invoked); Assert.AreSame(proxy, interceptor.proxy); Assert.AreSame(mixin_instance, interceptor.mixin); IFirst inter1 = proxy as IFirst; Assert.IsNotNull(inter1); inter1.DoFirst(); Assert.IsTrue(interceptor.Invoked); Assert.AreSame(proxy, interceptor.proxy); Assert.AreSame(mixin_instance, interceptor.mixin); }
public void TestTypeCachingWithMixins() { var options = new ProxyGenerationOptions(); var mixin_instance = new SimpleMixin(); options.AddMixinInstance(mixin_instance); var interceptor = new AssertInvocationInterceptor(); var proxy1 = generator.CreateClassProxy(typeof(SimpleClass), options, interceptor); options = new ProxyGenerationOptions(); mixin_instance = new SimpleMixin(); options.AddMixinInstance(mixin_instance); interceptor = new AssertInvocationInterceptor(); var proxy2 = generator.CreateClassProxy(typeof(SimpleClass), options, interceptor); Assert.IsTrue(proxy1.GetType().Equals(proxy2.GetType())); }
public void TwoMixins() { ProxyGenerationOptions proxyGenerationOptions = new ProxyGenerationOptions(); SimpleMixin mixin1 = new SimpleMixin(); OtherMixin mixin2 = new OtherMixin(); proxyGenerationOptions.AddMixinInstance(mixin1); proxyGenerationOptions.AddMixinInstance(mixin2); AssertInvocationInterceptor interceptor = new AssertInvocationInterceptor(); object proxy = generator.CreateClassProxy( typeof(SimpleClass), proxyGenerationOptions, interceptor ); Assert.IsFalse(interceptor.Invoked); Assert.IsNotNull(proxy); Assert.IsTrue(typeof(SimpleClass).IsAssignableFrom(proxy.GetType())); ISimpleMixin mixin = proxy as ISimpleMixin; Assert.IsNotNull(mixin); Assert.AreEqual(1, mixin.DoSomething()); Assert.IsTrue(interceptor.Invoked); Assert.AreSame(proxy, interceptor.proxy); Assert.AreSame(mixin1, interceptor.mixin); IOtherMixin other = proxy as IOtherMixin; Assert.IsNotNull(other); Assert.AreEqual(3, other.Sum(1, 2)); Assert.IsTrue(interceptor.Invoked); Assert.AreSame(proxy, interceptor.proxy); Assert.AreSame(mixin2, interceptor.mixin); }
public void SimpleMixin_ClassProxy() { ProxyGenerationOptions options = new ProxyGenerationOptions(); SimpleMixin mixin_instance = new SimpleMixin(); options.AddMixinInstance(mixin_instance); AssertInvocationInterceptor interceptor = new AssertInvocationInterceptor(); object proxy = generator.CreateClassProxy(typeof (SimpleClass), options, interceptor); Assert.IsNotNull(proxy); Assert.IsTrue(typeof (SimpleClass).IsAssignableFrom(proxy.GetType())); Assert.IsFalse(interceptor.Invoked); ISimpleMixin mixin = proxy as ISimpleMixin; Assert.IsNotNull(mixin); Assert.AreEqual(1, mixin.DoSomething()); Assert.IsTrue(interceptor.Invoked); Assert.AreSame(proxy, interceptor.proxy); Assert.AreSame(mixin_instance, interceptor.mixin); }
public void TestTypeCachingWithMultipleMixins() { ProxyGenerationOptions options = new ProxyGenerationOptions(); SimpleMixin mixin_instance1 = new SimpleMixin(); ComplexMixin mixin_instance2 = new ComplexMixin(); options.AddMixinInstance(mixin_instance1); options.AddMixinInstance(mixin_instance2); AssertInvocationInterceptor interceptor = new AssertInvocationInterceptor(); object proxy1 = generator.CreateClassProxy(typeof (SimpleClass), options, interceptor); options = new ProxyGenerationOptions(); mixin_instance1 = new SimpleMixin(); mixin_instance2 = new ComplexMixin(); options.AddMixinInstance(mixin_instance2); options.AddMixinInstance(mixin_instance1); interceptor = new AssertInvocationInterceptor(); object proxy2 = generator.CreateClassProxy(typeof (SimpleClass), options, interceptor); Assert.IsTrue(proxy1.GetType().Equals(proxy2.GetType())); }
public void MixinImplementingMoreThanOneInterface() { ProxyGenerationOptions proxyGenerationOptions = new ProxyGenerationOptions(); ComplexMixin mixin_instance = new ComplexMixin(); proxyGenerationOptions.AddMixinInstance(mixin_instance); AssertInvocationInterceptor interceptor = new AssertInvocationInterceptor(); object proxy = generator.CreateClassProxy( typeof (SimpleClass), proxyGenerationOptions, interceptor); Assert.IsNotNull(proxy); Assert.IsTrue(typeof (SimpleClass).IsAssignableFrom(proxy.GetType())); Assert.IsFalse(interceptor.Invoked); IThird inter3 = proxy as IThird; Assert.IsNotNull(inter3); inter3.DoThird(); Assert.IsTrue(interceptor.Invoked); Assert.AreSame(proxy, interceptor.proxy); Assert.AreSame(mixin_instance, interceptor.mixin); ISecond inter2 = proxy as ISecond; Assert.IsNotNull(inter2); inter2.DoSecond(); Assert.IsTrue(interceptor.Invoked); Assert.AreSame(proxy, interceptor.proxy); Assert.AreSame(mixin_instance, interceptor.mixin); IFirst inter1 = proxy as IFirst; Assert.IsNotNull(inter1); inter1.DoFirst(); Assert.IsTrue(interceptor.Invoked); Assert.AreSame(proxy, interceptor.proxy); Assert.AreSame(mixin_instance, interceptor.mixin); }
public void MixinForInterfaces() { ProxyGenerationOptions proxyGenerationOptions = new ProxyGenerationOptions(); SimpleMixin mixin_instance = new SimpleMixin(); proxyGenerationOptions.AddMixinInstance(mixin_instance); AssertInvocationInterceptor interceptor = new AssertInvocationInterceptor(); MyInterfaceImpl target = new MyInterfaceImpl(); object proxy = generator.CreateInterfaceProxyWithTarget( typeof (IMyInterface), target, proxyGenerationOptions, interceptor); Assert.IsNotNull(proxy); Assert.IsTrue(typeof (IMyInterface).IsAssignableFrom(proxy.GetType())); Assert.IsFalse(interceptor.Invoked); ISimpleMixin mixin = proxy as ISimpleMixin; Assert.IsNotNull(mixin); Assert.AreEqual(1, mixin.DoSomething()); Assert.IsTrue(interceptor.Invoked); Assert.AreSame(proxy, interceptor.proxy); Assert.AreSame(mixin_instance, interceptor.mixin); }
public void TwoMixins() { ProxyGenerationOptions proxyGenerationOptions = new ProxyGenerationOptions(); SimpleMixin mixin1 = new SimpleMixin(); OtherMixin mixin2 = new OtherMixin(); proxyGenerationOptions.AddMixinInstance(mixin1); proxyGenerationOptions.AddMixinInstance(mixin2); AssertInvocationInterceptor interceptor = new AssertInvocationInterceptor(); object proxy = generator.CreateClassProxy( typeof (SimpleClass), proxyGenerationOptions, interceptor); Assert.IsFalse(interceptor.Invoked); Assert.IsNotNull(proxy); Assert.IsTrue(typeof (SimpleClass).IsAssignableFrom(proxy.GetType())); ISimpleMixin mixin = proxy as ISimpleMixin; Assert.IsNotNull(mixin); Assert.AreEqual(1, mixin.DoSomething()); Assert.IsTrue(interceptor.Invoked); Assert.AreSame(proxy, interceptor.proxy); Assert.AreSame(mixin1, interceptor.mixin); IOtherMixin other = proxy as IOtherMixin; Assert.IsNotNull(other); Assert.AreEqual(3, other.Sum(1, 2)); Assert.IsTrue(interceptor.Invoked); Assert.AreSame(proxy, interceptor.proxy); Assert.AreSame(mixin2, interceptor.mixin); }