134 lines
4.1 KiB
C#
134 lines
4.1 KiB
C#
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<Foo>().AsSingle();
|
|
|
|
PostInstall();
|
|
|
|
var bar = new GameObject("bar").AddComponent<Bar>();
|
|
|
|
Assert.That(!bar.ConstructCalled);
|
|
Assert.IsNull(bar.Foo);
|
|
|
|
bar.gameObject.AddComponent<ZenAutoInjecter>();
|
|
|
|
Assert.IsEqual(bar.Foo, Container.Resolve<Foo>());
|
|
yield break;
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInstantiatePrefab()
|
|
{
|
|
PreInstall();
|
|
|
|
Container.Bind<Foo>().AsSingle();
|
|
|
|
PostInstall();
|
|
yield return null;
|
|
|
|
var barGameObject = GameObject.Instantiate(GetPrefab("Bar"));
|
|
var bar = barGameObject.GetComponentInChildren<Bar>();
|
|
|
|
Assert.IsEqual(bar.Foo, Container.Resolve<Foo>());
|
|
Assert.That(bar.ConstructCalled);
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInstantiatePrefabWithSearchContainerSourceInGameObjectContext()
|
|
{
|
|
PreInstall();
|
|
Container.Bind<Gorp>().FromSubContainerResolve().ByNewContextPrefab(GetPrefab("GorpContext")).AsSingle();
|
|
PostInstall();
|
|
yield return null;
|
|
|
|
var gorp = Container.Resolve<Gorp>();
|
|
|
|
var qux = GameObject.Instantiate(
|
|
GetPrefab("QuxSearch"), Vector3.zero, Quaternion.identity, gorp.transform)
|
|
.GetComponentInChildren<Qux>();
|
|
|
|
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<Qux>();
|
|
|
|
Assert.IsEqual(qux.Container, Container);
|
|
Assert.IsEqual(qux.Container, Container.Resolve<SceneContext>().Container);
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInstantiatePrefabWithSearchContainerSourceInDontDestroyOnLoad()
|
|
{
|
|
SkipInstall();
|
|
yield return null;
|
|
|
|
var qux = GameObject.Instantiate(
|
|
GetPrefab("QuxSearch"), Vector3.zero, Quaternion.identity, ProjectContext.Instance.transform)
|
|
.GetComponentInChildren<Qux>();
|
|
|
|
Assert.IsEqual(qux.Container, ProjectContext.Instance.Container);
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInstantiatePrefabWithProjectContainerSourceInScene()
|
|
{
|
|
SkipInstall();
|
|
yield return null;
|
|
|
|
var qux = GameObject.Instantiate(GetPrefab("QuxProject")).GetComponentInChildren<Qux>();
|
|
|
|
Assert.IsEqual(qux.Container, ProjectContext.Instance.Container);
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInstantiatePrefabWithSceneContainerSourceInScene()
|
|
{
|
|
SkipInstall();
|
|
yield return null;
|
|
|
|
var qux = GameObject.Instantiate(GetPrefab("QuxScene")).GetComponentInChildren<Qux>();
|
|
|
|
Assert.IsEqual(qux.Container, Container);
|
|
Assert.IsEqual(qux.Container, Container.Resolve<SceneContext>().Container);
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInstantiatePrefabWithSceneContainerSourceInProject()
|
|
{
|
|
SkipInstall();
|
|
yield return null;
|
|
|
|
var qux = GameObject.Instantiate(
|
|
GetPrefab("QuxScene"), Vector3.zero, Quaternion.identity,
|
|
ProjectContext.Instance.transform).GetComponentInChildren<Qux>();
|
|
|
|
Assert.IsEqual(qux.Container, ProjectContext.Instance.Container);
|
|
}
|
|
}
|
|
}
|
|
|