TestValidation.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. using NUnit.Framework;
  2. using Assert = ModestTree.Assert;
  3. namespace Zenject.Tests
  4. {
  5. [TestFixture]
  6. public class TestValidation
  7. {
  8. DiContainer Container
  9. {
  10. get; set;
  11. }
  12. [SetUp]
  13. public void Setup()
  14. {
  15. Container = new DiContainer(true);
  16. Container.Settings = new ZenjectSettings(
  17. ValidationErrorResponses.Throw, RootResolveMethods.All);
  18. }
  19. [Test]
  20. public void TestFailure()
  21. {
  22. Container.Bind<Bar>().AsSingle();
  23. Assert.Throws(() => Container.ResolveRoots());
  24. }
  25. [Test]
  26. public void TestSuccess()
  27. {
  28. Container.Bind<Foo>().AsSingle();
  29. Container.Bind<Bar>().AsSingle();
  30. Container.ResolveRoots();
  31. }
  32. [Test]
  33. public void TestNumCalls()
  34. {
  35. Gorp.CallCount = 0;
  36. Container.BindInterfacesAndSelfTo<Gorp>().AsSingle();
  37. Container.ResolveRoots();
  38. Assert.IsEqual(Gorp.CallCount, 1);
  39. }
  40. [Test]
  41. public void TestFactoryFail()
  42. {
  43. Container.BindFactory<Bar, Bar.Factory>();
  44. Assert.Throws(() => Container.ResolveRoots());
  45. }
  46. [Test]
  47. public void TestFactorySuccess()
  48. {
  49. Container.Bind<Foo>().AsSingle();
  50. Container.BindFactory<Bar, Bar.Factory>();
  51. Container.ResolveRoots();
  52. }
  53. [Test]
  54. public void TestSubContainerMethodSuccess()
  55. {
  56. Container.Bind<Qux>().FromSubContainerResolve().ByMethod(
  57. container =>
  58. {
  59. container.Bind<Qux>().AsSingle();
  60. container.Bind<Foo>().AsSingle();
  61. container.Bind<Bar>().AsSingle();
  62. })
  63. .AsSingle();
  64. Container.ResolveRoots();
  65. }
  66. [Test]
  67. public void TestSubContainerMethodFailure()
  68. {
  69. Container.Bind<Qux>().FromSubContainerResolve().ByMethod(
  70. container =>
  71. {
  72. container.Bind<Qux>().AsSingle();
  73. container.Bind<Bar>().AsSingle();
  74. })
  75. .AsSingle();
  76. Assert.Throws(() => Container.ResolveRoots());
  77. }
  78. [Test]
  79. public void TestSubContainerInstallerFailure()
  80. {
  81. Container.Bind<Qux>().FromSubContainerResolve().ByInstaller<QuxInstaller>().AsSingle();
  82. Assert.Throws(() => Container.ResolveRoots());
  83. }
  84. [Test]
  85. public void TestLazyFail()
  86. {
  87. Container.Bind<Jaze>().AsSingle();
  88. Assert.Throws(() => Container.ResolveRoots());
  89. }
  90. [Test]
  91. public void TestLazySuccess()
  92. {
  93. Container.Bind<Qux>().AsSingle();
  94. Container.Bind<Jaze>().AsSingle();
  95. Container.ResolveRoots();
  96. }
  97. [Test]
  98. public void TestMemoryPoolFailure()
  99. {
  100. Container.BindMemoryPool<Bar, Bar.Pool>();
  101. Assert.Throws(() => Container.ResolveRoots());
  102. }
  103. [Test]
  104. public void TestMemoryPoolSuccess()
  105. {
  106. Container.Bind<Foo>().AsSingle();
  107. Container.BindMemoryPool<Bar, Bar.Pool>();
  108. Container.ResolveRoots();
  109. }
  110. [Test]
  111. public void TestCustomValidatable()
  112. {
  113. Container.BindInterfacesAndSelfTo<Loy>().AsSingle().NonLazy();
  114. Container.ResolveRoots();
  115. Assert.IsEqual(Container.Resolve<Loy>().CallCount, 1);
  116. }
  117. public class Loy : IValidatable, IInitializable, ITickable
  118. {
  119. public int CallCount
  120. {
  121. get; set;
  122. }
  123. public void Initialize()
  124. {
  125. }
  126. public void Tick()
  127. {
  128. }
  129. public void Validate()
  130. {
  131. CallCount++;
  132. }
  133. }
  134. public class Jaze
  135. {
  136. [Inject]
  137. public LazyInject<Qux> Qux;
  138. }
  139. public class QuxInstaller : Installer<QuxInstaller>
  140. {
  141. public override void InstallBindings()
  142. {
  143. Container.Bind<Qux>().AsSingle();
  144. Container.Bind<Bar>().AsSingle();
  145. }
  146. }
  147. public class Qux
  148. {
  149. }
  150. public class Bar
  151. {
  152. public Bar(Foo foo)
  153. {
  154. }
  155. public class Factory : PlaceholderFactory<Bar>
  156. {
  157. }
  158. public class Pool : MemoryPool<Bar>
  159. {
  160. }
  161. }
  162. public class Foo
  163. {
  164. }
  165. public interface IGorp
  166. {
  167. }
  168. public class Gorp : IGorp, IValidatable
  169. {
  170. public static int CallCount
  171. {
  172. get; set;
  173. }
  174. public void Validate()
  175. {
  176. CallCount++;
  177. }
  178. }
  179. }
  180. }