PageRenderTime 46ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/src/Ninject.Extensions.Interception.Test/LinFuBaseTests.cs

https://github.com/hereyes/ninject.extensions.interception
C# | 250 lines | 204 code | 44 blank | 2 comment | 2 complexity | 4945ef104c2d9c51ff558d4fc8c42169 MD5 | raw file
Possible License(s): Apache-2.0, LGPL-3.0, MPL-2.0-no-copyleft-exception
  1. #if !SILVERLIGHT
  2. namespace Ninject.Extensions.Interception
  3. {
  4. using FluentAssertions;
  5. using LinFu.DynamicProxy;
  6. using Ninject.Extensions.Interception.Fakes;
  7. using Ninject.Extensions.Interception.Infrastructure.Language;
  8. using Ninject.Extensions.Interception.Interceptors;
  9. using Xunit;
  10. public class LinFuBaseTests : LinFuInterceptionContext
  11. {
  12. [Fact]
  13. public void SelfBoundTypesDeclaringMethodInterceptorsAreProxied()
  14. {
  15. using (var kernel = CreateDefaultInterceptionKernel())
  16. {
  17. kernel.Bind<ObjectWithMethodInterceptor>().ToSelf();
  18. var obj = kernel.Get<ObjectWithMethodInterceptor>();
  19. obj.Should().NotBeNull();
  20. typeof(IProxy).IsAssignableFrom(obj.GetType()).Should().BeTrue();
  21. }
  22. }
  23. [Fact]
  24. public void SelfBoundTypesDeclaringMethodInterceptorsAreIntercepted()
  25. {
  26. using (var kernel = CreateDefaultInterceptionKernel())
  27. {
  28. kernel.Bind<ObjectWithMethodInterceptor>().ToSelf();
  29. var obj = kernel.Get<ObjectWithMethodInterceptor>();
  30. obj.Should().NotBeNull();
  31. typeof(IProxy).IsAssignableFrom(obj.GetType()).Should().BeTrue();
  32. CountInterceptor.Reset();
  33. obj.Foo();
  34. obj.Bar();
  35. CountInterceptor.Count.Should().Be(1);
  36. }
  37. }
  38. [Fact]
  39. public void SelfBoundTypesDeclaringPropertyInterceptorsAreIntercepted()
  40. {
  41. using (var kernel = CreateDefaultInterceptionKernel())
  42. {
  43. kernel.Bind<ObjectWithMethodInterceptor>().ToSelf();
  44. var obj = kernel.Get<ObjectWithMethodInterceptor>();
  45. CountInterceptor.Reset();
  46. var value = obj.TestProperty;
  47. obj.TestProperty = value;
  48. CountInterceptor.Count.Should().Be(0);
  49. var value2 = obj.TestProperty2;
  50. obj.TestProperty2 = value2;
  51. CountInterceptor.Count.Should().Be(1);
  52. }
  53. }
  54. [Fact]
  55. public void SelfBoundTypesDeclaringInterceptorsOnGenericMethodsAreIntercepted()
  56. {
  57. using (var kernel = CreateDefaultInterceptionKernel())
  58. {
  59. kernel.Bind<ObjectWithGenericMethod>().ToSelf();
  60. var obj = kernel.Get<ObjectWithGenericMethod>();
  61. obj.Should().NotBeNull();
  62. typeof(IProxy).IsAssignableFrom(obj.GetType()).Should().BeTrue();
  63. FlagInterceptor.Reset();
  64. string result = obj.ConvertGeneric(42);
  65. result.Should().Be("42");
  66. FlagInterceptor.WasCalled.Should().BeTrue();
  67. }
  68. }
  69. [Fact]
  70. public void ServiceBoundTypesDeclaringMethodInterceptorsAreProxied()
  71. {
  72. using (var kernel = CreateDefaultInterceptionKernel())
  73. {
  74. kernel.Bind<IFoo>().To<ObjectWithMethodInterceptor>();
  75. var obj = kernel.Get<IFoo>();
  76. obj.Should().NotBeNull();
  77. typeof(IProxy).IsAssignableFrom(obj.GetType()).Should().BeTrue();
  78. }
  79. }
  80. [Fact]
  81. public void ServiceBoundTypesDeclaringMethodInterceptorsAreIntercepted()
  82. {
  83. using (var kernel = CreateDefaultInterceptionKernel())
  84. {
  85. kernel.Bind<IFoo>().To<ObjectWithMethodInterceptor>();
  86. var obj = kernel.Get<IFoo>();
  87. obj.Should().NotBeNull();
  88. typeof(IProxy).IsAssignableFrom(obj.GetType()).Should().BeTrue();
  89. CountInterceptor.Reset();
  90. obj.Foo();
  91. CountInterceptor.Count.Should().Be(1);
  92. }
  93. }
  94. [Fact]
  95. public void ServiceBoundTypesDeclaringInterceptorsOnGenericMethodsAreIntercepted()
  96. {
  97. using (var kernel = CreateDefaultInterceptionKernel())
  98. {
  99. kernel.Bind<IGenericMethod>().To<ObjectWithGenericMethod>();
  100. var obj = kernel.Get<IGenericMethod>();
  101. obj.Should().NotBeNull();
  102. typeof(IProxy).IsAssignableFrom(obj.GetType()).Should().BeTrue();
  103. FlagInterceptor.Reset();
  104. string result = obj.ConvertGeneric(42);
  105. result.Should().Be("42");
  106. FlagInterceptor.WasCalled.Should().BeTrue();
  107. }
  108. }
  109. [Fact]
  110. public void SelfBoundTypesThatAreProxiedReceiveConstructorInjections()
  111. {
  112. using (var kernel = CreateDefaultInterceptionKernel())
  113. {
  114. kernel.Bind<RequestsConstructorInjection>().ToSelf();
  115. // This is just here to trigger proxying, but we won't intercept any calls
  116. kernel.Intercept( ( request ) => true ).With<FlagInterceptor>();
  117. var obj = kernel.Get<RequestsConstructorInjection>();
  118. typeof(IProxy).IsAssignableFrom(obj.GetType()).Should().BeTrue();
  119. obj.Child.Should().NotBeNull();
  120. }
  121. }
  122. [Fact]
  123. public void SingletonTests()
  124. {
  125. using (var kernel = CreateDefaultInterceptionKernel())
  126. {
  127. kernel.Bind<RequestsConstructorInjection>().ToSelf().InSingletonScope();
  128. // This is just here to trigger proxying, but we won't intercept any calls
  129. kernel.Intercept(request => true).With<FlagInterceptor>();
  130. var obj = kernel.Get<RequestsConstructorInjection>();
  131. obj.Should().NotBeNull();
  132. typeof(IProxy).IsAssignableFrom(obj.GetType()).Should().BeTrue();
  133. obj.Child.Should().NotBeNull();
  134. }
  135. }
  136. [Fact]
  137. public void SinsgletonTests()
  138. {
  139. using (var kernel = CreateDefaultInterceptionKernel())
  140. {
  141. kernel.Bind<RequestsConstructorInjection>().ToSelf().InSingletonScope().Intercept().With<FlagInterceptor>();
  142. var obj = kernel.Get<RequestsConstructorInjection>();
  143. obj.Should().NotBeNull();
  144. typeof(IProxy).IsAssignableFrom(obj.GetType()).Should().BeTrue();
  145. FlagInterceptor.Reset();
  146. obj.Child.Should().NotBeNull();
  147. FlagInterceptor.WasCalled.Should().BeTrue();
  148. }
  149. }
  150. [Fact]
  151. public void NoneVirtualFunctionIntercepted_WhenResolveByInterface_ThenInterceptabe()
  152. {
  153. using (var kernel = CreateDefaultInterceptionKernel())
  154. {
  155. CountInterceptor.Reset();
  156. kernel.Bind<IFoo>().To<NoneVirtualFooImplementation>().Intercept().With<CountInterceptor>();
  157. var obj = kernel.Get<IFoo>();
  158. obj.Foo();
  159. CountInterceptor.Count.Should().Be(1);
  160. }
  161. }
  162. [Fact]
  163. public void NoneVirtualFunctionIntercepted_WhenResolveByInterfaceAndInterceptionByContext_ThenInterceptabe()
  164. {
  165. using (var kernel = CreateDefaultInterceptionKernel())
  166. {
  167. CountInterceptor.Reset();
  168. kernel.Bind<IFoo>().To<NoneVirtualFooImplementation>();
  169. kernel.Intercept(ctx => ctx.Request.Service == typeof(IFoo)).With<CountInterceptor>();
  170. var obj = kernel.Get<IFoo>();
  171. obj.Foo();
  172. CountInterceptor.Count.Should().Be(1);
  173. }
  174. }
  175. [Fact]
  176. public void NoneVirtualPropertyIntercepted_WhenResolveByInterface_ThenInterceptabe()
  177. {
  178. using (var kernel = CreateDefaultInterceptionKernel())
  179. {
  180. CountInterceptor.Reset();
  181. const bool OriginalValue = true;
  182. kernel.Bind<IFoo>().To<NoneVirtualFooImplementation>();
  183. kernel.Intercept(ctx => ctx.Request.Service == typeof(IFoo)).With<CountInterceptor>();
  184. var obj = kernel.Get<IFoo>();
  185. obj.TestProperty = OriginalValue;
  186. var value = obj.TestProperty;
  187. CountInterceptor.Count.Should().Be(1);
  188. value.Should().Be(OriginalValue);
  189. }
  190. }
  191. [Fact]
  192. public void ClassesWithNoDefaultConstructorCanBeIntercepted()
  193. {
  194. using (var kernel = CreateDefaultInterceptionKernel())
  195. {
  196. CountInterceptor.Reset();
  197. kernel.Bind<IFoo>().To<FooWithNoDefaultConstructor>().Intercept().With<CountInterceptor>();
  198. kernel.Bind<IMock>().To<SimpleObject>();
  199. var obj = kernel.Get<IFoo>();
  200. obj.Foo();
  201. CountInterceptor.Count.Should().Be(1);
  202. }
  203. }
  204. }
  205. }
  206. #endif