Source of file FileFinderTest.php
Size: 3,367 Bytes - Last Modified: 2021-12-23T10:27:40+00:00
/var/www/docs.ssmods.com/process/src/tests/php/FileFinderTest.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 | <?php namespace SilverStripe\Assets\Tests; use InvalidArgumentException; use SilverStripe\Assets\FileFinder; use SilverStripe\Dev\SapphireTest; /** * Tests for the {@link SS_FileFinder} class. */ class FileFinderTest extends SapphireTest { protected $base; public function __construct() { $this->base = __DIR__ . '/FileFinderTest'; parent::__construct(); } public function testBasicOperation() { $this->assertFinderFinds( new FileFinder(), [ 'file1.txt', 'file2.txt', 'dir1/dir1file1.txt', 'dir1/dir1file2.txt', 'dir1/dir2/dir2file1.txt', 'dir1/dir2/dir3/dir3file1.txt' ] ); } public function testInvalidOptionThrowsException() { $this->expectException(\InvalidArgumentException::class); $finder = new FileFinder(); $finder->setOption('this_doesnt_exist', 'ok'); } public function testFilenameRegex() { $finder = new FileFinder(); $finder->setOption('name_regex', '/file2\.txt$/'); $this->assertFinderFinds( $finder, [ 'file2.txt', 'dir1/dir1file2.txt'], 'The finder only returns files matching the name regex.' ); } public function testIgnoreFiles() { $finder = new FileFinder(); $finder->setOption('ignore_files', ['file1.txt', 'dir1file1.txt', 'dir2file1.txt']); $this->assertFinderFinds( $finder, [ 'file2.txt', 'dir1/dir1file2.txt', 'dir1/dir2/dir3/dir3file1.txt'], 'The finder ignores files with the basename in the ignore_files setting.' ); } public function testIgnoreDirs() { $finder = new FileFinder(); $finder->setOption('ignore_dirs', ['dir2']); $this->assertFinderFinds( $finder, [ 'file1.txt', 'file2.txt', 'dir1/dir1file1.txt', 'dir1/dir1file2.txt'], 'The finder ignores directories in ignore_dirs.' ); } public function testMinDepth() { $finder = new FileFinder(); $finder->setOption('min_depth', 2); $this->assertFinderFinds( $finder, [ 'dir1/dir2/dir2file1.txt', 'dir1/dir2/dir3/dir3file1.txt' ], 'The finder respects the min depth setting.' ); } public function testMaxDepth() { $finder = new FileFinder(); $finder->setOption('max_depth', 1); $this->assertFinderFinds( $finder, [ 'file1.txt', 'file2.txt', 'dir1/dir1file1.txt', 'dir1/dir1file2.txt'], 'The finder respects the max depth setting.' ); } public function assertFinderFinds(FileFinder $finder, $expect, $message = '') { $found = $finder->find($this->base); foreach ($expect as $k => $file) { $expect[$k] = "{$this->base}/$file"; } sort($expect); sort($found); $this->assertEquals($expect, $found, $message); } } |