using NUnit.Framework; using Assert = ModestTree.Assert; namespace Zenject.Tests { [TestFixture] public class TestValidation { DiContainer Container { get; set; } [SetUp] public void Setup() { Container = new DiContainer(true); Container.Settings = new ZenjectSettings( ValidationErrorResponses.Throw, RootResolveMethods.All); } [Test] public void TestFailure() { Container.Bind().AsSingle(); Assert.Throws(() => Container.ResolveRoots()); } [Test] public void TestSuccess() { Container.Bind().AsSingle(); Container.Bind().AsSingle(); Container.ResolveRoots(); } [Test] public void TestNumCalls() { Gorp.CallCount = 0; Container.BindInterfacesAndSelfTo().AsSingle(); Container.ResolveRoots(); Assert.IsEqual(Gorp.CallCount, 1); } [Test] public void TestFactoryFail() { Container.BindFactory(); Assert.Throws(() => Container.ResolveRoots()); } [Test] public void TestFactorySuccess() { Container.Bind().AsSingle(); Container.BindFactory(); Container.ResolveRoots(); } [Test] public void TestSubContainerMethodSuccess() { Container.Bind().FromSubContainerResolve().ByMethod( container => { container.Bind().AsSingle(); container.Bind().AsSingle(); container.Bind().AsSingle(); }) .AsSingle(); Container.ResolveRoots(); } [Test] public void TestSubContainerMethodFailure() { Container.Bind().FromSubContainerResolve().ByMethod( container => { container.Bind().AsSingle(); container.Bind().AsSingle(); }) .AsSingle(); Assert.Throws(() => Container.ResolveRoots()); } [Test] public void TestSubContainerInstallerFailure() { Container.Bind().FromSubContainerResolve().ByInstaller().AsSingle(); Assert.Throws(() => Container.ResolveRoots()); } [Test] public void TestLazyFail() { Container.Bind().AsSingle(); Assert.Throws(() => Container.ResolveRoots()); } [Test] public void TestLazySuccess() { Container.Bind().AsSingle(); Container.Bind().AsSingle(); Container.ResolveRoots(); } [Test] public void TestMemoryPoolFailure() { Container.BindMemoryPool(); Assert.Throws(() => Container.ResolveRoots()); } [Test] public void TestMemoryPoolSuccess() { Container.Bind().AsSingle(); Container.BindMemoryPool(); Container.ResolveRoots(); } [Test] public void TestCustomValidatable() { Container.BindInterfacesAndSelfTo().AsSingle().NonLazy(); Container.ResolveRoots(); Assert.IsEqual(Container.Resolve().CallCount, 1); } public class Loy : IValidatable, IInitializable, ITickable { public int CallCount { get; set; } public void Initialize() { } public void Tick() { } public void Validate() { CallCount++; } } public class Jaze { [Inject] public LazyInject Qux; } public class QuxInstaller : Installer { public override void InstallBindings() { Container.Bind().AsSingle(); Container.Bind().AsSingle(); } } public class Qux { } public class Bar { public Bar(Foo foo) { } public class Factory : PlaceholderFactory { } public class Pool : MemoryPool { } } public class Foo { } public interface IGorp { } public class Gorp : IGorp, IValidatable { public static int CallCount { get; set; } public void Validate() { CallCount++; } } } }