FileFilterIteratorTest.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. <?php
  2. /*
  3. * This file is part of PHP CS Fixer.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. * Dariusz Rumiński <dariusz.ruminski@gmail.com>
  7. *
  8. * This source file is subject to the MIT license that is bundled
  9. * with this source code in the file LICENSE.
  10. */
  11. namespace PhpCsFixer\Tests\Runner;
  12. use PhpCsFixer\FixerFileProcessedEvent;
  13. use PhpCsFixer\Runner\FileFilterIterator;
  14. use PHPUnit\Framework\TestCase;
  15. use Symfony\Component\EventDispatcher\EventDispatcher;
  16. /**
  17. * @author SpacePossum
  18. *
  19. * @internal
  20. *
  21. * @covers \PhpCsFixer\Runner\FileFilterIterator
  22. */
  23. final class FileFilterIteratorTest extends TestCase
  24. {
  25. /**
  26. * @param int $repeat
  27. *
  28. * @testWith [1]
  29. * [2]
  30. * [3]
  31. */
  32. public function testAccept($repeat)
  33. {
  34. $file = __FILE__;
  35. $content = file_get_contents($file);
  36. $events = array();
  37. $eventDispatcher = new EventDispatcher();
  38. $eventDispatcher->addListener(
  39. FixerFileProcessedEvent::NAME,
  40. function ($event) use (&$events) {
  41. $events[] = $event;
  42. }
  43. );
  44. $cache = $this->prophesize('PhpCsFixer\Cache\CacheManagerInterface');
  45. $cache->needFixing($file, $content)->willReturn(true);
  46. $fileInfo = new \SplFileInfo($file);
  47. $filter = new FileFilterIterator(
  48. new \ArrayIterator(array_fill(0, $repeat, $fileInfo)),
  49. $eventDispatcher,
  50. $cache->reveal()
  51. );
  52. $this->assertCount(0, $events);
  53. $files = iterator_to_array($filter);
  54. $this->assertCount(1, $files);
  55. $this->assertSame($fileInfo, reset($files));
  56. }
  57. public function testEmitSkipEventWhenCacheNeedFixingFalse()
  58. {
  59. $file = __FILE__;
  60. $content = file_get_contents($file);
  61. $events = array();
  62. $eventDispatcher = new EventDispatcher();
  63. $eventDispatcher->addListener(
  64. FixerFileProcessedEvent::NAME,
  65. function ($event) use (&$events) {
  66. $events[] = $event;
  67. }
  68. );
  69. $cache = $this->prophesize('PhpCsFixer\Cache\CacheManagerInterface');
  70. $cache->needFixing($file, $content)->willReturn(false);
  71. $filter = new FileFilterIterator(
  72. new \ArrayIterator(array(new \SplFileInfo($file))),
  73. $eventDispatcher,
  74. $cache->reveal()
  75. );
  76. $this->assertCount(0, $filter);
  77. $this->assertCount(1, $events);
  78. /** @var FixerFileProcessedEvent $event */
  79. $event = reset($events);
  80. $this->assertInstanceOf('PhpCsFixer\FixerFileProcessedEvent', $event);
  81. $this->assertSame(FixerFileProcessedEvent::STATUS_SKIPPED, $event->getStatus());
  82. }
  83. public function testIgnoreEmptyFile()
  84. {
  85. $file = __DIR__.'/../Fixtures/empty.php';
  86. $content = file_get_contents($file);
  87. $events = array();
  88. $eventDispatcher = new EventDispatcher();
  89. $eventDispatcher->addListener(
  90. FixerFileProcessedEvent::NAME,
  91. function ($event) use (&$events) {
  92. $events[] = $event;
  93. }
  94. );
  95. $cache = $this->prophesize('PhpCsFixer\Cache\CacheManagerInterface');
  96. $cache->needFixing($file, $content)->willReturn(true);
  97. $filter = new FileFilterIterator(
  98. new \ArrayIterator(array(new \SplFileInfo($file))),
  99. $eventDispatcher,
  100. $cache->reveal()
  101. );
  102. $this->assertCount(0, $filter);
  103. $this->assertCount(1, $events);
  104. /** @var FixerFileProcessedEvent $event */
  105. $event = reset($events);
  106. $this->assertInstanceOf('PhpCsFixer\FixerFileProcessedEvent', $event);
  107. $this->assertSame(FixerFileProcessedEvent::STATUS_SKIPPED, $event->getStatus());
  108. }
  109. public function testIgnore()
  110. {
  111. $eventDispatcher = new EventDispatcher();
  112. $eventDispatcher->addListener(
  113. FixerFileProcessedEvent::NAME,
  114. function () {
  115. throw new \Exception('No event expected.');
  116. }
  117. );
  118. $filter = new FileFilterIterator(
  119. new \ArrayIterator(array(
  120. new \SplFileInfo(__DIR__),
  121. new \SplFileInfo('__INVALID__'),
  122. )),
  123. $eventDispatcher,
  124. $this->prophesize('PhpCsFixer\Cache\CacheManagerInterface')->reveal()
  125. );
  126. $this->assertCount(0, $filter);
  127. }
  128. public function testWithoutDispatcher()
  129. {
  130. $file = __FILE__;
  131. $content = file_get_contents($file);
  132. $cache = $this->prophesize('PhpCsFixer\Cache\CacheManagerInterface');
  133. $cache->needFixing($file, $content)->willReturn(false);
  134. $filter = new FileFilterIterator(
  135. new \ArrayIterator(array(new \SplFileInfo($file))),
  136. null,
  137. $cache->reveal()
  138. );
  139. $this->assertCount(0, $filter);
  140. }
  141. public function testInvalidIterator()
  142. {
  143. $filter = new FileFilterIterator(
  144. new \ArrayIterator(array(__FILE__)),
  145. null,
  146. $this->prophesize('PhpCsFixer\Cache\CacheManagerInterface')->reveal()
  147. );
  148. $this->setExpectedExceptionRegExp(
  149. 'RuntimeException',
  150. '#^Expected instance of "\\\SplFileInfo", got "string"\.$#'
  151. );
  152. iterator_to_array($filter);
  153. }
  154. }