using System.Collections; using ModestTree; using UnityEngine; using UnityEngine.TestTools; namespace Zenject.Tests.Bindings { public class TestFromSiblingComponent : ZenjectIntegrationTestFixture { [UnityTest] public IEnumerator TestBasic() { PreInstall(); Container.Bind().FromNewComponentOnNewGameObject().AsSingle().NonLazy(); Container.Bind().FromNewComponentSibling(); PostInstall(); Assert.IsEqual(Container.Resolve().gameObject.GetComponents().Length, 1); yield break; } [UnityTest] public IEnumerator TestInvalidUse() { PreInstall(); Container.Bind().AsSingle().NonLazy(); Container.Bind().FromNewComponentSibling(); Assert.Throws(() => PostInstall()); yield break; } [UnityTest] public IEnumerator TestBasic2() { PreInstall(); var gameObject = Container.CreateEmptyGameObject("Test"); Container.Bind().FromNewComponentOn(gameObject).AsSingle().NonLazy(); Container.Bind().FromNewComponentOn(gameObject).AsSingle().NonLazy(); Container.Bind().FromNewComponentSibling(); PostInstall(); var bar = Container.Resolve(); var gorp = Container.Resolve(); Assert.IsEqual(bar.gameObject.GetComponents().Length, 1); Assert.IsEqual(bar.Foo, gorp.Foo); yield break; } [UnityTest] public IEnumerator TestOptional() { var gameObject = new GameObject("Test"); PreInstall(); Container.Bind().FromNewComponentOn(gameObject).AsSingle().NonLazy(); Container.Bind().FromComponentSibling(); PostInstall(); var qiv = Container.Resolve(); Assert.IsNull(qiv.Foo); yield break; } public class Qux { public Qux(Foo foo) { } } public class Foo : MonoBehaviour { } public class Bar : MonoBehaviour { [Inject] public Foo Foo; } public class Gorp : MonoBehaviour { [Inject] public Foo Foo; } public class Qiv : MonoBehaviour { [InjectOptional] public Foo Foo; } } }