/** * Method to test createObject(). * * @return void * * @covers Windwalker\DI\Container::createObject */ public function testcreateObject() { $container = new Container(); $foo = $container->createObject('Windwalker\\DI\\Test\\Mock\\Foo'); $this->assertInstanceOf('Windwalker\\DI\\Test\\Mock\\Foo', $foo); $this->assertInstanceOf('Windwalker\\DI\\Test\\Mock\\Bar', $foo->bar); $this->assertInstanceOf('SplPriorityQueue', $foo->bar->queue); $this->assertInstanceOf('SplStack', $foo->bar->stack); // Bind a sub class $container = new Container(); $container->share('SplStack', new StubStack()); $foo = $container->createObject('Windwalker\\DI\\Test\\Mock\\Foo'); $this->assertInstanceOf('Windwalker\\DI\\Test\\Mock\\StubStack', $foo->bar->stack); // Bind not shared classes $container = new Container(); $container->set('SplPriorityQueue', function () { return new \SplPriorityQueue(); }); $queue = $container->get('SplPriorityQueue'); $foo = $container->createObject('Windwalker\\DI\\Test\\Mock\\Foo'); $this->assertNotSame($queue, $foo->bar->queue, 'Non shared class should be not same.'); // Auto create classes should be not shared $container = new Container(); $bar1 = $container->createObject('Windwalker\\DI\\Test\\Mock\\Bar'); $bar2 = $container->createObject('Windwalker\\DI\\Test\\Mock\\Bar2'); $this->assertNotSame($bar1->queue, $bar2->queue); // Not shared object $container = new Container(); $foo = $container->createObject('Windwalker\\DI\\Test\\Mock\\Foo'); $foo2 = $container->get('Windwalker\\DI\\Test\\Mock\\Foo'); $this->assertNotSame($foo, $foo2); // Shared object $container = new Container(); $foo = $container->createObject('Windwalker\\DI\\Test\\Mock\\Foo', true); $foo2 = $container->get('Windwalker\\DI\\Test\\Mock\\Foo'); $this->assertSame($foo, $foo2); }