using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.TestTools; namespace Zenject.Tests.Bindings { public class TestFromNewComponentOn : ZenjectIntegrationTestFixture { [UnityTest] public IEnumerator TestBasic() { PreInstall(); var gameObject = Container.CreateEmptyGameObject("Foo"); Container.BindInstance(gameObject).WithId("Foo"); Container.Bind().FromNewComponentOn(gameObject).AsSingle().NonLazy(); PostInstall(); FixtureUtil.AssertComponentCount(1); yield break; } [UnityTest] public IEnumerator TestBasicByMethod() { PreInstall(); var gameObject = Container.CreateEmptyGameObject("Foo"); Container.BindInstance(gameObject).WithId("Foo"); Container.Bind().FromNewComponentOn(context => gameObject).AsSingle().NonLazy(); PostInstall(); FixtureUtil.AssertComponentCount(1); yield break; } [UnityTest] public IEnumerator TestTransient() { PreInstall(); var gameObject = Container.CreateEmptyGameObject("Foo"); Container.BindInstance(gameObject).WithId("Foo"); Container.Bind().FromNewComponentOn(gameObject).AsTransient().NonLazy(); Container.Bind().To().FromNewComponentOn(gameObject).AsTransient().NonLazy(); PostInstall(); FixtureUtil.AssertComponentCount(2); yield break; } [UnityTest] public IEnumerator TestSingle() { PreInstall(); var gameObject = Container.CreateEmptyGameObject("Foo"); Container.BindInstance(gameObject).WithId("Foo"); Container.Bind(typeof(IFoo), typeof(Foo)).To().FromNewComponentOn(gameObject).AsSingle().NonLazy(); PostInstall(); FixtureUtil.AssertComponentCount(1); yield break; } [UnityTest] public IEnumerator TestCached1() { PreInstall(); var gameObject = Container.CreateEmptyGameObject("Foo"); Container.BindInstance(gameObject).WithId("Foo"); Container.Bind().FromNewComponentOn(gameObject).AsCached().NonLazy(); Container.Bind().To().FromNewComponentOn(gameObject).AsCached().NonLazy(); PostInstall(); FixtureUtil.AssertComponentCount(2); yield break; } [UnityTest] public IEnumerator TestCached2() { PreInstall(); var gameObject = Container.CreateEmptyGameObject("Foo"); Container.BindInstance(gameObject).WithId("Foo"); Container.Bind(typeof(IFoo), typeof(Foo)).To() .FromNewComponentOn(gameObject).AsSingle().NonLazy(); PostInstall(); FixtureUtil.AssertComponentCount(1); yield break; } [UnityTest] public IEnumerator TestCachedMultipleConcrete() { PreInstall(); var gameObject = Container.CreateEmptyGameObject("Foo"); Container.BindInstance(gameObject).WithId("Foo"); Container.Bind(typeof(IFoo), typeof(IBar)) .To(new List { typeof(Foo), typeof(Bar) }) .FromNewComponentOn(gameObject).AsCached().NonLazy(); PostInstall(); FixtureUtil.AssertComponentCount(1); FixtureUtil.AssertComponentCount(1); yield break; } public interface IBar { } public interface IFoo2 { } public interface IFoo { } public class Foo : MonoBehaviour, IFoo, IBar, IFoo2 { } public class Bar : MonoBehaviour, IFoo, IBar, IFoo2 { } } }