PageRenderTime 45ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/src/Ninject.Test/Unit/ActivationCacheTests.cs

http://github.com/ninject/ninject
C# | 97 lines | 75 code | 21 blank | 1 comment | 0 complexity | 472b89ad3ea7d7d8e6597c9b31605d7f MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, BSD-3-Clause
  1. namespace Ninject.Tests.Unit
  2. {
  3. using System;
  4. using FluentAssertions;
  5. using Moq;
  6. using Ninject.Activation.Caching;
  7. using Xunit;
  8. public class ActivationCacheTests
  9. {
  10. private readonly ActivationCache testee;
  11. public ActivationCacheTests()
  12. {
  13. this.testee = new ActivationCache(new Mock<ICachePruner>().Object);
  14. }
  15. [Fact]
  16. public void IsActivatedReturnsFalseForObjectsNotInTheActivationCache()
  17. {
  18. var activated = this.testee.IsActivated(new object());
  19. activated.Should().BeFalse();
  20. }
  21. [Fact]
  22. public void IsActivatedReturnsTrueForObjectsInTheActivationCache()
  23. {
  24. var instance = new TestObject(42);
  25. this.testee.AddActivatedInstance(instance);
  26. var activated = this.testee.IsActivated(instance);
  27. var activatedObjectCount = this.testee.ActivatedObjectCount;
  28. activated.Should().BeTrue();
  29. activatedObjectCount.Should().Be(1);
  30. }
  31. [Fact]
  32. public void IsDeactivatedReturnsFalseForObjectsNotInTheDeactivationCache()
  33. {
  34. var activated = this.testee.IsDeactivated(new object());
  35. activated.Should().BeFalse();
  36. }
  37. [Fact]
  38. public void IsDeactivatedReturnsTrueForObjectsInTheDeactivationCache()
  39. {
  40. var instance = new TestObject(42);
  41. this.testee.AddDeactivatedInstance(instance);
  42. var deactivated = this.testee.IsDeactivated(instance);
  43. var deactivatedObjectCount = this.testee.DeactivatedObjectCount;
  44. deactivated.Should().BeTrue();
  45. deactivatedObjectCount.Should().Be(1);
  46. }
  47. [Fact]
  48. public void DeadObjectsAreRemoved()
  49. {
  50. // Use separate method to allow instances to be finalized
  51. AddActivatedAndDeactivatedInstance();
  52. GC.Collect();
  53. GC.WaitForPendingFinalizers();
  54. GC.Collect();
  55. this.testee.Prune();
  56. var activatedObjectCount = this.testee.ActivatedObjectCount;
  57. var deactivatedObjectCount = this.testee.DeactivatedObjectCount;
  58. activatedObjectCount.Should().Be(0);
  59. deactivatedObjectCount.Should().Be(0);
  60. }
  61. [Fact]
  62. public void ImplementationDoesNotRelyOnObjectHashCode()
  63. {
  64. var instance = new TestObject(42);
  65. this.testee.AddActivatedInstance(instance);
  66. instance.ChangeHashCode(43);
  67. var isActivated = this.testee.IsActivated(instance);
  68. isActivated.Should().BeTrue();
  69. }
  70. private void AddActivatedAndDeactivatedInstance()
  71. {
  72. this.testee.AddActivatedInstance(new TestObject(42));
  73. this.testee.AddDeactivatedInstance(new TestObject(42));
  74. }
  75. }
  76. }