public function testResolveException() { $container = new Container(); try { $container->get(AutoResolveTestExceptionDepth1::class); static::fail(); } catch (CannotResolveException $e) { static::assertEquals('unknown', $e->getParameter()); static::assertEquals(AutoResolveTestExceptionDepth1::class, $e->getClass()); } try { $container->get(AutoResolveTestDepth2::class); static::fail(); } catch (CannotResolveException $e) { static::assertEquals('unknown', $e->getParameter()); static::assertEquals(AutoResolveTestExceptionDepth1::class, $e->getClass()); } }
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()); }
<?php namespace PHPSTORM_META; $STATIC_METHOD_TYPES = [\Interop\Container\ContainerInterface::get('') => ["" == "@"], \Wandu\DI\Container::get('') => ["" == "@"]];
public function testWith() { $container = new Container(); $instance1 = new ArrayObject(); $instance2 = new ArrayObject(); $instance3 = new ArrayObject(); $instance4 = new ArrayObject(); $container->instance('instance1', $instance1); $container->instance('instance2', $instance2); $container->instance('instance3', $instance3); $container->instance('instance4', $instance4); static::assertNotSame($instance1, $instance2); // same is real same? static::assertSame($instance1, $container->get('instance1')); static::assertSame($instance2, $container->get('instance2')); static::assertSame($instance3, $container->get('instance3')); static::assertSame($instance4, $container->get('instance4')); static::assertSame($container, $container->get(Container::class)); static::assertSame($container, $container->get(ContainerInterface::class)); static::assertSame($container, $container->get(InteropContainer::class)); static::assertSame($container, $container->get('container')); $addedInstance1 = new ArrayObject(); $addedInstance2 = new ArrayObject(); $otherContainer = $container->with(['added_instance1' => $addedInstance1, 'added_instance2' => $addedInstance2]); static::assertNotEquals($otherContainer, $container); static::assertFalse($container->has('added_instance1')); static::assertFalse($container->has('added_instance2')); static::assertTrue($otherContainer->has('added_instance1')); static::assertTrue($otherContainer->has('added_instance2')); static::assertSame($instance1, $otherContainer->get('instance1')); static::assertSame($instance2, $otherContainer->get('instance2')); static::assertSame($instance3, $otherContainer->get('instance3')); static::assertSame($instance4, $otherContainer->get('instance4')); static::assertSame($addedInstance1, $otherContainer->get('added_instance1')); static::assertSame($addedInstance2, $otherContainer->get('added_instance2')); static::assertSame($otherContainer, $otherContainer->get(Container::class)); static::assertSame($otherContainer, $otherContainer->get(ContainerInterface::class)); static::assertSame($otherContainer, $otherContainer->get(InteropContainer::class)); static::assertSame($otherContainer, $otherContainer->get('container')); }