using NUnit.Framework; using Assert = ModestTree.Assert; namespace Zenject.Tests.Injection { [TestFixture] public class TestTestOptional : ZenjectUnitTestFixture { class Test1 { } class Test2 { [Inject] public Test1 val1 = null; } class Test3 { [InjectOptional] public Test1 val1 = null; } class Test0 { [InjectOptional] public int Val1 = 5; } [Test] public void TestFieldRequired() { Container.Bind().AsSingle().NonLazy(); Assert.Throws( delegate { Container.Resolve(); }); } [Test] public void TestFieldOptional() { Container.Bind().AsSingle().NonLazy(); var test = Container.Resolve(); Assert.That(test.val1 == null); } [Test] public void TestFieldOptional2() { Container.Bind().AsSingle().NonLazy(); var test1 = new Test1(); Container.Bind().FromInstance(test1).NonLazy(); Assert.IsEqual(Container.Resolve().val1, test1); } [Test] public void TestFieldOptional3() { Container.Bind().AsTransient().NonLazy(); // Should not redefine the hard coded value in this case Assert.IsEqual(Container.Resolve().Val1, 5); Container.Bind().FromInstance(3).NonLazy(); Assert.IsEqual(Container.Resolve().Val1, 3); } class Test4 { public Test4(Test1 val1) { } } class Test5 { public Test1 Val1; public Test5( [InjectOptional] Test1 val1) { Val1 = val1; } } [Test] public void TestParameterRequired() { Container.Bind().AsSingle().NonLazy(); Assert.Throws( delegate { Container.Resolve(); }); } [Test] public void TestParameterOptional() { Container.Bind().AsSingle().NonLazy(); var test = Container.Resolve(); Assert.That(test.Val1 == null); } class Test6 { public Test6(Test2 test2) { } } [Test] public void TestChildDependencyOptional() { Container.Bind().AsSingle().NonLazy(); Container.Bind().AsSingle().NonLazy(); Assert.Throws( delegate { Container.Resolve(); }); } class Test7 { public int Val1; public Test7( [InjectOptional] int val1) { Val1 = val1; } } [Test] public void TestPrimitiveParamOptionalUsesDefault() { Container.Bind().AsSingle().NonLazy(); Assert.IsEqual(Container.Resolve().Val1, 0); } class Test8 { public int Val1; public Test8( [InjectOptional] int val1 = 5) { Val1 = val1; } } [Test] public void TestPrimitiveParamOptionalUsesExplicitDefault() { Container.Bind().AsSingle().NonLazy(); Assert.IsEqual(Container.Resolve().Val1, 5); } class Test8_2 { public int Val1; public Test8_2(int val1 = 5) { Val1 = val1; } } [Test] public void TestPrimitiveParamOptionalUsesExplicitDefault2() { Container.Bind().AsSingle().NonLazy(); Assert.IsEqual(Container.Resolve().Val1, 5); } [Test] public void TestPrimitiveParamOptionalUsesExplicitDefault3() { Container.Bind().AsSingle().NonLazy(); Container.BindInstance(2); Assert.IsEqual(Container.Resolve().Val1, 2); } class Test9 { public int? Val1; public Test9( [InjectOptional] int? val1) { Val1 = val1; } } [Test] public void TestPrimitiveParamOptionalNullable() { Container.Bind().AsSingle().NonLazy(); Assert.That(!Container.Resolve().Val1.HasValue); } } }