FunctionTypehintSpaceFixerTest.php 8.6 KB

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