using System.Collections; using System.Linq; using ModestTree; using UnityEngine; using UnityEngine.TestTools; namespace Zenject.Tests.AutoInjecter { public class TestZenAutoInjecter : ZenjectIntegrationTestFixture { GameObject GetPrefab(string name) { return FixtureUtil.GetPrefab("TestZenAutoInjecter/{0}".Fmt(name)); } [UnityTest] public IEnumerator TestAddComponent() { PreInstall(); Container.Bind().AsSingle(); PostInstall(); var bar = new GameObject("bar").AddComponent(); Assert.That(!bar.ConstructCalled); Assert.IsNull(bar.Foo); bar.gameObject.AddComponent(); Assert.IsEqual(bar.Foo, Container.Resolve()); yield break; } [UnityTest] public IEnumerator TestInstantiatePrefab() { PreInstall(); Container.Bind().AsSingle(); PostInstall(); yield return null; var barGameObject = GameObject.Instantiate(GetPrefab("Bar")); var bar = barGameObject.GetComponentInChildren(); Assert.IsEqual(bar.Foo, Container.Resolve()); Assert.That(bar.ConstructCalled); } [UnityTest] public IEnumerator TestInstantiatePrefabWithSearchContainerSourceInGameObjectContext() { PreInstall(); Container.Bind().FromSubContainerResolve().ByNewContextPrefab(GetPrefab("GorpContext")).AsSingle(); PostInstall(); yield return null; var gorp = Container.Resolve(); var qux = GameObject.Instantiate( GetPrefab("QuxSearch"), Vector3.zero, Quaternion.identity, gorp.transform) .GetComponentInChildren(); Assert.IsEqual(qux.Container, gorp.Container); Assert.IsEqual(qux.Container.ParentContainers.Single(), Container); } [UnityTest] public IEnumerator TestInstantiatePrefabWithSearchContainerSourceInScene() { SkipInstall(); yield return null; var qux = GameObject.Instantiate(GetPrefab("QuxSearch")).GetComponentInChildren(); Assert.IsEqual(qux.Container, Container); Assert.IsEqual(qux.Container, Container.Resolve().Container); } [UnityTest] public IEnumerator TestInstantiatePrefabWithSearchContainerSourceInDontDestroyOnLoad() { SkipInstall(); yield return null; var qux = GameObject.Instantiate( GetPrefab("QuxSearch"), Vector3.zero, Quaternion.identity, ProjectContext.Instance.transform) .GetComponentInChildren(); Assert.IsEqual(qux.Container, ProjectContext.Instance.Container); } [UnityTest] public IEnumerator TestInstantiatePrefabWithProjectContainerSourceInScene() { SkipInstall(); yield return null; var qux = GameObject.Instantiate(GetPrefab("QuxProject")).GetComponentInChildren(); Assert.IsEqual(qux.Container, ProjectContext.Instance.Container); } [UnityTest] public IEnumerator TestInstantiatePrefabWithSceneContainerSourceInScene() { SkipInstall(); yield return null; var qux = GameObject.Instantiate(GetPrefab("QuxScene")).GetComponentInChildren(); Assert.IsEqual(qux.Container, Container); Assert.IsEqual(qux.Container, Container.Resolve().Container); } [UnityTest] public IEnumerator TestInstantiatePrefabWithSceneContainerSourceInProject() { SkipInstall(); yield return null; var qux = GameObject.Instantiate( GetPrefab("QuxScene"), Vector3.zero, Quaternion.identity, ProjectContext.Instance.transform).GetComponentInChildren(); Assert.IsEqual(qux.Container, ProjectContext.Instance.Container); } } }