UseArrowFunctionsFixerTest.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  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\Fixer\FunctionNotation;
  12. use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
  13. /**
  14. * @author Gregor Harlan
  15. *
  16. * @internal
  17. *
  18. * @covers \PhpCsFixer\Fixer\FunctionNotation\UseArrowFunctionsFixer
  19. */
  20. final class UseArrowFunctionsFixerTest extends AbstractFixerTestCase
  21. {
  22. /**
  23. * @requires PHP <7.4
  24. */
  25. public function testDoNotFix()
  26. {
  27. $this->doTest('<?php foo(function () { return 1; });');
  28. }
  29. /**
  30. * @param string $expected
  31. * @param null|string $input
  32. *
  33. * @dataProvider provideFixCases
  34. * @requires PHP 7.4
  35. */
  36. public function testFix($expected, $input = null)
  37. {
  38. $this->doTest($expected, $input);
  39. }
  40. public function provideFixCases()
  41. {
  42. return [
  43. [
  44. '<?php foo(function () use ($a, &$b) { return 1; });',
  45. ],
  46. [
  47. '<?php foo(function () { bar(); return 1; });',
  48. ],
  49. [
  50. '<?php foo(fn()=> 1);',
  51. '<?php foo(function(){return 1;});',
  52. ],
  53. [
  54. '<?php foo(fn()=>$a);',
  55. '<?php foo(function()use($a){return$a;});',
  56. ],
  57. [
  58. '<?php foo( fn () => 1 );',
  59. '<?php foo( function () { return 1; } );',
  60. ],
  61. [
  62. '<?php $func = static fn &(array &$a, string ...$b): ?int => 1;',
  63. '<?php $func = static function &(array &$a, string ...$b): ?int { return 1; };',
  64. ],
  65. [
  66. <<<'EXPECTED'
  67. <?php
  68. foo(1, fn (int $a, Foo $b) => bar($a, $c), 2);
  69. EXPECTED
  70. ,
  71. <<<'INPUT'
  72. <?php
  73. foo(1, function (int $a, Foo $b) use ($c, $d) {
  74. return bar($a, $c);
  75. }, 2);
  76. INPUT
  77. ],
  78. [
  79. <<<'EXPECTED'
  80. <?php
  81. foo(fn () => 1);
  82. EXPECTED
  83. ,
  84. <<<'INPUT'
  85. <?php
  86. foo(function () {
  87. return 1;
  88. });
  89. INPUT
  90. ],
  91. [
  92. <<<'EXPECTED'
  93. <?php
  94. foo(fn ($a) => fn () => $a + 1);
  95. EXPECTED
  96. ,
  97. <<<'INPUT'
  98. <?php
  99. foo(function ($a) {
  100. return function () use ($a) {
  101. return $a + 1;
  102. };
  103. });
  104. INPUT
  105. ],
  106. [
  107. <<<'EXPECTED'
  108. <?php
  109. foo(function () {// comment
  110. return 1;
  111. });
  112. EXPECTED
  113. ],
  114. [
  115. <<<'EXPECTED'
  116. <?php
  117. foo(function () {
  118. // comment
  119. return 1;
  120. });
  121. EXPECTED
  122. ],
  123. [
  124. <<<'EXPECTED'
  125. <?php
  126. foo(function () {
  127. return 1; // comment
  128. });
  129. EXPECTED
  130. ],
  131. [
  132. <<<'EXPECTED'
  133. <?php
  134. foo(function () {
  135. return 1;
  136. // comment
  137. });
  138. EXPECTED
  139. ],
  140. [
  141. <<<'EXPECTED'
  142. <?php
  143. foo(function () {
  144. return
  145. 1;
  146. });
  147. EXPECTED
  148. ],
  149. [
  150. <<<'EXPECTED'
  151. <?php
  152. $func = function (
  153. $a,
  154. $b
  155. ) {
  156. return 1;
  157. };
  158. EXPECTED
  159. ],
  160. [
  161. <<<'EXPECTED'
  162. <?php
  163. $func = function () {
  164. return function () {
  165. foo();
  166. };
  167. };
  168. EXPECTED
  169. ],
  170. ];
  171. }
  172. }