ProcessLinterProcessBuilderTest.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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\Linter;
  13. use PhpCsFixer\Linter\ProcessLinterProcessBuilder;
  14. use PhpCsFixer\Tests\TestCase;
  15. /**
  16. * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
  17. *
  18. * @internal
  19. *
  20. * @covers \PhpCsFixer\Linter\ProcessLinterProcessBuilder
  21. */
  22. final class ProcessLinterProcessBuilderTest extends TestCase
  23. {
  24. /**
  25. * @dataProvider providePrepareCommandOnPhpOnLinuxOrMacCases
  26. *
  27. * @requires OS Linux|Darwin
  28. */
  29. public function testPrepareCommandOnPhpOnLinuxOrMac(string $executable, string $file, string $expected): void
  30. {
  31. $this->testPrepareCommand($executable, $file, $expected);
  32. }
  33. /**
  34. * @return iterable<array{string, string, string}>
  35. */
  36. public static function providePrepareCommandOnPhpOnLinuxOrMacCases(): iterable
  37. {
  38. yield 'Linux-like' => ['php', 'foo.php', "'php' '-l' 'foo.php'"];
  39. yield 'Windows-like' => ['C:\Program Files\php\php.exe', 'foo bar\baz.php', "'C:\\Program Files\\php\\php.exe' '-l' 'foo bar\\baz.php'"];
  40. }
  41. /**
  42. * @dataProvider providePrepareCommandOnPhpOnWindowsCases
  43. *
  44. * @requires OS ^Win
  45. */
  46. public function testPrepareCommandOnPhpOnWindows(string $executable, string $file, string $expected): void
  47. {
  48. $this->testPrepareCommand($executable, $file, $expected);
  49. }
  50. /**
  51. * @return iterable<array{string, string, string}>
  52. */
  53. public static function providePrepareCommandOnPhpOnWindowsCases(): iterable
  54. {
  55. yield 'Linux-like' => ['php', 'foo.php', 'php -l foo.php'];
  56. yield 'Windows-like' => ['C:\Program Files\php\php.exe', 'foo bar\baz.php', '"C:\Program Files\php\php.exe" -l "foo bar\baz.php"'];
  57. }
  58. private function testPrepareCommand(string $executable, string $file, string $expected): void
  59. {
  60. $builder = new ProcessLinterProcessBuilder($executable);
  61. self::assertSame(
  62. $expected,
  63. $builder->build($file)->getCommandLine()
  64. );
  65. }
  66. }