/src/Ninject.Test/Unit/ActivationCacheTests.cs
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
- namespace Ninject.Tests.Unit
- {
- using System;
- using FluentAssertions;
- using Moq;
- using Ninject.Activation.Caching;
- using Xunit;
- public class ActivationCacheTests
- {
- private readonly ActivationCache testee;
- public ActivationCacheTests()
- {
- this.testee = new ActivationCache(new Mock<ICachePruner>().Object);
- }
- [Fact]
- public void IsActivatedReturnsFalseForObjectsNotInTheActivationCache()
- {
- var activated = this.testee.IsActivated(new object());
- activated.Should().BeFalse();
- }
- [Fact]
- public void IsActivatedReturnsTrueForObjectsInTheActivationCache()
- {
- var instance = new TestObject(42);
- this.testee.AddActivatedInstance(instance);
- var activated = this.testee.IsActivated(instance);
- var activatedObjectCount = this.testee.ActivatedObjectCount;
- activated.Should().BeTrue();
- activatedObjectCount.Should().Be(1);
- }
- [Fact]
- public void IsDeactivatedReturnsFalseForObjectsNotInTheDeactivationCache()
- {
- var activated = this.testee.IsDeactivated(new object());
- activated.Should().BeFalse();
- }
- [Fact]
- public void IsDeactivatedReturnsTrueForObjectsInTheDeactivationCache()
- {
- var instance = new TestObject(42);
- this.testee.AddDeactivatedInstance(instance);
- var deactivated = this.testee.IsDeactivated(instance);
- var deactivatedObjectCount = this.testee.DeactivatedObjectCount;
- deactivated.Should().BeTrue();
- deactivatedObjectCount.Should().Be(1);
- }
- [Fact]
- public void DeadObjectsAreRemoved()
- {
- // Use separate method to allow instances to be finalized
- AddActivatedAndDeactivatedInstance();
- GC.Collect();
- GC.WaitForPendingFinalizers();
- GC.Collect();
- this.testee.Prune();
- var activatedObjectCount = this.testee.ActivatedObjectCount;
- var deactivatedObjectCount = this.testee.DeactivatedObjectCount;
- activatedObjectCount.Should().Be(0);
- deactivatedObjectCount.Should().Be(0);
- }
- [Fact]
- public void ImplementationDoesNotRelyOnObjectHashCode()
- {
- var instance = new TestObject(42);
- this.testee.AddActivatedInstance(instance);
- instance.ChangeHashCode(43);
- var isActivated = this.testee.IsActivated(instance);
- isActivated.Should().BeTrue();
- }
- private void AddActivatedAndDeactivatedInstance()
- {
- this.testee.AddActivatedInstance(new TestObject(42));
- this.testee.AddDeactivatedInstance(new TestObject(42));
- }
- }
- }