FunctionTypehintSpaceFixerTest.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  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\Fixer\FunctionNotation;
  13. use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
  14. /**
  15. * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
  16. *
  17. * @internal
  18. *
  19. * @covers \PhpCsFixer\Fixer\FunctionNotation\FunctionTypehintSpaceFixer
  20. */
  21. final class FunctionTypehintSpaceFixerTest extends AbstractFixerTestCase
  22. {
  23. /**
  24. * @dataProvider provideFixCases
  25. */
  26. public function testFix(string $expected, ?string $input = null): void
  27. {
  28. $this->doTest($expected, $input);
  29. }
  30. public function provideFixCases(): array
  31. {
  32. return [
  33. [
  34. '<?php function foo($param) {}',
  35. ],
  36. [
  37. '<?php function foo($param1,$param2) {}',
  38. ],
  39. [
  40. '<?php function foo(&$param) {}',
  41. ],
  42. [
  43. '<?php function foo(& $param) {}',
  44. ],
  45. [
  46. '<?php function foo(/**int*/$param) {}',
  47. ],
  48. [
  49. '<?php function foo(bool /**bla bla*/ $param) {}',
  50. ],
  51. [
  52. '<?php function foo(bool /**bla bla*/$param) {}',
  53. '<?php function foo(bool/**bla bla*/$param) {}',
  54. ],
  55. [
  56. '<?php function foo(bool /**bla bla*/$param) {}',
  57. '<?php function foo(bool /**bla bla*/$param) {}',
  58. ],
  59. [
  60. '<?php function foo(callable $param) {}',
  61. '<?php function foo(callable$param) {}',
  62. ],
  63. [
  64. '<?php function foo(callable $param) {}',
  65. '<?php function foo(callable $param) {}',
  66. ],
  67. [
  68. '<?php function foo(array &$param) {}',
  69. '<?php function foo(array&$param) {}',
  70. ],
  71. [
  72. '<?php function foo(array &$param) {}',
  73. '<?php function foo(array &$param) {}',
  74. ],
  75. [
  76. '<?php function foo(array & $param) {}',
  77. '<?php function foo(array& $param) {}',
  78. ],
  79. [
  80. '<?php function foo(array & $param) {}',
  81. '<?php function foo(array & $param) {}',
  82. ],
  83. [
  84. '<?php function foo(Bar $param) {}',
  85. '<?php function foo(Bar$param) {}',
  86. ],
  87. [
  88. '<?php function foo(Bar $param) {}',
  89. '<?php function foo(Bar $param) {}',
  90. ],
  91. [
  92. '<?php function foo(Bar\Baz $param) {}',
  93. '<?php function foo(Bar\Baz$param) {}',
  94. ],
  95. [
  96. '<?php function foo(Bar\Baz $param) {}',
  97. '<?php function foo(Bar\Baz $param) {}',
  98. ],
  99. [
  100. '<?php function foo(Bar\Baz &$param) {}',
  101. '<?php function foo(Bar\Baz&$param) {}',
  102. ],
  103. [
  104. '<?php function foo(Bar\Baz &$param) {}',
  105. '<?php function foo(Bar\Baz &$param) {}',
  106. ],
  107. [
  108. '<?php function foo(Bar\Baz & $param) {}',
  109. '<?php function foo(Bar\Baz& $param) {}',
  110. ],
  111. [
  112. '<?php function foo(Bar\Baz & $param) {}',
  113. '<?php function foo(Bar\Baz & $param) {}',
  114. ],
  115. [
  116. '<?php $foo = function(Bar\Baz $param) {};',
  117. '<?php $foo = function(Bar\Baz$param) {};',
  118. ],
  119. [
  120. '<?php $foo = function(Bar\Baz $param) {};',
  121. '<?php $foo = function(Bar\Baz $param) {};',
  122. ],
  123. [
  124. '<?php $foo = function(Bar\Baz &$param) {};',
  125. '<?php $foo = function(Bar\Baz&$param) {};',
  126. ],
  127. [
  128. '<?php $foo = function(Bar\Baz &$param) {};',
  129. '<?php $foo = function(Bar\Baz &$param) {};',
  130. ],
  131. [
  132. '<?php $foo = function(Bar\Baz & $param) {};',
  133. '<?php $foo = function(Bar\Baz& $param) {};',
  134. ],
  135. [
  136. '<?php $foo = function(Bar\Baz & $param) {};',
  137. '<?php $foo = function(Bar\Baz & $param) {};',
  138. ],
  139. [
  140. '<?php class Test { public function foo(Bar\Baz $param) {} }',
  141. '<?php class Test { public function foo(Bar\Baz$param) {} }',
  142. ],
  143. [
  144. '<?php class Test { public function foo(Bar\Baz $param) {} }',
  145. '<?php class Test { public function foo(Bar\Baz $param) {} }',
  146. ],
  147. [
  148. '<?php $foo = function(array $a,
  149. array $b, array $c, array $d) {};',
  150. '<?php $foo = function(array $a,
  151. array$b, array $c, array
  152. $d) {};',
  153. ],
  154. [
  155. '<?php $foo = function(
  156. array $a,
  157. $b
  158. ) {};',
  159. ],
  160. [
  161. '<?php $foo = function(
  162. $a,
  163. array $b
  164. ) {};',
  165. ],
  166. [
  167. '<?php function foo(...$param) {}',
  168. ],
  169. [
  170. '<?php function foo(&...$param) {}',
  171. ],
  172. [
  173. '<?php function foo(array ...$param) {}',
  174. '<?php function foo(array...$param) {}',
  175. ],
  176. [
  177. '<?php function foo(array & ...$param) {}',
  178. '<?php function foo(array& ...$param) {}',
  179. ],
  180. ['<?php use function some\test\{fn_a, fn_b, fn_c};'],
  181. ['<?php use function some\test\{fn_a, fn_b, fn_c} ?>'],
  182. ];
  183. }
  184. /**
  185. * @dataProvider provideFix74Cases
  186. * @requires PHP 7.4
  187. */
  188. public function testFix74(string $expected, ?string $input = null): void
  189. {
  190. $this->doTest($expected, $input);
  191. }
  192. public function provideFix74Cases(): array
  193. {
  194. return [
  195. [
  196. '<?php $foo = fn(Bar\Baz $param) => null;',
  197. '<?php $foo = fn(Bar\Baz$param) => null;',
  198. ],
  199. [
  200. '<?php $foo = fn(Bar\Baz $param) => null;',
  201. '<?php $foo = fn(Bar\Baz $param) => null;',
  202. ],
  203. [
  204. '<?php $foo = fn(Bar\Baz &$param) => null;',
  205. '<?php $foo = fn(Bar\Baz&$param) => null;',
  206. ],
  207. [
  208. '<?php $foo = fn(Bar\Baz &$param) => null;',
  209. '<?php $foo = fn(Bar\Baz &$param) => null;',
  210. ],
  211. [
  212. '<?php $foo = fn(Bar\Baz & $param) => null;',
  213. '<?php $foo = fn(Bar\Baz& $param) => null;',
  214. ],
  215. [
  216. '<?php $foo = fn(Bar\Baz & $param) => null;',
  217. '<?php $foo = fn(Bar\Baz & $param) => null;',
  218. ],
  219. [
  220. '<?php $foo = fn(array $a,
  221. array $b, array $c, array $d) => null;',
  222. '<?php $foo = fn(array $a,
  223. array$b, array $c, array
  224. $d) => null;',
  225. ],
  226. [
  227. '<?php $foo = fn(
  228. array $a,
  229. $b
  230. ) => null;',
  231. ],
  232. [
  233. '<?php $foo = fn(
  234. $a,
  235. array $b
  236. ) => null;',
  237. ],
  238. ];
  239. }
  240. /**
  241. * @dataProvider provideFix80Cases
  242. * @requires PHP 8.0
  243. */
  244. public function testFix80(string $expected, string $input): void
  245. {
  246. $this->doTest($expected, $input);
  247. }
  248. public function provideFix80Cases(): \Generator
  249. {
  250. yield [
  251. '<?php function foo(mixed $a){}',
  252. '<?php function foo(mixed$a){}',
  253. ];
  254. }
  255. }