using System; using System.Collections; using System.Collections.Generic; using ModestTree; using UnityEngine; using UnityEngine.TestTools; namespace Zenject.Tests.Bindings { public class TestFromComponentOn : ZenjectIntegrationTestFixture { [UnityTest] public IEnumerator TestBasic() { PreInstall(); var gameObject = Container.CreateEmptyGameObject("Foo"); gameObject.AddComponent(); Container.Bind().FromComponentOn(gameObject).AsSingle().NonLazy(); PostInstall(); Assert.IsNotNull(Container.Resolve()); FixtureUtil.AssertComponentCount(1); yield break; } [UnityTest] public IEnumerator TestBasicMultiple() { PreInstall(); var gameObject = Container.CreateEmptyGameObject("Foo"); gameObject.AddComponent(); gameObject.AddComponent(); Container.Bind().FromComponentsOn(gameObject).AsCached().NonLazy(); PostInstall(); Assert.IsEqual(Container.ResolveAll().Count, 2); FixtureUtil.AssertComponentCount(2); yield break; } [UnityTest] public IEnumerator TestBasicByMethod() { PreInstall(); var gameObject = Container.CreateEmptyGameObject("Foo"); gameObject.AddComponent(); Container.Bind().FromComponentOn(context => gameObject).AsSingle().NonLazy(); PostInstall(); Assert.IsNotNull(Container.Resolve()); FixtureUtil.AssertComponentCount(1); yield break; } [UnityTest] public IEnumerator TestBasicByMethodMultiple() { PreInstall(); var gameObject = Container.CreateEmptyGameObject("Foo"); gameObject.AddComponent(); gameObject.AddComponent(); Container.Bind().FromComponentsOn(context => gameObject).AsCached().NonLazy(); PostInstall(); Assert.IsEqual(Container.ResolveAll().Count, 2); FixtureUtil.AssertComponentCount(2); yield break; } [UnityTest] public IEnumerator TestSingle() { PreInstall(); var gameObject = Container.CreateEmptyGameObject("Foo"); gameObject.AddComponent(); Container.Bind(typeof(IFoo), typeof(Foo)).To().FromComponentOn(gameObject).AsSingle().NonLazy(); PostInstall(); Assert.IsNotNull(Container.Resolve()); Assert.IsNotNull(Container.Resolve()); FixtureUtil.AssertComponentCount(1); yield break; } [UnityTest] public IEnumerator TestCachedMultipleConcrete() { PreInstall(); var gameObject = Container.CreateEmptyGameObject("Foo"); gameObject.AddComponent(); gameObject.AddComponent(); Container.Bind(typeof(IFoo), typeof(IBar)) .To(new List { typeof(Foo), typeof(Bar) }) .FromComponentOn(gameObject).AsCached().NonLazy(); PostInstall(); Assert.IsEqual(Container.ResolveAll().Count, 2); Assert.IsEqual(Container.ResolveAll().Count, 2); 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 { } } }