FileSynchronizerTest.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace Test\Michel\FileSystem;
  3. use FilesystemIterator;
  4. use Michel\FileSystem\Tools\FileSynchronizer;
  5. use Michel\UniTester\TestCase;
  6. use RecursiveDirectoryIterator;
  7. use RecursiveIteratorIterator;
  8. class FileSynchronizerTest extends TestCase
  9. {
  10. protected function setUp(): void
  11. {
  12. // TODO: Implement setUp() method.
  13. }
  14. protected function tearDown(): void
  15. {
  16. // TODO: Implement tearDown() method.
  17. }
  18. protected function execute(): void
  19. {
  20. $this->testSync();
  21. }
  22. public function testSync()
  23. {
  24. $targetDir = __DIR__ . '/target';
  25. if (!is_dir($targetDir)) {
  26. mkdir($targetDir, 0777, true);
  27. }
  28. $sync = new FileSynchronizer(__DIR__ . '/resources', $targetDir, function (array $info) {
  29. $this->assertArrayHasKey('action', $info);
  30. $this->assertArrayHasKey('source', $info);
  31. $this->assertArrayHasKey('target', $info);
  32. });
  33. $sync->sync(true);
  34. $objects = new RecursiveIteratorIterator(
  35. new RecursiveDirectoryIterator($targetDir, FilesystemIterator::SKIP_DOTS),
  36. RecursiveIteratorIterator::CHILD_FIRST
  37. );
  38. $this->assertCount(8, iterator_to_array($objects));
  39. foreach ($objects as $object) {
  40. if ($object->isFile()) {
  41. unlink($object->getPathname());
  42. }
  43. elseif ($object->isDir()) {
  44. rmdir($object->getPathname());
  45. }
  46. }
  47. rmdir($targetDir);
  48. }
  49. }