PageRenderTime 40ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/src/Ninject.Tests/Unit/CacheTests.cs

https://github.com/developingchris/ninject
C# | 139 lines | 109 code | 30 blank | 0 comment | 0 complexity | fd507c17a82ba845304df9f4d01dbda2 MD5 | raw file
  1. using System;
  2. using Moq;
  3. using Ninject.Activation;
  4. using Ninject.Activation.Caching;
  5. using Ninject.Infrastructure;
  6. using Ninject.Planning.Bindings;
  7. using Ninject.Tests.Fakes;
  8. using Xunit;
  9. using Xunit.Should;
  10. namespace Ninject.Tests.Unit.CacheTests
  11. {
  12. public class CacheContext
  13. {
  14. protected Mock<IPipeline> activatorMock;
  15. protected Mock<ICachePruner> cachePrunerMock;
  16. protected Mock<IBinding> bindingMock;
  17. protected Cache cache;
  18. public CacheContext()
  19. {
  20. activatorMock = new Mock<IPipeline>();
  21. cachePrunerMock = new Mock<ICachePruner>();
  22. bindingMock = new Mock<IBinding>();
  23. cache = new Cache(activatorMock.Object, cachePrunerMock.Object);
  24. }
  25. }
  26. public class WhenTryGetInstanceIsCalled : CacheContext
  27. {
  28. [Fact]
  29. public void ReturnsNullIfNoInstancesHaveBeenAddedToCache()
  30. {
  31. var scope = new object();
  32. var contextMock = new Mock<IContext>();
  33. contextMock.SetupGet(x => x.Binding).Returns(bindingMock.Object);
  34. contextMock.Setup(x => x.GetScope()).Returns(scope);
  35. object instance = cache.TryGet(contextMock.Object);
  36. instance.ShouldBeNull();
  37. }
  38. [Fact]
  39. public void ReturnsCachedInstanceIfOneHasBeenAddedWithinSpecifiedScope()
  40. {
  41. var scope = new object();
  42. var reference = new InstanceReference { Instance = new Sword() };
  43. var contextMock1 = new Mock<IContext>();
  44. contextMock1.SetupGet(x => x.Binding).Returns(bindingMock.Object);
  45. contextMock1.Setup(x => x.GetScope()).Returns(scope);
  46. cache.Remember(contextMock1.Object, reference);
  47. var contextMock2 = new Mock<IContext>();
  48. contextMock2.SetupGet(x => x.Binding).Returns(bindingMock.Object);
  49. contextMock2.Setup(x => x.GetScope()).Returns(scope);
  50. object instance = cache.TryGet(contextMock2.Object);
  51. instance.ShouldBeSameAs(reference.Instance);
  52. }
  53. [Fact]
  54. public void ReturnsNullIfNoInstancesHaveBeenAddedWithinSpecifiedScope()
  55. {
  56. var reference = new InstanceReference { Instance = new Sword() };
  57. var contextMock1 = new Mock<IContext>();
  58. contextMock1.SetupGet(x => x.Binding).Returns(bindingMock.Object);
  59. contextMock1.Setup(x => x.GetScope()).Returns(new object());
  60. cache.Remember(contextMock1.Object, reference);
  61. var contextMock2 = new Mock<IContext>();
  62. contextMock2.SetupGet(x => x.Binding).Returns(bindingMock.Object);
  63. contextMock2.Setup(x => x.GetScope()).Returns(new object());
  64. object instance = cache.TryGet(contextMock2.Object);
  65. instance.ShouldBeNull();
  66. }
  67. }
  68. public class WhenTryGetInstanceIsCalledForContextWithGenericInference : CacheContext
  69. {
  70. [Fact]
  71. public void ReturnsInstanceIfOneHasBeenCachedWithSameGenericParameters()
  72. {
  73. var scope = new object();
  74. var reference = new InstanceReference { Instance = new Sword() };
  75. var contextMock1 = new Mock<IContext>();
  76. contextMock1.SetupGet(x => x.Binding).Returns(bindingMock.Object);
  77. contextMock1.SetupGet(x => x.HasInferredGenericArguments).Returns(true);
  78. contextMock1.SetupGet(x => x.GenericArguments).Returns(new[] { typeof(int) });
  79. contextMock1.Setup(x => x.GetScope()).Returns(scope);
  80. cache.Remember(contextMock1.Object, reference);
  81. var contextMock2 = new Mock<IContext>();
  82. contextMock2.SetupGet(x => x.Binding).Returns(bindingMock.Object);
  83. contextMock2.SetupGet(x => x.HasInferredGenericArguments).Returns(true);
  84. contextMock2.SetupGet(x => x.GenericArguments).Returns(new[] { typeof(int) });
  85. contextMock2.Setup(x => x.GetScope()).Returns(scope);
  86. object instance = cache.TryGet(contextMock2.Object);
  87. instance.ShouldBeSameAs(reference.Instance);
  88. }
  89. [Fact]
  90. public void ReturnsNullIfInstanceAddedToCacheHasDifferentGenericParameters()
  91. {
  92. var scope = new object();
  93. var reference = new InstanceReference { Instance = new Sword() };
  94. var contextMock1 = new Mock<IContext>();
  95. contextMock1.SetupGet(x => x.Binding).Returns(bindingMock.Object);
  96. contextMock1.SetupGet(x => x.HasInferredGenericArguments).Returns(true);
  97. contextMock1.SetupGet(x => x.GenericArguments).Returns(new[] { typeof(int) });
  98. contextMock1.Setup(x => x.GetScope()).Returns(scope);
  99. cache.Remember(contextMock1.Object, reference);
  100. var contextMock2 = new Mock<IContext>();
  101. contextMock2.SetupGet(x => x.Binding).Returns(bindingMock.Object);
  102. contextMock2.SetupGet(x => x.HasInferredGenericArguments).Returns(true);
  103. contextMock2.SetupGet(x => x.GenericArguments).Returns(new[] { typeof(double) });
  104. contextMock2.Setup(x => x.GetScope()).Returns(scope);
  105. object instance = cache.TryGet(contextMock2.Object);
  106. instance.ShouldBeNull();
  107. }
  108. }
  109. }