VoidReturnFixerTest.php 7.7 KB

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