315 lines
9.0 KiB
C#
315 lines
9.0 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using ModestTree;
|
|
using UnityEngine;
|
|
using UnityEngine.TestTools;
|
|
using Zenject.Tests.Bindings.DiContainerMethods;
|
|
|
|
namespace Zenject.Tests.Bindings
|
|
{
|
|
public class TestDiContainerMethods : ZenjectIntegrationTestFixture
|
|
{
|
|
const string ResourcePrefix = "TestDiContainerMethods/";
|
|
|
|
GameObject FooPrefab
|
|
{
|
|
get { return GetPrefab("Foo"); }
|
|
}
|
|
|
|
GameObject GorpPrefab
|
|
{
|
|
get { return GetPrefab("Gorp"); }
|
|
}
|
|
|
|
GameObject CameraPrefab
|
|
{
|
|
get { return GetPrefab("Camera"); }
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInstantiateComponent()
|
|
{
|
|
SkipInstall();
|
|
|
|
var gameObject = new GameObject();
|
|
|
|
var foo = Container.InstantiateComponent<Foo>(gameObject);
|
|
|
|
Assert.That(foo.WasInjected);
|
|
yield break;
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInstantiateComponentArgs()
|
|
{
|
|
SkipInstall();
|
|
|
|
var gameObject = new GameObject();
|
|
|
|
Assert.Throws(() => Container.InstantiateComponent<Gorp>(gameObject));
|
|
|
|
var gorp = Container.InstantiateComponent<Gorp>(gameObject, new object[] { "zxcv" });
|
|
|
|
Assert.IsEqual(gorp.Arg, "zxcv");
|
|
yield break;
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInstantiateComponentOnNewGameObject()
|
|
{
|
|
SkipInstall();
|
|
|
|
var foo = Container.InstantiateComponentOnNewGameObject<Foo>();
|
|
|
|
Assert.That(foo.WasInjected);
|
|
yield break;
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInstantiateComponentOnNewGameObjectArgs()
|
|
{
|
|
SkipInstall();
|
|
|
|
Assert.Throws(() => Container.InstantiateComponentOnNewGameObject<Gorp>());
|
|
|
|
var gorp = Container.InstantiateComponentOnNewGameObject<Gorp>("sdf", new object[] { "zxcv" });
|
|
|
|
Assert.IsEqual(gorp.Arg, "zxcv");
|
|
yield break;
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInstantiatePrefab()
|
|
{
|
|
SkipInstall();
|
|
|
|
var go = Container.InstantiatePrefab(FooPrefab);
|
|
|
|
var foo = go.GetComponentInChildren<Foo>();
|
|
|
|
Assert.That(foo.WasInjected);
|
|
yield break;
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInstantiatePrefabForMonoBehaviour()
|
|
{
|
|
SkipInstall();
|
|
|
|
Assert.Throws(() => Container.InstantiatePrefab(GorpPrefab));
|
|
|
|
var gorp = Container.InstantiatePrefabForComponent<Gorp>(GorpPrefab, new object[] { "asdf" });
|
|
|
|
Assert.IsEqual(gorp.Arg, "asdf");
|
|
yield break;
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInstantiatePrefabResource()
|
|
{
|
|
SkipInstall();
|
|
|
|
Assert.Throws(() => Container.InstantiatePrefabResource(ResourcePrefix + "Gorp"));
|
|
|
|
var gorp = Container.InstantiatePrefabResourceForComponent<Gorp>(ResourcePrefix + "Gorp", new object[] { "asdf" });
|
|
|
|
Assert.IsEqual(gorp.Arg, "asdf");
|
|
yield break;
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInstantiatePrefabForComponent()
|
|
{
|
|
SkipInstall();
|
|
|
|
var camera = Container.InstantiatePrefabForComponent<Camera>(CameraPrefab, new object[0]);
|
|
Assert.IsNotNull(camera);
|
|
yield break;
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInstantiatePrefabForComponentMistake()
|
|
{
|
|
SkipInstall();
|
|
|
|
Assert.Throws(() => Container.InstantiatePrefabForComponent<Camera>(CameraPrefab, new object[] { "sdf" }));
|
|
yield break;
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInstantiateScriptableObjectResource()
|
|
{
|
|
SkipInstall();
|
|
|
|
var foo = Container.InstantiateScriptableObjectResource<Foo2>(ResourcePrefix + "Foo2");
|
|
Assert.That(foo.WasInjected);
|
|
yield break;
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInstantiateScriptableObjectResourceArgs()
|
|
{
|
|
SkipInstall();
|
|
|
|
Assert.Throws(() => Container.InstantiateScriptableObjectResource<Gorp2>(ResourcePrefix + "Gorp2"));
|
|
|
|
var gorp = Container.InstantiateScriptableObjectResource<Gorp2>(ResourcePrefix + "Gorp2", new object[] { "asdf" });
|
|
|
|
Assert.IsEqual(gorp.Arg, "asdf");
|
|
yield break;
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInjectGameObject()
|
|
{
|
|
SkipInstall();
|
|
|
|
var go = GameObject.Instantiate(FooPrefab);
|
|
|
|
var foo = go.GetComponentInChildren<Foo>();
|
|
|
|
Assert.That(!foo.WasInjected);
|
|
Container.InjectGameObject(go);
|
|
Assert.That(foo.WasInjected);
|
|
|
|
yield break;
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInjectGameObjectForMonoBehaviour()
|
|
{
|
|
SkipInstall();
|
|
|
|
var go = GameObject.Instantiate(GorpPrefab);
|
|
|
|
Assert.Throws(() => Container.InjectGameObject(go));
|
|
|
|
var gorp = Container.InjectGameObjectForComponent<Gorp>(go, new object[] { "asdf" });
|
|
|
|
Assert.IsEqual(gorp.Arg, "asdf");
|
|
yield break;
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInjectGameObjectForComponent()
|
|
{
|
|
SkipInstall();
|
|
|
|
var go = GameObject.Instantiate(CameraPrefab);
|
|
|
|
Container.InjectGameObjectForComponent<Camera>(go, new object[0]);
|
|
yield break;
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInjectGameObjectForComponentMistake()
|
|
{
|
|
SkipInstall();
|
|
|
|
var go = GameObject.Instantiate(CameraPrefab);
|
|
|
|
Assert.Throws(() => Container.InjectGameObjectForComponent<Camera>(go, new object[] { "sdf" }));
|
|
yield break;
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestLazyInstanceInjectorFail()
|
|
{
|
|
PreInstall();
|
|
Qux.WasInjected = false;
|
|
|
|
var qux = new Qux();
|
|
Container.BindInstance(qux);
|
|
|
|
Assert.That(!Qux.WasInjected);
|
|
PostInstall();
|
|
Assert.That(!Qux.WasInjected);
|
|
yield break;
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestLazyInstanceInjectorSuccess()
|
|
{
|
|
PreInstall();
|
|
Qux.WasInjected = false;
|
|
|
|
var qux = new Qux();
|
|
Container.BindInstance(qux);
|
|
Container.QueueForInject(qux);
|
|
|
|
Assert.That(!Qux.WasInjected);
|
|
PostInstall();
|
|
Assert.That(Qux.WasInjected);
|
|
yield break;
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInstantiatePrefabForComponentExplicit()
|
|
{
|
|
SkipInstall();
|
|
|
|
var parentGameObject = new GameObject();
|
|
parentGameObject.transform.position = new Vector3(100, 100, 100);
|
|
var parentTransform = parentGameObject.transform;
|
|
|
|
var go = (Foo)Container.InstantiatePrefabForComponentExplicit(typeof(Foo), FooPrefab, new List<TypeValuePair>(), new GameObjectCreationParameters { ParentTransform = parentTransform });
|
|
|
|
var foo = go.GetComponentInChildren<Foo>();
|
|
|
|
Assert.IsEqual(foo.transform.position, new Vector3(100, 100, 100));
|
|
yield break;
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator TestInstantiatePrefabForComponentWithPositionExplicit()
|
|
{
|
|
SkipInstall();
|
|
|
|
var parentGameObject = new GameObject();
|
|
parentGameObject.transform.position = new Vector3(100, 100, 100);
|
|
parentGameObject.transform.rotation = Quaternion.Euler(10, 10, 10);
|
|
var parentTransform = parentGameObject.transform;
|
|
|
|
var go = (Foo)Container.InstantiatePrefabForComponentExplicit(typeof(Foo), FooPrefab, new List<TypeValuePair>(), new GameObjectCreationParameters
|
|
{
|
|
ParentTransform = parentTransform,
|
|
Position = new Vector3(50, 50, 50),
|
|
Rotation = Quaternion.Euler(20, 20, 20)
|
|
});
|
|
|
|
var foo = go.GetComponentInChildren<Foo>();
|
|
|
|
Assert.That(Approximately(foo.transform.position, new Vector3(50, 50, 50)));
|
|
Assert.That(Approximately(foo.transform.rotation.eulerAngles, new Vector3(20, 20, 20)));
|
|
yield break;
|
|
}
|
|
|
|
static bool Approximately(Vector3 left, Vector3 right)
|
|
{
|
|
return Mathf.Approximately(left.x, right.x)
|
|
&& Mathf.Approximately(left.y, right.y)
|
|
&& Mathf.Approximately(left.z, right.z);
|
|
}
|
|
|
|
public class Qux
|
|
{
|
|
public static bool WasInjected
|
|
{
|
|
get;
|
|
set;
|
|
}
|
|
|
|
[Inject]
|
|
public void Construct()
|
|
{
|
|
WasInjected = true;
|
|
}
|
|
}
|
|
|
|
GameObject GetPrefab(string name)
|
|
{
|
|
return FixtureUtil.GetPrefab(ResourcePrefix + name);
|
|
}
|
|
}
|
|
}
|