Esempio n. 1
0
 public function testBind()
 {
     $container = new Container();
     $container->bind(AutoResolveTestDependInterface::class, AutoResolveTestDepend::class);
     $instance1 = $container->get(AutoResolveTestDepend::class);
     $instance2 = $container->get(AutoResolveTestDependInterface::class);
     static::assertInstanceOf(AutoResolveTestDepend::class, $instance1);
     static::assertInstanceOf(AutoResolveTestDependInterface::class, $instance1);
     static::assertSame($instance1, $instance2);
 }
Esempio n. 2
0
 public function testAutoWiringEachOther()
 {
     $container = new Container();
     $container->bind(Reader::class, AnnotationReader::class);
     // add annotation.
     $container->bind(AutoWiringTestEachOther1::class)->wire();
     $container->bind(AutoWiringTestEachOther2::class)->wire();
     $object = $container->get(AutoWiringTestEachOther1::class);
     static::assertInstanceOf(AutoWiringTestEachOther2::class, $object->getDepend());
     static::assertInstanceOf(AutoWiringTestEachOther1::class, $object->getDepend()->getDepend());
     $container = new Container();
     $container->bind(Reader::class, AnnotationReader::class);
     // add annotation.
     $container->bind(AutoWiringTestEachOther1::class)->wire();
     $container->bind(AutoWiringTestEachOther2::class)->wire();
     $object = $container->get(AutoWiringTestEachOther2::class);
     static::assertInstanceOf(AutoWiringTestEachOther1::class, $object->getDepend());
     static::assertInstanceOf(AutoWiringTestEachOther2::class, $object->getDepend()->getDepend());
 }
Esempio n. 3
0
 public function testBindFactory()
 {
     $container = new Container();
     $container->bind(ChainMethodTestDependInterface::class, ChainMethodTestDepend::class);
     // all same
     $object1 = $container[ChainMethodTestDependInterface::class];
     static::assertSame($object1, $container[ChainMethodTestDependInterface::class]);
     static::assertSame($object1, $container[ChainMethodTestDependInterface::class]);
     static::assertSame($object1, $container[ChainMethodTestDependInterface::class]);
     // reset
     $container = new Container();
     $container->bind(ChainMethodTestDependInterface::class, ChainMethodTestDepend::class)->factory(true);
     $object2 = $container[ChainMethodTestDependInterface::class];
     // all not same
     $object2_1 = $container[ChainMethodTestDependInterface::class];
     static::assertNotSame($object2, $object2_1);
     static::assertEquals($object2, $object2_1);
     $object2_2 = $container[ChainMethodTestDependInterface::class];
     static::assertNotSame($object2, $object2_2);
     static::assertEquals($object2, $object2_2);
     static::assertNotSame($object2_1, $object2_2);
     static::assertEquals($object2_1, $object2_2);
 }
Esempio n. 4
0
 public function testCreateMultiParamsClassWithArguments()
 {
     $container = new Container();
     try {
         $container->create(CreateTestHasMultiParam::class);
         static::fail();
     } catch (CannotResolveException $e) {
         static::assertEquals(CreateTestHasMultiParam::class, $e->getClass());
         static::assertEquals('param1', $e->getParameter());
     }
     $container->bind(CreateTestDependencyInterface::class, CreateTestDependency::class);
     try {
         $container->create(CreateTestHasMultiParam::class);
         static::fail();
     } catch (CannotResolveException $e) {
         static::assertEquals(CreateTestHasMultiParam::class, $e->getClass());
         static::assertEquals('param2', $e->getParameter());
     }
     // only sequential
     $object = $container->create(CreateTestHasMultiParam::class, [$param1 = new CreateTestDependency(), $param2 = new stdClass()]);
     static::assertSame($param1, $object->param1);
     static::assertSame($param2, $object->param2);
     static::assertSame('param3', $object->param3);
     static::assertSame('param4', $object->param4);
     // only assoc
     $object = $container->create(CreateTestHasMultiParam::class, ['param2' => $param2 = new stdClass(), 'param4' => $param4 = new stdClass()]);
     static::assertInstanceOf(CreateTestDependencyInterface::class, $object->param1);
     static::assertSame($param2, $object->param2);
     static::assertSame('param3', $object->param3);
     static::assertSame($param4, $object->param4);
     // complex
     $object = $container->create(CreateTestHasMultiParam::class, [$param1 = new CreateTestDependency(), $param2 = new stdClass(), 'param4' => $param4 = new stdClass(), 'param3' => $param3 = new stdClass()]);
     static::assertSame($param1, $object->param1);
     static::assertSame($param2, $object->param2);
     static::assertSame($param3, $object->param3);
     static::assertSame($param4, $object->param4);
 }
Esempio n. 5
0
 public function testCallMultiParamsClassWithArguments()
 {
     $container = new Container();
     try {
         $container->call(__NAMESPACE__ . '\\callTestFunctionHasMultiParam');
         static::fail();
     } catch (CannotResolveException $e) {
         static::assertEquals(null, $e->getClass());
         static::assertEquals('param1', $e->getParameter());
     }
     $container->bind(CallTestDependencyInterface::class, CallTestDependency::class);
     try {
         $container->call(__NAMESPACE__ . '\\callTestFunctionHasMultiParam');
         static::fail();
     } catch (CannotResolveException $e) {
         static::assertEquals(null, $e->getClass());
         static::assertEquals('param2', $e->getParameter());
     }
     // only sequential
     $result = $container->call(__NAMESPACE__ . '\\callTestFunctionHasMultiParam', [$param1 = new CallTestDependency(), $param2 = new stdClass()]);
     static::assertSame($param1, $result[0]);
     static::assertSame($param2, $result[1]);
     static::assertSame('param3', $result[2]);
     static::assertSame('param4', $result[3]);
     // only assoc
     $result = $container->call(__NAMESPACE__ . '\\callTestFunctionHasMultiParam', ['param2' => $param2 = new stdClass(), 'param4' => $param4 = new stdClass()]);
     static::assertInstanceOf(CallTestDependencyInterface::class, $result[0]);
     static::assertSame($param2, $result[1]);
     static::assertSame('param3', $result[2]);
     static::assertSame($param4, $result[3]);
     // complex
     $result = $container->call(__NAMESPACE__ . '\\callTestFunctionHasMultiParam', [$param1 = new CallTestDependency(), $param2 = new stdClass(), 'param4' => $param4 = new stdClass(), 'param3' => $param3 = new stdClass()]);
     static::assertSame($param1, $result[0]);
     static::assertSame($param2, $result[1]);
     static::assertSame($param3, $result[2]);
     static::assertSame($param4, $result[3]);
 }