// Author: Simon Gockner // Created: 2020-09-18 // Copyright(c) 2020 SimonG. All Rights Reserved. using System.Diagnostics.CodeAnalysis; using JetBrains.Annotations; using LightweightIocContainer; using LightweightIocContainer.Exceptions; using LightweightIocContainer.Interfaces; using NUnit.Framework; namespace Test.LightweightIocContainer { [TestFixture] public class OpenGenericRegistrationTest { private IIocContainer _iocContainer; [UsedImplicitly] [SuppressMessage("ReSharper", "UnusedTypeParameter")] public interface ITest { } [UsedImplicitly] public class Test : ITest { } [SetUp] public void SetUp() => _iocContainer = new IocContainer(); [TearDown] public void TearDown() => _iocContainer.Dispose(); [Test] public void TestRegisterOpenGenericType() { _iocContainer.RegisterOpenGenerics(typeof(ITest<>), typeof(Test<>)); ITest test = _iocContainer.Resolve>(); Assert.NotNull(test); } [Test] public void TestRegisterOpenGenericTypeAsSingleton() { _iocContainer.RegisterOpenGenerics(typeof(ITest<>), typeof(Test<>), Lifestyle.Singleton); ITest test = _iocContainer.Resolve>(); Assert.NotNull(test); ITest secondTest = _iocContainer.Resolve>(); Assert.NotNull(secondTest); Assert.AreEqual(test, secondTest); Assert.AreSame(test, secondTest); } [Test] public void TestRegisterOpenGenericTypeAsMultitonThrowsException() => Assert.Throws(() => _iocContainer.RegisterOpenGenerics(typeof(ITest<>), typeof(Test<>), Lifestyle.Multiton)); [Test] public void TestRegisterNonOpenGenericTypeWithOpenGenericsFunctionThrowsException() => Assert.Throws(() => _iocContainer.RegisterOpenGenerics(typeof(int), typeof(int))); } }