From 912d539dd024903c532ca6746d46ab343ec3f988 Mon Sep 17 00:00:00 2001 From: Nathaniel Catchpole Date: Tue, 23 Feb 2016 18:01:17 +0900 Subject: [PATCH] Issue #2671708 by alexpott, damiankloip: Add a RegexDirectoryIterator --- .../FileSystem/RegexDirectoryIterator.php | 47 ++++++++ .../FileSystem/RegexDirectoryIteratorTest.php | 114 ++++++++++++++++++ 2 files changed, 161 insertions(+) create mode 100644 core/lib/Drupal/Component/FileSystem/RegexDirectoryIterator.php create mode 100644 core/tests/Drupal/Tests/Component/FileSystem/RegexDirectoryIteratorTest.php diff --git a/core/lib/Drupal/Component/FileSystem/RegexDirectoryIterator.php b/core/lib/Drupal/Component/FileSystem/RegexDirectoryIterator.php new file mode 100644 index 00000000000..675dfc84682 --- /dev/null +++ b/core/lib/Drupal/Component/FileSystem/RegexDirectoryIterator.php @@ -0,0 +1,47 @@ +regex = $regex; + } + + /** + * Implements \FilterIterator::accept(). + */ + public function accept() { + /** @var \SplFileInfo $file_info */ + $file_info = $this->getInnerIterator()->current(); + return $file_info->isFile() && preg_match($this->regex, $file_info->getFilename()); + } + +} diff --git a/core/tests/Drupal/Tests/Component/FileSystem/RegexDirectoryIteratorTest.php b/core/tests/Drupal/Tests/Component/FileSystem/RegexDirectoryIteratorTest.php new file mode 100644 index 00000000000..b4b75c86a05 --- /dev/null +++ b/core/tests/Drupal/Tests/Component/FileSystem/RegexDirectoryIteratorTest.php @@ -0,0 +1,114 @@ +getFilename(); + }, array_values(iterator_to_array($iterator))); + + $this->assertSame($expected, $file_list); + } + + /** + * Provider for self::testRegexDirectoryIterator(). + */ + public function providerTestRegexDirectoryIterator() { + return [ + [ + [ + '1.yml' => '', + ], + '/\.yml$/', + [ + '1.yml', + ], + ], + [ + [ + '1.yml' => '', + '2.yml' => '', + '3.txt' => '', + ], + '/\.yml$/', + [ + '1.yml', + '2.yml', + ], + ], + [ + [ + '1.yml' => '', + '2.yml' => '', + '3.txt' => '', + ], + '/\.txt/', + [ + '3.txt', + ], + ], + [ + [ + '1.yml' => '', + // Ensure we don't recurse in directories even if that match the + // regex. + '2.yml' => [ + '3.yml' => '', + '4.yml' => '', + ], + '3.txt' => '', + ], + '/\.yml$/', + [ + '1.yml', + ], + ], + [ + [ + '1.yml' => '', + '2.yml' => '', + '3.txt' => '', + ], + '/^\d/', + [ + '1.yml', + '2.yml', + '3.txt' + ], + ], + [ + [ + '1.yml' => '', + '2.yml' => '', + '3.txt' => '', + ], + '/^\D/', + [], + ], + ]; + } + +}