function FilesTestTrait::retrieveFiles

Retrieves files in a project directory.

Parameters

string $directory: The directory where files are located. It must be an absolute path like the one returned by \Drupal\Tests\UnitTestCase\FilesTestTrait::realPath().

string $extension: The file extension.

callable $callable: The callable to accept files. It gets the following arguments.

  • $current: the current item's value
  • $key: the current item's key
  • $iterator: the iterator being filtered

It must return TRUE when the file is accepted, FALSE otherwise.

Return value

array An array

See also

\RecursiveCallbackFilterIterator

4 calls to FilesTestTrait::retrieveFiles()
ConfigFilesValidationTest::providerConfigFiles in tests/src/Unit/ConfigFilesValidationTest.php
Provides test data for testNoUuidInConfig().
RoutePathTest::providerRoutingFiles in tests/src/Unit/RoutePathTest.php
Provides test data for testPathStartsWithSlash().
TraitsTest::providerConfigFiles in tests/src/Unit/TraitsTest.php
Provides test data for testNoUuidInConfig().
TraitsTest::providerRoutingFiles in tests/src/Unit/TraitsTest.php
Provides test data for testRoutingFilesCallback().

File

tests/src/Unit/FilesTestTrait.php, line 47

Class

FilesTestTrait
Trait for tests that retrieve files in project directories.

Namespace

Drupal\Tests\examples\Unit

Code

protected static function retrieveFiles(string $directory, string $extension, callable $callable) : array {
  $directory_iterator = new \RecursiveDirectoryIterator($directory, \FilesystemIterator::SKIP_DOTS);
  $files = [];
  $filter_callback = function (mixed $current, string $key, mixed $iterator) use ($extension, $callable) {
    /** @var \SplFileInfo $current */
    /** @var \RecursiveDirectoryIterator $iterator */
    if ($current->isFile() && $current->getExtension() === $extension) {
      return call_user_func($callable, $current, $key, $iterator);
    }
    elseif ($current->isDir()) {
      // Always accept a directory.
      return TRUE;
    }
    else {
      return FALSE;
    }
  };
  $filter = new \RecursiveCallbackFilterIterator($directory_iterator, $filter_callback);
  $iterator = new \RecursiveIteratorIterator($filter);
  foreach ($iterator as $info) {
    /** @var \SplFileInfo $info */
    $files[] = [
      $info->getFilename(),
      $info->getPath(),
      $info->getPathname(),
    ];
  }
  return $files;
}