Finder.sort.phpt 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. /**
  3. * Test: Nette\Utils\Finder sorting.
  4. */
  5. declare(strict_types=1);
  6. use Nette\Utils\FileInfo;
  7. use Nette\Utils\Finder;
  8. use Tester\Assert;
  9. require __DIR__ . '/../bootstrap.php';
  10. function export($iterator)
  11. {
  12. $arr = [];
  13. foreach ($iterator as $key => $value) {
  14. $arr[] = strtr($key, '\\', '/');
  15. }
  16. return $arr;
  17. }
  18. test('byName', function () {
  19. $finder = Finder::find('*')
  20. ->from('fixtures.finder')
  21. ->sortByName();
  22. Assert::same([
  23. 'fixtures.finder/file.txt',
  24. 'fixtures.finder/images',
  25. 'fixtures.finder/images/logo.gif',
  26. 'fixtures.finder/subdir',
  27. 'fixtures.finder/subdir/file.txt',
  28. 'fixtures.finder/subdir/readme',
  29. 'fixtures.finder/subdir/subdir2',
  30. 'fixtures.finder/subdir/subdir2/file.txt',
  31. ], export($finder));
  32. $finder->childFirst();
  33. Assert::same([
  34. 'fixtures.finder/file.txt',
  35. 'fixtures.finder/images/logo.gif',
  36. 'fixtures.finder/images',
  37. 'fixtures.finder/subdir/file.txt',
  38. 'fixtures.finder/subdir/readme',
  39. 'fixtures.finder/subdir/subdir2/file.txt',
  40. 'fixtures.finder/subdir/subdir2',
  41. 'fixtures.finder/subdir',
  42. ], export($finder));
  43. });
  44. test('user func', function () {
  45. $finder = Finder::findFiles('*')
  46. ->from('fixtures.finder')
  47. ->sortBy(fn(FileInfo $a, FileInfo $b) => substr((string) $a, -1) <=> substr((string) $b, -1));
  48. Assert::same([
  49. 'fixtures.finder/subdir/subdir2/file.txt',
  50. 'fixtures.finder/subdir/readme',
  51. 'fixtures.finder/subdir/file.txt',
  52. 'fixtures.finder/images/logo.gif',
  53. 'fixtures.finder/file.txt',
  54. ], export($finder));
  55. });