Files
dungeons/Assets/Plugins/Zenject/OptionalExtras/UnitTests/Editor/Injection/TestCircularDependencies.cs

156 lines
3.4 KiB
C#

using NUnit.Framework;
using Assert = ModestTree.Assert;
namespace Zenject.Tests.Injection
{
[TestFixture]
public class TestCircularDependencies : ZenjectUnitTestFixture
{
class Test1
{
public static int CreateCount;
[Inject]
public Test2 Other = null;
public Test1()
{
CreateCount++;
}
}
class Test2
{
public static int CreateCount;
[Inject]
public Test1 Other = null;
public Test2()
{
CreateCount++;
}
}
[Test]
public void TestFields()
{
Test2.CreateCount = 0;
Test1.CreateCount = 0;
Container.Bind<Test1>().AsSingle();
Container.Bind<Test2>().AsSingle();
var test1 = Container.Resolve<Test1>();
var test2 = Container.Resolve<Test2>();
Assert.IsEqual(Test2.CreateCount, 1);
Assert.IsEqual(Test1.CreateCount, 1);
Assert.IsEqual(test1.Other, test2);
Assert.IsEqual(test2.Other, test1);
}
class Test3
{
public static int CreateCount;
public Test4 Other;
public Test3()
{
CreateCount++;
}
[Inject]
public void Initialize(Test4 other)
{
Other = other;
}
}
class Test4
{
public static int CreateCount;
public Test3 Other;
public Test4()
{
CreateCount++;
}
[Inject]
public void Initialize(Test3 other)
{
Other = other;
}
}
[Test]
public void TestPostInject()
{
Test4.CreateCount = 0;
Test3.CreateCount = 0;
Container.Bind<Test3>().AsSingle();
Container.Bind<Test4>().AsSingle();
var test1 = Container.Resolve<Test3>();
var test2 = Container.Resolve<Test4>();
Assert.IsEqual(Test4.CreateCount, 1);
Assert.IsEqual(Test3.CreateCount, 1);
Assert.IsEqual(test1.Other, test2);
Assert.IsEqual(test2.Other, test1);
}
class Test5
{
public Test5(Test6 Other)
{
Assert.IsNotNull(Other);
}
}
class Test6
{
public Test6(Test5 other)
{
Assert.IsNotNull(other);
}
}
[Test]
public void TestConstructorInject()
{
if (Container.ChecksForCircularDependencies)
{
Container.Bind<Test5>().AsSingle().NonLazy();
Container.Bind<Test6>().AsSingle().NonLazy();
Assert.Throws(() => Container.Resolve<Test5>());
Assert.Throws(() => Container.Resolve<Test6>());
}
}
class Test7
{
public Test7(Test7 other)
{
}
}
[Test]
public void TestSelfDependency()
{
if (Container.ChecksForCircularDependencies)
{
Container.Bind<Test7>().AsSingle();
Assert.Throws(() => Container.Instantiate<Test7>());
}
}
}
}