// Author: Gockner, Simon // Created: 2021-12-16 // Copyright(c) 2021 SimonG. All Rights Reserved. using JetBrains.Annotations; using LightweightIocContainer; using LightweightIocContainer.Exceptions; using NUnit.Framework; namespace Test.LightweightIocContainer; [TestFixture] public class DisposeStrategyTest { [UsedImplicitly] public interface ITest : IDisposable { } private class Test : ITest { public void Dispose() => throw new Exception(); } private class TestMultiton : Test { public TestMultiton(int scope) { } } private class TestNotDisposable { } [Test] public void TestValidContainerDisposeStrategySingleton() { IocContainer iocContainer = new(); iocContainer.Register(r => r.Add(Lifestyle.Singleton).WithDisposeStrategy(DisposeStrategy.Container)); iocContainer.Resolve(); Assert.Throws(() => iocContainer.Dispose()); } [Test] public void TestValidContainerDisposeStrategyMultiton() { IocContainer iocContainer = new(); iocContainer.Register(r => r.AddMultiton().WithDisposeStrategy(DisposeStrategy.Container)); iocContainer.Resolve(1); Assert.Throws(() => iocContainer.Dispose()); } [Test] public void TestValidAppDisposeStrategySingleton() { IocContainer iocContainer = new(); iocContainer.Register(r => r.Add(Lifestyle.Singleton).WithDisposeStrategy(DisposeStrategy.Application)); iocContainer.Resolve(); Assert.DoesNotThrow(() => iocContainer.Dispose()); } [Test] public void TestValidAppDisposeStrategyMultiton() { IocContainer iocContainer = new(); iocContainer.Register(r => r.AddMultiton().WithDisposeStrategy(DisposeStrategy.Application)); iocContainer.Resolve(1); Assert.DoesNotThrow(() => iocContainer.Dispose()); } [Test] public void TestInvalidDisposeStrategySingleton() { IocContainer iocContainer = new(); Assert.Throws(() => iocContainer.Register(r => r.Add(Lifestyle.Singleton))); } [Test] public void TestInvalidDisposeStrategyMultiton() { IocContainer iocContainer = new(); Assert.Throws(() => iocContainer.Register(r => r.AddMultiton())); } [Test] public void TestInvalidDisposeStrategyTransient() { IocContainer iocContainer = new(); Assert.Throws(() => iocContainer.Register(r => r.Add().WithDisposeStrategy(DisposeStrategy.Container))); } [Test] public void TestNoDisposeStrategyTypeNotDisposableSingleton() { IocContainer iocContainer = new(); iocContainer.Register(r => r.Add(Lifestyle.Singleton)); iocContainer.Resolve(); Assert.DoesNotThrow(() => iocContainer.Dispose()); } [Test] public void TestInvalidDisposeStrategyTypeNotDisposableSingleton() { IocContainer iocContainer = new(); Assert.Throws(() => iocContainer.Register(r => r.Add(Lifestyle.Singleton).WithDisposeStrategy(DisposeStrategy.Container))); } }