diff --git a/lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php index 9748a1094..ea26c50f1 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php @@ -32,6 +32,7 @@ use Symfony\Component\Console\Helper\TableHelper; * @link www.doctrine-project.org * @since 2.1 * @author Benjamin Eberlei + * @author Daniel Leech */ class InfoCommand extends Command { @@ -62,6 +63,10 @@ or not. You can display the complete metadata for a given entity by specifying it, e.g. %command.full_name% My\Namespace\Entity\MyEntity + +You can also specify a partial class name (as a regex): + + %command.full_name% MyEntity EOT ); } @@ -253,7 +258,7 @@ EOT protected function formatListField($label, $values) { if (!$values) { - $out = 'Empty'; + $this->formatField($label, 'Empty'); } else { $this->formatField($label, array_shift($values)); @@ -261,8 +266,6 @@ EOT $this->formatField($label, $value); } } - - $this->formatField($label, $out); } protected function formatAssociationMappings($associationMappings) diff --git a/tests/Doctrine/Tests/ORM/Tools/Console/Command/InfoCommandTest.php b/tests/Doctrine/Tests/ORM/Tools/Console/Command/InfoCommandTest.php new file mode 100644 index 000000000..a46157497 --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Tools/Console/Command/InfoCommandTest.php @@ -0,0 +1,109 @@ +application = new Application(); + $command = new InfoCommand(); + + $this->application->setHelperSet(new HelperSet(array( + 'em' => new EntityManagerHelper($this->_em) + ))); + + $this->application->add($command); + + $this->command = $this->application->find('orm:info'); + $this->tester = new CommandTester($command); + } + + public function testListAllClasses() + { + $this->tester->execute(array( + 'command' => $this->command->getName(), + )); + + $this->assertContains('Doctrine\Tests\Models\Cache\AttractionInfo', $this->tester->getDisplay()); + $this->assertContains('Doctrine\Tests\Models\Cache\City', $this->tester->getDisplay()); + } + + public function testShowSpecificFuzzySingle() + { + $this->tester->execute(array( + 'command' => $this->command->getName(), + 'entityName' => 'AttractionInfo', + )); + + $display = $this->tester->getDisplay(); + $this->assertContains('Doctrine\Tests\Models\Cache\AttractionInfo', $display); + $this->assertContains('Root entity name', $display); + } + + /** + * @expectedException \InvalidArgumentException + * @expectedExceptionMessage possible matches: "Doctrine\Tests\Models\Cache\AttractionInfo + */ + public function testShowSpecificFuzzyAmbiguous() + { + $this->tester->execute(array( + 'command' => $this->command->getName(), + 'entityName' => 'Attraction', + )); + } + + /** + * @expectedException \InvalidArgumentException + * @expectedExceptionMessage Could not find any mapped Entity classes matching "AttractionFooBar" + */ + public function testShowSpecificNotFound() + { + $this->tester->execute(array( + 'command' => $this->command->getName(), + 'entityName' => 'AttractionFooBar' + )); + } + + /** + * This test takes a long time + */ + public function testShowSpecificSmokeTest() + { + $entityClassNames = $this->_em->getConfiguration() + ->getMetadataDriverImpl() + ->getAllClassNames(); + + foreach ($entityClassNames as $entityClassName) { + $this->tester->Execute(array( + 'command' => $this->command->getName(), + 'entityName' => $entityClassName + )); + } + } +}