/**
  * {@inheritdoc}
  */
 public function run()
 {
     ob_start();
     $input = $this->container->get('input');
     $output = $this->container->get('output');
     // Create reactor and register custom options
     $reactor = new Reactor($input, $output, $this->container);
     $reactor->setLogo($this->loadLogo());
     $reactor->registerCustomOption('env', 'Overrides the Mako environment', function (Config $config, $option) {
         putenv('MAKO_ENV=' . $option);
         $config->setEnvironment($option);
     });
     $reactor->registerCustomOption('database', 'Overrides the default database connection', function (Config $config, $option) {
         $config->set('database.default', $option);
     });
     $reactor->registerCustomOption('mute', 'Mutes all output', function (Output $output) {
         $output->mute();
     });
     // Register reactor commands
     foreach ($this->getCommands() as $command => $class) {
         $reactor->registerCommand($command, $class);
     }
     // Run the reactor
     $reactor->run();
 }
 /**
  *
  */
 public function testCommandWithCustomOption()
 {
     $closure = function () {
     };
     //
     $input = m::mock('mako\\cli\\input\\Input');
     $input->shouldReceive('getArgument')->once()->with(1)->andReturn('foo');
     $input->shouldReceive('getArgument')->once()->with('option')->andReturn(true);
     $input->shouldReceive('getArguments')->once()->andReturn(['reactor', 'foo']);
     //
     $output = m::mock('mako\\cli\\output\\Output');
     $output->shouldReceive('write')->times(2);
     //
     $container = m::mock('mako\\syringe\\Container');
     $container->shouldReceive('call')->once()->with($closure, ['option' => true]);
     //
     $dispatcher = m::mock('mako\\reactor\\Dispatcher');
     $dispatcher->shouldReceive('dispatch')->once()->with('mako\\tests\\unit\\reactor\\Foo', ['reactor', 'foo']);
     //
     $reactor = new Reactor($input, $output, $container, $dispatcher);
     $reactor->registerCustomOption('option', 'option description', $closure);
     $reactor->registerCommand('foo', 'mako\\tests\\unit\\reactor\\Foo');
     $reactor->run();
 }