SwitchCaseSpaceFixerTest.php 11 KB

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