using System.Collections; using ModestTree; using UnityEngine.TestTools; namespace Zenject.Tests.Bindings { public class TestLazy : ZenjectIntegrationTestFixture { [UnityTest] public IEnumerator Test1() { PreInstall(); Bar.InstanceCount = 0; Container.Bind().AsSingle(); Container.Bind().AsSingle(); PostInstall(); var foo = Container.Resolve(); Assert.IsEqual(Bar.InstanceCount, 0); foo.DoIt(); Assert.IsEqual(Bar.InstanceCount, 1); yield break; } [UnityTest] public IEnumerator Test2() { PreInstall(); Container.Bind().AsSingle().NonLazy(); PostInstall(); var foo = Container.Resolve(); Assert.Throws(() => foo.DoIt()); yield break; } [UnityTest] [ValidateOnly] public IEnumerator Test3() { PreInstall(); Container.Settings = new ZenjectSettings(ValidationErrorResponses.Throw); Container.Bind().AsSingle().NonLazy(); Assert.Throws(() => PostInstall()); yield break; } [UnityTest] [ValidateOnly] public IEnumerator Test4() { PreInstall(); Container.Bind().AsSingle().NonLazy(); Container.Bind().AsSingle(); PostInstall(); yield break; } [UnityTest] public IEnumerator TestOptional1() { PreInstall(); Container.Bind().AsSingle(); Container.Bind().AsSingle(); PostInstall(); Assert.IsNotNull(Container.Resolve().Bar.Value); yield break; } [UnityTest] public IEnumerator TestOptional2() { PreInstall(); Container.Bind().AsSingle(); PostInstall(); Assert.IsNull(Container.Resolve().Bar.Value); yield break; } [UnityTest] public IEnumerator TestOptional3() { PreInstall(); Container.Bind().AsSingle(); PostInstall(); var gorp = Container.Resolve(); object temp; Assert.Throws(() => temp = gorp.Bar.Value); yield break; } public class Bar { public static int InstanceCount; public Bar() { InstanceCount++; } public void DoIt() { } } public class Foo { readonly LazyInject _bar; public Foo(LazyInject bar) { _bar = bar; } public void DoIt() { _bar.Value.DoIt(); } } public class Qux { [Inject(Optional = true)] public LazyInject Bar; } public class Gorp { public LazyInject Bar; } } }