1 module tests.array; 2 3 import std.stdio; 4 //import core.exception; 5 import unit_threaded; 6 7 import endovena; 8 import tests.cut; 9 import tests.utils; 10 11 @UnitTest 12 void resolving_array_with_default_and_one_named_service_will_return_both_services() { 13 Container container = new Container; 14 container.register!(IService, Service)(); 15 container.register!(IService, AnotherService)("another"); 16 auto services = container.get!(IService[])(); 17 services.length.shouldEqual(2); 18 } 19 20 @UnitTest 21 void i_can_resolve_array_of_singletons() { 22 Container container = new Container; 23 container.register!(IService, ServiceA, Singleton)(); 24 auto services = container.get!(IService[])(); 25 services.length.shouldEqual(1); 26 } 27 28 @UnitTest 29 void I_can_resolve_mixed_array_of_singletons_and_no_scoped() { 30 Container container = new Container; 31 container.register!(IService, Service, Singleton)(); 32 container.register!(IService, AnotherService)("another"); 33 auto services = container.get!(IService[])(); 34 services.length.shouldEqual(2); 35 } 36 37 @UnitTest 38 void I_can_inject_array_as_dependency() { 39 Container container = new Container; 40 container.register!(IDependency, Dependency)(); 41 container.register!(IDependency, Dependency)("Foo2"); 42 container.register!(IDependency, Dependency)("Foo3"); 43 container.register!(IService, ServiceWithArrayDependencies)(); 44 45 auto service = container.get!(IService)(); 46 service.shouldNotBeNull; 47 48 ServiceWithArrayDependencies sA = cast(ServiceWithArrayDependencies)(service); 49 sA.foos.length.shouldEqual(3); 50 sA.foos[0].instanceof!Dependency.shouldBeTrue; 51 } 52 53 @UnitTest 54 void i_can_resolve_array_of_named() { 55 Container container = new Container; 56 container.register!(IService, ServiceA, Singleton)("A"); 57 container.register!(IService, ServiceA, Singleton)("B"); 58 container.register!(IService, ServiceA, Singleton)("C"); 59 auto services = container.get!(IService[])(); 60 services.length.shouldEqual(3); 61 } 62 63 @UnitTest 64 void singleton_is_scoped_by_name() { 65 Container container = new Container; 66 container.register!(IService, ServiceA, Singleton)("A"); 67 container.register!(IService, ServiceA, Singleton)("B"); 68 container.register!(IService, ServiceA, Singleton)("C"); 69 IService a1 = container.get!IService("A"); 70 IService a2 = container.get!IService("A"); 71 IService b1 = container.get!IService("B"); 72 IService b2 = container.get!IService("B"); 73 74 shouldBeTrue(a1 is a2); 75 shouldBeTrue(b1 is b2); 76 shouldBeFalse(b1 is a1); 77 shouldBeFalse(b2 is a2); 78 shouldBeFalse(b2 is a1); 79 } 80 81 @UnitTest 82 void i_can_resolve_transient_array_of_different_named_service() { 83 Container container = new Container; 84 container.register!(IService, ServiceA)("A"); 85 container.register!(IService, ServiceB)("B"); 86 87 auto services = container.get!(IService[])(); 88 services.length.shouldEqual(2); 89 90 container.get!IService("A").instanceof!ServiceA.shouldBeTrue; 91 container.get!IService("B").instanceof!ServiceB.shouldBeTrue; 92 93 auto s1 = container.get!IService("A"); 94 auto s2 = container.get!IService("A"); 95 shouldBeFalse(s1 == s2); 96 } 97 98 @UnitTest 99 void i_can_resolve_singleton_array_of_different_named_service() { 100 Container container = new Container; 101 container.register!(IService, ServiceA, Singleton)("A"); 102 container.register!(IService, ServiceB, Singleton)("B"); 103 auto services = container.get!(IService[])(); 104 services.length.shouldEqual(2); 105 container.get!IService("A").instanceof!ServiceA.shouldBeTrue; 106 container.get!IService("B").instanceof!ServiceB.shouldBeTrue; 107 auto s1 = container.get!IService("A"); 108 auto s2 = container.get!IService("A"); 109 shouldBeTrue(s1 is s2); 110 shouldBeTrue(s1 == s2); 111 } 112 113 @UnitTest 114 void i_can_resolve_array_of_different_named_service() { 115 Container container = new Container; 116 container.register!(IService)(c => new ServiceA, "A"); 117 container.register!(IService)(c => new ServiceB, "B1"); 118 container.register!(IService)(c => new ServiceB, "B2"); 119 auto services = container.get!(IService[])(); 120 services.length.shouldEqual(3); 121 container.get!IService("A").instanceof!ServiceA.shouldBeTrue; 122 container.get!IService("B1").instanceof!ServiceB.shouldBeTrue; 123 container.get!IService("B2").instanceof!ServiceB.shouldBeTrue; 124 auto b1 = container.get!IService("B1"); 125 auto b2 = container.get!IService("B2"); 126 shouldBeFalse(b1 is b2); 127 shouldBeFalse(b1 == b2); 128 } 129 130 @UnitTest 131 void resolving_array_of_not_registered_services_should_throw() { 132 Container container = new Container; 133 container.get!(IService[]).shouldThrow!ResolveException; 134 }