Finder.mask.phpt 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. <?php
  2. /**
  3. * Test: Nette\Utils\Finder mask tests.
  4. */
  5. declare(strict_types=1);
  6. use Nette\Utils\Finder;
  7. use Tester\Assert;
  8. require __DIR__ . '/../bootstrap.php';
  9. function export($iterator)
  10. {
  11. $arr = [];
  12. foreach ($iterator as $key => $value) {
  13. $arr[] = strtr($key, '\\', '/');
  14. }
  15. sort($arr);
  16. return $arr;
  17. }
  18. test('multiple mask', function () {
  19. $finder = Finder::findFiles('*.txt', '*.gif')->from('fixtures.finder');
  20. Assert::same([
  21. 'fixtures.finder/file.txt',
  22. 'fixtures.finder/images/logo.gif',
  23. 'fixtures.finder/subdir/file.txt',
  24. 'fixtures.finder/subdir/subdir2/file.txt',
  25. ], export($finder));
  26. });
  27. test('', function () {
  28. $finder = Finder::findFiles(['*.txt', '*.gif'])->from('fixtures.finder');
  29. Assert::same([
  30. 'fixtures.finder/file.txt',
  31. 'fixtures.finder/images/logo.gif',
  32. 'fixtures.finder/subdir/file.txt',
  33. 'fixtures.finder/subdir/subdir2/file.txt',
  34. ], export($finder));
  35. });
  36. test('* mask', function () {
  37. $finder = Finder::findFiles('*.txt', '*')->in('fixtures.finder/subdir');
  38. Assert::same([
  39. 'fixtures.finder/subdir/file.txt',
  40. 'fixtures.finder/subdir/readme',
  41. ], export($finder));
  42. });
  43. test('*.* mask', function () {
  44. $finder = Finder::findFiles('*.*')->in('fixtures.finder/subdir');
  45. Assert::same([
  46. 'fixtures.finder/subdir/file.txt',
  47. ], export($finder));
  48. });
  49. test('subdir excluding mask', function () {
  50. $finder = Finder::findFiles('*')->exclude('*i*/*')->from('fixtures.finder');
  51. Assert::same([
  52. 'fixtures.finder/file.txt',
  53. ], export($finder));
  54. });
  55. test('subdir mask', function () {
  56. $finder = Finder::findFiles('*/*2/*')->from('fixtures.finder');
  57. Assert::same([
  58. 'fixtures.finder/subdir/subdir2/file.txt',
  59. ], export($finder));
  60. });
  61. test('excluding mask', function () {
  62. $finder = Finder::findFiles('*')->exclude('*i*')->in('fixtures.finder/subdir');
  63. Assert::same([
  64. 'fixtures.finder/subdir/readme',
  65. ], export($finder));
  66. });
  67. test('subdir excluding mask', function () {
  68. $finder = Finder::findFiles('*')->exclude('*i*/*')->from('fixtures.finder');
  69. Assert::same([
  70. 'fixtures.finder/file.txt',
  71. ], export($finder));
  72. });
  73. test('wildcard ?', function () {
  74. $finder = Finder::findFiles('*2*/fi??.*')->from('fixtures.finder');
  75. Assert::same([
  76. 'fixtures.finder/subdir/subdir2/file.txt',
  77. ], export($finder));
  78. });
  79. test('wildcard []', function () {
  80. $finder = Finder::findFiles('*[efd][a-z][!a-r]*')->from('fixtures.finder');
  81. Assert::same([
  82. 'fixtures.finder/images/logo.gif',
  83. ], export($finder));
  84. $finder = Finder::findFiles('[[]x[]]/fil[e].*')->in('fixtures.finder2');
  85. Assert::same([
  86. 'fixtures.finder2/[x]/file.txt',
  87. ], export($finder));
  88. });
  89. test('wildcards [] in mask part of path', function () {
  90. $finder = Finder::findFiles('[x]/fil[e].*')->in('fixtures.finder2');
  91. Assert::same([
  92. 'fixtures.finder2/x/file.txt',
  93. ], export($finder));
  94. $finder = Finder::findFiles('[x]/fil[e].*')->from('fixtures.finder2');
  95. Assert::same([
  96. 'fixtures.finder2/x/file.txt',
  97. ], export($finder));
  98. });
  99. test('[] are not wildcards in path', function () {
  100. $finder = Finder::findFiles('*')->in('fixtures.finder*/[x]');
  101. Assert::same([
  102. 'fixtures.finder2/[x]/file.txt',
  103. ], export($finder));
  104. $finder = Finder::findFiles('*')->from('fixtures.finder*/[x]');
  105. Assert::same([
  106. 'fixtures.finder2/[x]/file.txt',
  107. ], export($finder));
  108. });
  109. test('recursive mask', function () {
  110. $finder = Finder::findFiles('**/f*')->from('fixtures.finder');
  111. Assert::same([
  112. 'fixtures.finder/file.txt',
  113. 'fixtures.finder/subdir/file.txt',
  114. 'fixtures.finder/subdir/subdir2/file.txt',
  115. ], export($finder));
  116. $finder = Finder::findFiles('**/f*')->in('fixtures.finder');
  117. Assert::same([
  118. 'fixtures.finder/file.txt',
  119. ], export($finder));
  120. });
  121. test('anchored', function () {
  122. $finder = Finder::findFiles('./f*')->from('fixtures.finder');
  123. Assert::same([
  124. 'fixtures.finder/file.txt',
  125. ], export($finder));
  126. $finder = Finder::findFiles('./*/f*')->from('fixtures.finder');
  127. Assert::same([
  128. 'fixtures.finder/subdir/file.txt',
  129. ], export($finder));
  130. $finder = Finder::findFiles('./f*')->in('fixtures.finder');
  131. Assert::same([
  132. 'fixtures.finder/./file.txt',
  133. ], export($finder));
  134. });
  135. test('anchored level-up', function () {
  136. // not supported
  137. $finder = Finder::findFiles('../f*')->from('fixtures.finder/subdir');
  138. Assert::same([], export($finder));
  139. $finder = Finder::findFiles('../f*')->in('fixtures.finder/subdir');
  140. Assert::same([
  141. 'fixtures.finder/subdir/../file.txt',
  142. ], export($finder));
  143. });
  144. test('anchored recursive mask', function () {
  145. $finder = Finder::findFiles('./**/f*')->from('fixtures.finder');
  146. Assert::same([
  147. 'fixtures.finder/file.txt',
  148. 'fixtures.finder/subdir/file.txt',
  149. 'fixtures.finder/subdir/subdir2/file.txt',
  150. ], export($finder));
  151. });
  152. test('leading recursive mask', function () {
  153. $finder = Finder::find('s*/**')->from('fixtures.finder');
  154. Assert::same([
  155. 'fixtures.finder/subdir/file.txt',
  156. 'fixtures.finder/subdir/readme',
  157. 'fixtures.finder/subdir/subdir2',
  158. 'fixtures.finder/subdir/subdir2/file.txt',
  159. ], export($finder));
  160. });
  161. test('mask in path', function () {
  162. $finder = Finder::findFiles('f*')->in('*.finder');
  163. Assert::same([
  164. 'fixtures.finder/file.txt',
  165. ], export($finder));
  166. $finder = Finder::findFiles('f*')->from('*.finder');
  167. Assert::same([
  168. 'fixtures.finder/file.txt',
  169. 'fixtures.finder/subdir/file.txt',
  170. 'fixtures.finder/subdir/subdir2/file.txt',
  171. ], export($finder));
  172. });
  173. test('recursive mask in path', function () {
  174. $finder = Finder::findFiles('f*')->in('**/fixtures.finder');
  175. Assert::same([
  176. 'fixtures.finder/file.txt',
  177. ], export($finder));
  178. $finder = Finder::findFiles('f*')->from('**/fixtures.finder');
  179. Assert::same([
  180. 'fixtures.finder/file.txt',
  181. 'fixtures.finder/subdir/file.txt',
  182. 'fixtures.finder/subdir/subdir2/file.txt',
  183. ], export($finder));
  184. });