FileLintingIteratorTest.php 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4. * This file is part of PHP CS Fixer.
  5. *
  6. * (c) Fabien Potencier <fabien@symfony.com>
  7. * Dariusz Rumiński <dariusz.ruminski@gmail.com>
  8. *
  9. * This source file is subject to the MIT license that is bundled
  10. * with this source code in the file LICENSE.
  11. */
  12. namespace PhpCsFixer\Tests\Runner;
  13. use PhpCsFixer\Linter\LinterInterface;
  14. use PhpCsFixer\Linter\LintingResultInterface;
  15. use PhpCsFixer\Runner\FileLintingIterator;
  16. use PhpCsFixer\Tests\TestCase;
  17. /**
  18. * @author SpacePossum
  19. *
  20. * @internal
  21. *
  22. * @covers \PhpCsFixer\Runner\FileLintingIterator
  23. */
  24. final class FileLintingIteratorTest extends TestCase
  25. {
  26. public function testFileLintingIteratorEmpty(): void
  27. {
  28. $fileLintingIteratorProphecy = $this->prophesize(LinterInterface::class);
  29. $iterator = new \ArrayIterator([]);
  30. $fileLintingIterator = new FileLintingIterator(
  31. $iterator,
  32. $fileLintingIteratorProphecy->reveal()
  33. );
  34. static::assertNull($fileLintingIterator->current());
  35. static::assertNull($fileLintingIterator->currentLintingResult());
  36. static::assertSame($iterator, $fileLintingIterator->getInnerIterator());
  37. static::assertFalse($fileLintingIterator->valid());
  38. }
  39. public function testFileLintingIterator(): void
  40. {
  41. $file = new \SplFileInfo(__FILE__);
  42. $fileLintingIteratorProphecy = $this->prophesize(LinterInterface::class);
  43. $lintingResultInterfaceProphecy = $this->prophesize(LintingResultInterface::class)->reveal();
  44. $fileLintingIteratorProphecy->lintFile($file)->willReturn($lintingResultInterfaceProphecy);
  45. $iterator = new \ArrayIterator([$file]);
  46. $fileLintingIterator = new FileLintingIterator(
  47. $iterator,
  48. $fileLintingIteratorProphecy->reveal()
  49. );
  50. // test when not touched current is null
  51. static::assertNull($fileLintingIterator->currentLintingResult());
  52. // test iterating
  53. $this->fileLintingIteratorIterationTest($fileLintingIterator, $file, $lintingResultInterfaceProphecy);
  54. // rewind and test again
  55. $fileLintingIterator->rewind();
  56. $this->fileLintingIteratorIterationTest($fileLintingIterator, $file, $lintingResultInterfaceProphecy);
  57. }
  58. private function fileLintingIteratorIterationTest(
  59. FileLintingIterator $fileLintingIterator,
  60. \SplFileInfo $file,
  61. LintingResultInterface $lintingResultInterface
  62. ): void {
  63. $iterations = 0;
  64. foreach ($fileLintingIterator as $lintedFile) {
  65. static::assertSame($file, $lintedFile);
  66. static::assertSame($lintingResultInterface, $fileLintingIterator->currentLintingResult());
  67. ++$iterations;
  68. }
  69. static::assertSame(1, $iterations);
  70. $fileLintingIterator->next();
  71. static::assertNull($fileLintingIterator->currentLintingResult());
  72. }
  73. }