| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- <?php
- /**
- * Test: Nette\Utils\Finder mask tests.
- */
- declare(strict_types=1);
- use Nette\Utils\Finder;
- use Tester\Assert;
- require __DIR__ . '/../bootstrap.php';
- function export($iterator)
- {
- $arr = [];
- foreach ($iterator as $key => $value) {
- $arr[] = strtr($key, '\\', '/');
- }
- sort($arr);
- return $arr;
- }
- test('multiple mask', function () {
- $finder = Finder::findFiles('*.txt', '*.gif')->from('fixtures.finder');
- Assert::same([
- 'fixtures.finder/file.txt',
- 'fixtures.finder/images/logo.gif',
- 'fixtures.finder/subdir/file.txt',
- 'fixtures.finder/subdir/subdir2/file.txt',
- ], export($finder));
- });
- test('', function () {
- $finder = Finder::findFiles(['*.txt', '*.gif'])->from('fixtures.finder');
- Assert::same([
- 'fixtures.finder/file.txt',
- 'fixtures.finder/images/logo.gif',
- 'fixtures.finder/subdir/file.txt',
- 'fixtures.finder/subdir/subdir2/file.txt',
- ], export($finder));
- });
- test('* mask', function () {
- $finder = Finder::findFiles('*.txt', '*')->in('fixtures.finder/subdir');
- Assert::same([
- 'fixtures.finder/subdir/file.txt',
- 'fixtures.finder/subdir/readme',
- ], export($finder));
- });
- test('*.* mask', function () {
- $finder = Finder::findFiles('*.*')->in('fixtures.finder/subdir');
- Assert::same([
- 'fixtures.finder/subdir/file.txt',
- ], export($finder));
- });
- test('subdir excluding mask', function () {
- $finder = Finder::findFiles('*')->exclude('*i*/*')->from('fixtures.finder');
- Assert::same([
- 'fixtures.finder/file.txt',
- ], export($finder));
- });
- test('subdir mask', function () {
- $finder = Finder::findFiles('*/*2/*')->from('fixtures.finder');
- Assert::same([
- 'fixtures.finder/subdir/subdir2/file.txt',
- ], export($finder));
- });
- test('excluding mask', function () {
- $finder = Finder::findFiles('*')->exclude('*i*')->in('fixtures.finder/subdir');
- Assert::same([
- 'fixtures.finder/subdir/readme',
- ], export($finder));
- });
- test('subdir excluding mask', function () {
- $finder = Finder::findFiles('*')->exclude('*i*/*')->from('fixtures.finder');
- Assert::same([
- 'fixtures.finder/file.txt',
- ], export($finder));
- });
- test('wildcard ?', function () {
- $finder = Finder::findFiles('*2*/fi??.*')->from('fixtures.finder');
- Assert::same([
- 'fixtures.finder/subdir/subdir2/file.txt',
- ], export($finder));
- });
- test('wildcard []', function () {
- $finder = Finder::findFiles('*[efd][a-z][!a-r]*')->from('fixtures.finder');
- Assert::same([
- 'fixtures.finder/images/logo.gif',
- ], export($finder));
- $finder = Finder::findFiles('[[]x[]]/fil[e].*')->in('fixtures.finder2');
- Assert::same([
- 'fixtures.finder2/[x]/file.txt',
- ], export($finder));
- });
- test('wildcards [] in mask part of path', function () {
- $finder = Finder::findFiles('[x]/fil[e].*')->in('fixtures.finder2');
- Assert::same([
- 'fixtures.finder2/x/file.txt',
- ], export($finder));
- $finder = Finder::findFiles('[x]/fil[e].*')->from('fixtures.finder2');
- Assert::same([
- 'fixtures.finder2/x/file.txt',
- ], export($finder));
- });
- test('[] are not wildcards in path', function () {
- $finder = Finder::findFiles('*')->in('fixtures.finder*/[x]');
- Assert::same([
- 'fixtures.finder2/[x]/file.txt',
- ], export($finder));
- $finder = Finder::findFiles('*')->from('fixtures.finder*/[x]');
- Assert::same([
- 'fixtures.finder2/[x]/file.txt',
- ], export($finder));
- });
- test('recursive mask', function () {
- $finder = Finder::findFiles('**/f*')->from('fixtures.finder');
- Assert::same([
- 'fixtures.finder/file.txt',
- 'fixtures.finder/subdir/file.txt',
- 'fixtures.finder/subdir/subdir2/file.txt',
- ], export($finder));
- $finder = Finder::findFiles('**/f*')->in('fixtures.finder');
- Assert::same([
- 'fixtures.finder/file.txt',
- ], export($finder));
- });
- test('anchored', function () {
- $finder = Finder::findFiles('./f*')->from('fixtures.finder');
- Assert::same([
- 'fixtures.finder/file.txt',
- ], export($finder));
- $finder = Finder::findFiles('./*/f*')->from('fixtures.finder');
- Assert::same([
- 'fixtures.finder/subdir/file.txt',
- ], export($finder));
- $finder = Finder::findFiles('./f*')->in('fixtures.finder');
- Assert::same([
- 'fixtures.finder/./file.txt',
- ], export($finder));
- });
- test('anchored level-up', function () {
- // not supported
- $finder = Finder::findFiles('../f*')->from('fixtures.finder/subdir');
- Assert::same([], export($finder));
- $finder = Finder::findFiles('../f*')->in('fixtures.finder/subdir');
- Assert::same([
- 'fixtures.finder/subdir/../file.txt',
- ], export($finder));
- });
- test('anchored recursive mask', function () {
- $finder = Finder::findFiles('./**/f*')->from('fixtures.finder');
- Assert::same([
- 'fixtures.finder/file.txt',
- 'fixtures.finder/subdir/file.txt',
- 'fixtures.finder/subdir/subdir2/file.txt',
- ], export($finder));
- });
- test('leading recursive mask', function () {
- $finder = Finder::find('s*/**')->from('fixtures.finder');
- Assert::same([
- 'fixtures.finder/subdir/file.txt',
- 'fixtures.finder/subdir/readme',
- 'fixtures.finder/subdir/subdir2',
- 'fixtures.finder/subdir/subdir2/file.txt',
- ], export($finder));
- });
- test('mask in path', function () {
- $finder = Finder::findFiles('f*')->in('*.finder');
- Assert::same([
- 'fixtures.finder/file.txt',
- ], export($finder));
- $finder = Finder::findFiles('f*')->from('*.finder');
- Assert::same([
- 'fixtures.finder/file.txt',
- 'fixtures.finder/subdir/file.txt',
- 'fixtures.finder/subdir/subdir2/file.txt',
- ], export($finder));
- });
- test('recursive mask in path', function () {
- $finder = Finder::findFiles('f*')->in('**/fixtures.finder');
- Assert::same([
- 'fixtures.finder/file.txt',
- ], export($finder));
- $finder = Finder::findFiles('f*')->from('**/fixtures.finder');
- Assert::same([
- 'fixtures.finder/file.txt',
- 'fixtures.finder/subdir/file.txt',
- 'fixtures.finder/subdir/subdir2/file.txt',
- ], export($finder));
- });
|