--- /dev/null
+<?php
+namespace Consolidation\AnnotatedCommand;
+
+class CommandFileDiscoveryTests extends \PHPUnit_Framework_TestCase
+{
+ function testCommandDiscovery()
+ {
+ $discovery = new CommandFileDiscovery();
+ $discovery
+ ->setSearchPattern('*CommandFile.php')
+ ->setSearchLocations(['alpha']);
+
+ chdir(__DIR__);
+ $commandFiles = $discovery->discover('.', '\Consolidation\TestUtils');
+
+ $commandFilePaths = array_keys($commandFiles);
+ $commandFileNamespaces = array_values($commandFiles);
+
+ // Ensure that the command files that we expected to
+ // find were all found. We don't find anything in
+ // 'beta' because only 'alpha' is in the search path.
+ $this->assertContains('./src/ExampleCommandFile.php', $commandFilePaths);
+ $this->assertContains('./src/ExampleHookAllCommandFile.php', $commandFilePaths);
+ $this->assertContains('./src/alpha/AlphaCommandFile.php', $commandFilePaths);
+ $this->assertContains('./src/alpha/Inclusive/IncludedCommandFile.php', $commandFilePaths);
+
+ // Make sure that there are no additional items found.
+ $this->assertEquals(4, count($commandFilePaths));
+
+ // Ensure that the command file namespaces that we expected
+ // to be generated all match.
+ $this->assertContains('\Consolidation\TestUtils\ExampleCommandFile', $commandFileNamespaces);
+ $this->assertContains('\Consolidation\TestUtils\ExampleHookAllCommandFile', $commandFileNamespaces);
+ $this->assertContains('\Consolidation\TestUtils\alpha\AlphaCommandFile', $commandFileNamespaces);
+ $this->assertContains('\Consolidation\TestUtils\alpha\Inclusive\IncludedCommandFile', $commandFileNamespaces);
+
+ // We do not need to test for additional namespace items, because we
+ // know that the length of the array_keys must be the same as the
+ // length of the array_values.
+ }
+
+ function testDeepCommandDiscovery()
+ {
+ $discovery = new CommandFileDiscovery();
+ $discovery
+ ->setSearchPattern('*CommandFile.php')
+ ->setSearchDepth(1)
+ ->setSearchLocations([]);
+
+ chdir(__DIR__);
+ $commandFiles = $discovery->discover('.', '\Consolidation\TestUtils');
+
+ $commandFilePaths = array_keys($commandFiles);
+ $commandFileNamespaces = array_values($commandFiles);
+
+ // Ensure that the command files that we expected to
+ // find were all found. We find both 'alpha' and 'beta'
+ // items because the search locations is empty, which
+ // causes the search at the base directory to be deep.
+ // We do not find alpha/Inclusive, though, as the search
+ // depth is only 2, which excludes directories that are
+ // three levels deep.
+ $this->assertContains('./src/ExampleCommandFile.php', $commandFilePaths);
+ $this->assertContains('./src/ExampleHookAllCommandFile.php', $commandFilePaths);
+ $this->assertContains('./src/alpha/AlphaCommandFile.php', $commandFilePaths);
+ $this->assertContains('./src/beta/BetaCommandFile.php', $commandFilePaths);
+
+ // Make sure that there are no additional items found.
+ $this->assertEquals(4, count($commandFilePaths));
+
+ // Ensure that the command file namespaces that we expected
+ // to be generated all match.
+ $this->assertContains('\Consolidation\TestUtils\ExampleCommandFile', $commandFileNamespaces);
+ $this->assertContains('\Consolidation\TestUtils\ExampleHookAllCommandFile', $commandFileNamespaces);
+ $this->assertContains('\Consolidation\TestUtils\alpha\AlphaCommandFile', $commandFileNamespaces);
+ $this->assertContains('\Consolidation\TestUtils\beta\BetaCommandFile', $commandFileNamespaces);
+
+ // We do not need to test for additional namespace items, because we
+ // know that the length of the array_keys must be the same as the
+ // length of the array_values.
+ }
+}