VoidReturnFixerTest.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  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 Mark Nielsen
  15. *
  16. * @internal
  17. *
  18. * @requires PHP 7.1
  19. * @covers \PhpCsFixer\Fixer\FunctionNotation\VoidReturnFixer
  20. */
  21. final class VoidReturnFixerTest extends AbstractFixerTestCase
  22. {
  23. /**
  24. * @dataProvider provideFixCases
  25. *
  26. * @param string $expected
  27. * @param null|string $input
  28. */
  29. public function testFix($expected, $input = null)
  30. {
  31. $this->doTest($expected, $input);
  32. }
  33. public function provideFixCases()
  34. {
  35. return [
  36. ['<?php class Test { public function __construct() {} }'],
  37. ['<?php class Test { public function __destruct() {} }'],
  38. ['<?php class Test { public function __clone() {} }'],
  39. ['<?php function foo($param) { return $param; }'],
  40. ['<?php function foo($param) { return null; }'],
  41. ['<?php function foo($param) { yield; }'],
  42. ['<?php function foo($param) { yield $param; }'],
  43. ['<?php function foo($param) { yield from test(); }'],
  44. ['<?php function foo($param): Void {}'],
  45. ['<?php interface Test { public function foo($param); }'],
  46. ['<?php function foo($param) { return function($a) use ($param): string {}; }'],
  47. ['<?php abstract class Test { abstract public function foo($param); }'],
  48. ['<?php
  49. /**
  50. * @return array
  51. */
  52. function foo($param) {}
  53. '],
  54. ['<?php
  55. interface Test {
  56. /**
  57. * @return array
  58. */
  59. public function foo($param);
  60. }
  61. '],
  62. [
  63. '<?php function foo($param): void { return; }',
  64. '<?php function foo($param) { return; }',
  65. ],
  66. [
  67. '<?php function foo($param): void {}',
  68. '<?php function foo($param) {}',
  69. ],
  70. [
  71. '<?php class Test { public function foo($param): void { return; } }',
  72. '<?php class Test { public function foo($param) { return; } }',
  73. ],
  74. [
  75. '<?php class Test { public function foo($param): void {} }',
  76. '<?php class Test { public function foo($param) {} }',
  77. ],
  78. [
  79. '<?php trait Test { public function foo($param): void { return; } }',
  80. '<?php trait Test { public function foo($param) { return; } }',
  81. ],
  82. [
  83. '<?php trait Test { public function foo($param): void {} }',
  84. '<?php trait Test { public function foo($param) {} }',
  85. ],
  86. [
  87. '<?php $arr = []; usort($arr, function ($a, $b): void {});',
  88. '<?php $arr = []; usort($arr, function ($a, $b) {});',
  89. ],
  90. [
  91. '<?php $arr = []; $param = 1; usort($arr, function ($a, $b) use ($param): void {});',
  92. '<?php $arr = []; $param = 1; usort($arr, function ($a, $b) use ($param) {});',
  93. ],
  94. [
  95. '<?php function foo($param) { return function($a) use ($param): void {}; }',
  96. '<?php function foo($param) { return function($a) use ($param) {}; }',
  97. ],
  98. [
  99. '<?php function foo($param): void { $arr = []; usort($arr, function ($a, $b) use ($param): void {}); }',
  100. '<?php function foo($param) { $arr = []; usort($arr, function ($a, $b) use ($param) {}); }',
  101. ],
  102. [
  103. '<?php function foo() { $arr = []; return usort($arr, new class { public function __invoke($a, $b): void {} }); }',
  104. '<?php function foo() { $arr = []; return usort($arr, new class { public function __invoke($a, $b) {} }); }',
  105. ],
  106. [
  107. '<?php function foo(): void { $arr = []; usort($arr, new class { public function __invoke($a, $b): void {} }); }',
  108. '<?php function foo() { $arr = []; usort($arr, new class { public function __invoke($a, $b) {} }); }',
  109. ],
  110. [
  111. '<?php
  112. function foo(): void {
  113. $a = function (): void {};
  114. }',
  115. '<?php
  116. function foo() {
  117. $a = function () {};
  118. }',
  119. ],
  120. [
  121. '<?php
  122. function foo(): void {
  123. (function (): void {
  124. return;
  125. })();
  126. }',
  127. '<?php
  128. function foo() {
  129. (function () {
  130. return;
  131. })();
  132. }',
  133. ],
  134. [
  135. '<?php
  136. function foo(): void {
  137. (function () {
  138. return 1;
  139. })();
  140. }',
  141. '<?php
  142. function foo() {
  143. (function () {
  144. return 1;
  145. })();
  146. }',
  147. ],
  148. [
  149. '<?php
  150. function foo(): void {
  151. $b = new class {
  152. public function b1(): void {}
  153. public function b2() { return 2; }
  154. };
  155. }',
  156. '<?php
  157. function foo() {
  158. $b = new class {
  159. public function b1() {}
  160. public function b2() { return 2; }
  161. };
  162. }',
  163. ],
  164. [
  165. '<?php
  166. /**
  167. * @return void
  168. */
  169. function foo($param): void {}',
  170. '<?php
  171. /**
  172. * @return void
  173. */
  174. function foo($param) {}',
  175. ],
  176. [
  177. '<?php
  178. interface Test {
  179. /**
  180. * @return void
  181. */
  182. public function foo($param): void;
  183. }',
  184. '<?php
  185. interface Test {
  186. /**
  187. * @return void
  188. */
  189. public function foo($param);
  190. }',
  191. ],
  192. [
  193. '<?php
  194. abstract class Test {
  195. /**
  196. * @return void
  197. */
  198. abstract protected function foo($param): void;
  199. }',
  200. '<?php
  201. abstract class Test {
  202. /**
  203. * @return void
  204. */
  205. abstract protected function foo($param);
  206. }',
  207. ],
  208. ];
  209. }
  210. /**
  211. * @dataProvider provideFixPhp74Cases
  212. * @requires PHP 7.4
  213. *
  214. * @param string $expected
  215. * @param null|string $input
  216. */
  217. public function testFixPhp74($expected, $input = null)
  218. {
  219. $this->doTest($expected, $input);
  220. }
  221. public function provideFixPhp74Cases()
  222. {
  223. return [
  224. [
  225. '<?php fn($a) => null;',
  226. ],
  227. [
  228. '<?php fn($a) => 1;',
  229. ],
  230. [
  231. '<?php fn($a) => var_dump($a);',
  232. ],
  233. ];
  234. }
  235. }