227 lines
5.0 KiB
C#
227 lines
5.0 KiB
C#
using NUnit.Framework;
|
|
using Assert = ModestTree.Assert;
|
|
|
|
namespace Zenject.Tests
|
|
{
|
|
[TestFixture]
|
|
public class TestValidation
|
|
{
|
|
DiContainer Container
|
|
{
|
|
get; set;
|
|
}
|
|
|
|
[SetUp]
|
|
public void Setup()
|
|
{
|
|
Container = new DiContainer(true);
|
|
Container.Settings = new ZenjectSettings(
|
|
ValidationErrorResponses.Throw, RootResolveMethods.All);
|
|
}
|
|
|
|
[Test]
|
|
public void TestFailure()
|
|
{
|
|
Container.Bind<Bar>().AsSingle();
|
|
|
|
Assert.Throws(() => Container.ResolveRoots());
|
|
}
|
|
|
|
[Test]
|
|
public void TestSuccess()
|
|
{
|
|
Container.Bind<Foo>().AsSingle();
|
|
Container.Bind<Bar>().AsSingle();
|
|
|
|
Container.ResolveRoots();
|
|
}
|
|
|
|
[Test]
|
|
public void TestNumCalls()
|
|
{
|
|
Gorp.CallCount = 0;
|
|
|
|
Container.BindInterfacesAndSelfTo<Gorp>().AsSingle();
|
|
|
|
Container.ResolveRoots();
|
|
|
|
Assert.IsEqual(Gorp.CallCount, 1);
|
|
}
|
|
|
|
[Test]
|
|
public void TestFactoryFail()
|
|
{
|
|
Container.BindFactory<Bar, Bar.Factory>();
|
|
|
|
Assert.Throws(() => Container.ResolveRoots());
|
|
}
|
|
|
|
[Test]
|
|
public void TestFactorySuccess()
|
|
{
|
|
Container.Bind<Foo>().AsSingle();
|
|
Container.BindFactory<Bar, Bar.Factory>();
|
|
|
|
Container.ResolveRoots();
|
|
}
|
|
|
|
[Test]
|
|
public void TestSubContainerMethodSuccess()
|
|
{
|
|
Container.Bind<Qux>().FromSubContainerResolve().ByMethod(
|
|
container =>
|
|
{
|
|
container.Bind<Qux>().AsSingle();
|
|
container.Bind<Foo>().AsSingle();
|
|
container.Bind<Bar>().AsSingle();
|
|
})
|
|
.AsSingle();
|
|
|
|
Container.ResolveRoots();
|
|
}
|
|
|
|
[Test]
|
|
public void TestSubContainerMethodFailure()
|
|
{
|
|
Container.Bind<Qux>().FromSubContainerResolve().ByMethod(
|
|
container =>
|
|
{
|
|
container.Bind<Qux>().AsSingle();
|
|
container.Bind<Bar>().AsSingle();
|
|
})
|
|
.AsSingle();
|
|
|
|
Assert.Throws(() => Container.ResolveRoots());
|
|
}
|
|
|
|
[Test]
|
|
public void TestSubContainerInstallerFailure()
|
|
{
|
|
Container.Bind<Qux>().FromSubContainerResolve().ByInstaller<QuxInstaller>().AsSingle();
|
|
|
|
Assert.Throws(() => Container.ResolveRoots());
|
|
}
|
|
|
|
[Test]
|
|
public void TestLazyFail()
|
|
{
|
|
Container.Bind<Jaze>().AsSingle();
|
|
|
|
Assert.Throws(() => Container.ResolveRoots());
|
|
}
|
|
|
|
[Test]
|
|
public void TestLazySuccess()
|
|
{
|
|
Container.Bind<Qux>().AsSingle();
|
|
Container.Bind<Jaze>().AsSingle();
|
|
|
|
Container.ResolveRoots();
|
|
}
|
|
|
|
[Test]
|
|
public void TestMemoryPoolFailure()
|
|
{
|
|
Container.BindMemoryPool<Bar, Bar.Pool>();
|
|
|
|
Assert.Throws(() => Container.ResolveRoots());
|
|
}
|
|
|
|
[Test]
|
|
public void TestMemoryPoolSuccess()
|
|
{
|
|
Container.Bind<Foo>().AsSingle();
|
|
Container.BindMemoryPool<Bar, Bar.Pool>();
|
|
|
|
Container.ResolveRoots();
|
|
}
|
|
|
|
[Test]
|
|
public void TestCustomValidatable()
|
|
{
|
|
Container.BindInterfacesAndSelfTo<Loy>().AsSingle().NonLazy();
|
|
|
|
Container.ResolveRoots();
|
|
|
|
Assert.IsEqual(Container.Resolve<Loy>().CallCount, 1);
|
|
}
|
|
|
|
public class Loy : IValidatable, IInitializable, ITickable
|
|
{
|
|
public int CallCount
|
|
{
|
|
get; set;
|
|
}
|
|
|
|
public void Initialize()
|
|
{
|
|
}
|
|
|
|
public void Tick()
|
|
{
|
|
}
|
|
|
|
public void Validate()
|
|
{
|
|
CallCount++;
|
|
}
|
|
}
|
|
|
|
public class Jaze
|
|
{
|
|
[Inject]
|
|
public LazyInject<Qux> Qux;
|
|
}
|
|
|
|
public class QuxInstaller : Installer<QuxInstaller>
|
|
{
|
|
public override void InstallBindings()
|
|
{
|
|
Container.Bind<Qux>().AsSingle();
|
|
Container.Bind<Bar>().AsSingle();
|
|
}
|
|
}
|
|
|
|
public class Qux
|
|
{
|
|
}
|
|
|
|
public class Bar
|
|
{
|
|
public Bar(Foo foo)
|
|
{
|
|
}
|
|
|
|
public class Factory : PlaceholderFactory<Bar>
|
|
{
|
|
}
|
|
|
|
public class Pool : MemoryPool<Bar>
|
|
{
|
|
}
|
|
}
|
|
|
|
public class Foo
|
|
{
|
|
}
|
|
|
|
public interface IGorp
|
|
{
|
|
}
|
|
|
|
public class Gorp : IGorp, IValidatable
|
|
{
|
|
public static int CallCount
|
|
{
|
|
get; set;
|
|
}
|
|
|
|
public void Validate()
|
|
{
|
|
CallCount++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|