SwitchCaseSpaceFixerTest.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451
  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\ControlStructure;
  13. use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
  14. /**
  15. * @author Sullivan Senechal <soullivaneuh@gmail.com>
  16. *
  17. * @internal
  18. *
  19. * @covers \PhpCsFixer\Fixer\ControlStructure\SwitchCaseSpaceFixer
  20. */
  21. final class SwitchCaseSpaceFixerTest 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 static function provideFixCases(): iterable
  31. {
  32. yield [
  33. '<?php
  34. switch (1) {
  35. case (1 #
  36. )#
  37. :
  38. echo 1;
  39. }
  40. ?>
  41. ',
  42. ];
  43. yield [
  44. '<?php
  45. switch (1) {
  46. case 1 #
  47. : echo 1;
  48. }
  49. ?>
  50. ',
  51. ];
  52. yield [
  53. '<?php
  54. switch ($a) {
  55. case 42:
  56. break;
  57. }
  58. ',
  59. ];
  60. yield [
  61. '<?php
  62. switch ($a) {
  63. case false:
  64. break;
  65. }
  66. ',
  67. ];
  68. yield [
  69. '<?php
  70. switch ($a) {
  71. case false:
  72. break;
  73. default:
  74. }
  75. ',
  76. ];
  77. yield [
  78. '<?php
  79. switch ($a) {
  80. case "prod":
  81. break;
  82. }
  83. ',
  84. '<?php
  85. switch ($a) {
  86. case "prod" :
  87. break;
  88. }
  89. ',
  90. ];
  91. yield [
  92. '<?php
  93. switch ($a) {
  94. case "prod":
  95. break;
  96. }
  97. ',
  98. '<?php
  99. switch ($a) {
  100. case "prod" :
  101. break;
  102. }
  103. ',
  104. ];
  105. yield [
  106. '<?php
  107. switch ($a) {
  108. case 42:
  109. break;
  110. }
  111. ',
  112. '<?php
  113. switch ($a) {
  114. case 42 :
  115. break;
  116. }
  117. ',
  118. ];
  119. yield [
  120. '<?php
  121. switch ($a) {
  122. case false:
  123. break;
  124. }
  125. ',
  126. '<?php
  127. switch ($a) {
  128. case false :
  129. break;
  130. }
  131. ',
  132. ];
  133. yield [
  134. '<?php
  135. switch ($a) {
  136. case false:
  137. break;
  138. default:
  139. }
  140. ',
  141. '<?php
  142. switch ($a) {
  143. case false :
  144. break;
  145. default :
  146. }
  147. ',
  148. ];
  149. yield [
  150. '<?php
  151. switch ($a) {
  152. case 42:
  153. break;
  154. }
  155. ',
  156. '<?php
  157. switch ($a) {
  158. case 42 :
  159. break;
  160. }
  161. ',
  162. ];
  163. yield [
  164. '<?php
  165. switch ($a) {
  166. case $b ? "c" : "d":
  167. break;
  168. }
  169. ',
  170. '<?php
  171. switch ($a) {
  172. case $b ? "c" : "d" :
  173. break;
  174. }
  175. ',
  176. ];
  177. yield [
  178. '<?php
  179. switch ($a) {
  180. case $b ? "c" : "d": break;
  181. }
  182. ',
  183. '<?php
  184. switch ($a) {
  185. case $b ? "c" : "d" : break;
  186. }
  187. ',
  188. ];
  189. yield [
  190. '<?php
  191. switch ($a) {
  192. case $b ?: $c:
  193. break;
  194. }
  195. ',
  196. '<?php
  197. switch ($a) {
  198. case $b ?: $c :
  199. break;
  200. }
  201. ',
  202. ];
  203. yield [
  204. '<?php
  205. $a = 5.1;
  206. $b = 1.0;
  207. switch($a) {
  208. case (int) $a < 1: {
  209. echo "leave alone";
  210. break;
  211. }
  212. case ($a < 2)/* test */ : {
  213. echo "fix 1";
  214. break;
  215. }
  216. case (3): {
  217. echo "fix 2";
  218. break;
  219. }
  220. case /**/(/**/ // test
  221. 4
  222. /**/)//
  223. /**/ : {
  224. echo "fix 3";
  225. break;
  226. }
  227. case (((int)$b) + 4.1): {
  228. echo "fix 4";
  229. break;
  230. }
  231. case ($b + 1) * 2: {
  232. echo "leave alone";
  233. break;
  234. }
  235. }
  236. ',
  237. '<?php
  238. $a = 5.1;
  239. $b = 1.0;
  240. switch($a) {
  241. case (int) $a < 1 : {
  242. echo "leave alone";
  243. break;
  244. }
  245. case ($a < 2)/* test */ : {
  246. echo "fix 1";
  247. break;
  248. }
  249. case (3) : {
  250. echo "fix 2";
  251. break;
  252. }
  253. case /**/(/**/ // test
  254. 4
  255. /**/)//
  256. /**/ : {
  257. echo "fix 3";
  258. break;
  259. }
  260. case (((int)$b) + 4.1) : {
  261. echo "fix 4";
  262. break;
  263. }
  264. case ($b + 1) * 2 : {
  265. echo "leave alone";
  266. break;
  267. }
  268. }
  269. ',
  270. [
  271. '<?php
  272. switch ($a) {
  273. case 42:
  274. break;
  275. case 1:
  276. switch ($a) {
  277. case 42:
  278. break;
  279. default:
  280. echo 1 ;
  281. }
  282. }
  283. ',
  284. '<?php
  285. switch ($a) {
  286. case 42 :
  287. break;
  288. case 1 :
  289. switch ($a) {
  290. case 42 :
  291. break;
  292. default :
  293. echo 1 ;
  294. }
  295. }
  296. ',
  297. ],
  298. ];
  299. yield [
  300. '<?php
  301. switch($foo) {
  302. case 4: ; ;
  303. case 31 + test(";"); ; ; ;;
  304. case 1 + test(";"); // ;
  305. case (1+2/*;*/);
  306. case 1;
  307. case 2;
  308. return 1;
  309. default;
  310. return 2;
  311. }',
  312. '<?php
  313. switch($foo) {
  314. case 4 : ; ;
  315. case 31 + test(";") ; ; ; ;;
  316. case 1 + test(";") ; // ;
  317. case (1+2/*;*/) ;
  318. case 1 ;
  319. case 2 ;
  320. return 1;
  321. default ;
  322. return 2;
  323. }',
  324. ];
  325. }
  326. /**
  327. * @dataProvider provideFixPre80Cases
  328. *
  329. * @requires PHP <8.0
  330. */
  331. public function testFixPre80(string $expected, string $input = null): void
  332. {
  333. $this->doTest($expected, $input);
  334. }
  335. public static function provideFixPre80Cases(): iterable
  336. {
  337. yield [
  338. '<?php
  339. switch ($a) {
  340. case $b ? "c" : "this" ? "is" : "ugly":
  341. break;
  342. }
  343. ',
  344. '<?php
  345. switch ($a) {
  346. case $b ? "c" : "this" ? "is" : "ugly" :
  347. break;
  348. }
  349. ',
  350. ];
  351. }
  352. /**
  353. * @dataProvider provideFix80Cases
  354. *
  355. * @requires PHP 8.0
  356. */
  357. public function testFix80(string $expected, ?string $input = null): void
  358. {
  359. $this->doTest($expected, $input);
  360. }
  361. public static function provideFix80Cases(): iterable
  362. {
  363. yield [
  364. '<?php
  365. match ($foo) {
  366. 1 => "a",
  367. default => "b"
  368. };
  369. match ($bar) {
  370. 2 => "c",
  371. default=> "d"
  372. };
  373. match ($baz) {
  374. 3 => "e",
  375. default => "f"
  376. };
  377. ',
  378. ];
  379. yield [
  380. '<?php
  381. $a = function (): ?string {
  382. return $rank ? match (true) {
  383. $rank <= 1000 => \'bronze\',
  384. default => null,
  385. } : null;
  386. };',
  387. ];
  388. }
  389. /**
  390. * @dataProvider provideFix81Cases
  391. *
  392. * @requires PHP 8.1
  393. */
  394. public function testFix81(string $expected, ?string $input = null): void
  395. {
  396. $this->doTest($expected, $input);
  397. }
  398. public static function provideFix81Cases(): iterable
  399. {
  400. yield 'enums' => [
  401. '<?php
  402. enum Suit {
  403. case Hearts;
  404. case Diamonds ;
  405. case Clubs ;
  406. case Spades ;
  407. }
  408. enum UserStatus: string {
  409. case Pending = \'P\';
  410. case Active = \'A\';
  411. case Suspended = \'S\';
  412. case CanceledByUser = \'C\' ;
  413. }
  414. switch ($a) {
  415. default:
  416. echo 1;
  417. }
  418. ',
  419. ];
  420. }
  421. }