From f8cd9e826328a1c58c2775286c1f450b8e8d1f7f Mon Sep 17 00:00:00 2001 From: Dany Maillard Date: Sat, 23 Jan 2016 15:16:18 +0100 Subject: [PATCH] [Console] Show code when an exception is thrown --- src/Symfony/Component/Console/Application.php | 6 +++++- src/Symfony/Component/Console/Tests/ApplicationTest.php | 5 +++++ .../Component/Console/Tests/Fixtures/Foo3Command.php | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Console/Application.php b/src/Symfony/Component/Console/Application.php index 41c6657e0862..5f186d3f0d6b 100644 --- a/src/Symfony/Component/Console/Application.php +++ b/src/Symfony/Component/Console/Application.php @@ -588,7 +588,11 @@ public function renderException(\Exception $e, OutputInterface $output) $output->writeln('', OutputInterface::VERBOSITY_QUIET); do { - $title = sprintf(' [%s] ', get_class($e)); + $title = sprintf( + ' [%s%s] ', + get_class($e), + $output->isVerbose() && 0 !== ($code = $e->getCode()) ? ' ('.$code.')' : '' + ); $len = $this->stringWidth($title); diff --git a/src/Symfony/Component/Console/Tests/ApplicationTest.php b/src/Symfony/Component/Console/Tests/ApplicationTest.php index 7eaa28d40d57..b44a00ae6b17 100644 --- a/src/Symfony/Component/Console/Tests/ApplicationTest.php +++ b/src/Symfony/Component/Console/Tests/ApplicationTest.php @@ -520,6 +520,11 @@ public function testRenderException() $tester->run(array('command' => 'foo3:bar'), array('decorated' => false)); $this->assertStringEqualsFile(self::$fixturesPath.'/application_renderexception3.txt', $tester->getDisplay(true), '->renderException() renders a pretty exceptions with previous exceptions'); + $tester->run(array('command' => 'foo3:bar'), array('decorated' => false, 'verbosity' => Output::VERBOSITY_VERBOSE)); + $this->assertRegExp('/\[Exception\]\s*First exception/', $tester->getDisplay(), '->renderException() renders a pretty exception without code exception when code exception is default and verbosity is verbose'); + $this->assertRegExp('/\[Exception\]\s*Second exception/', $tester->getDisplay(), '->renderException() renders a pretty exception without code exception when code exception is 0 and verbosity is verbose'); + $this->assertRegExp('/\[Exception \(404\)\]\s*Third exception/', $tester->getDisplay(), '->renderException() renders a pretty exception with code exception when code exception is 404 and verbosity is verbose'); + $tester->run(array('command' => 'foo3:bar'), array('decorated' => true)); $this->assertStringEqualsFile(self::$fixturesPath.'/application_renderexception3decorated.txt', $tester->getDisplay(true), '->renderException() renders a pretty exceptions with previous exceptions'); diff --git a/src/Symfony/Component/Console/Tests/Fixtures/Foo3Command.php b/src/Symfony/Component/Console/Tests/Fixtures/Foo3Command.php index 6c890fafff61..adb3a2d809f7 100644 --- a/src/Symfony/Component/Console/Tests/Fixtures/Foo3Command.php +++ b/src/Symfony/Component/Console/Tests/Fixtures/Foo3Command.php @@ -23,7 +23,7 @@ protected function execute(InputInterface $input, OutputInterface $output) throw new \Exception('Second exception comment', 0, $e); } } catch (\Exception $e) { - throw new \Exception('Third exception comment', 0, $e); + throw new \Exception('Third exception comment', 404, $e); } } }