public function testInjectsRuntimeArgumentsAndInvokesMethods()
{
$c = new Container();
$c->add('OrnoTest\\Assets\\Bar')->withArguments(['OrnoTest\\Assets\\Baz']);
$c->add('closure1', function ($bar) use($c) {
return $c->get('OrnoTest\\Assets\\Foo', [$bar]);
})->withArgument('OrnoTest\\Assets\\Bar');
$c->add('OrnoTest\\Assets\\Baz');
$c->add('OrnoTest\\Assets\\Foo')->withArgument('OrnoTest\\Assets\\Bar')->withMethodCalls(['injectBaz' => ['OrnoTest\\Assets\\Baz']]);
$runtimeBar = new \OrnoTest\Assets\Bar(new \OrnoTest\Assets\Baz());
$foo = $c->get('OrnoTest\\Assets\\Foo', [$runtimeBar]);
$this->assertInstanceOf('OrnoTest\\Assets\\Foo', $foo);
$this->assertInstanceOf('OrnoTest\\Assets\\Bar', $foo->bar);
$this->assertInstanceOf('OrnoTest\\Assets\\Baz', $foo->baz);
$this->assertSame($foo->bar, $runtimeBar);
$fooClosure = $c->get('closure1');
$this->assertInstanceOf('OrnoTest\\Assets\\Foo', $fooClosure);
$this->assertInstanceOf('OrnoTest\\Assets\\Bar', $fooClosure->bar);
}