NoSuperfluousElseifFixerTest.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  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. * @internal
  16. *
  17. * @covers \PhpCsFixer\AbstractNoUselessElseFixer
  18. * @covers \PhpCsFixer\Fixer\ControlStructure\NoSuperfluousElseifFixer
  19. *
  20. * @extends AbstractFixerTestCase<\PhpCsFixer\Fixer\ControlStructure\NoSuperfluousElseifFixer>
  21. */
  22. final class NoSuperfluousElseifFixerTest 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. /**
  32. * @return iterable<array{0: string, 1?: string}>
  33. */
  34. public static function provideFixCases(): iterable
  35. {
  36. yield [
  37. '<?php
  38. if ($some) { return 1; } if ($a == 6){ $test = false; } //',
  39. '<?php
  40. if ($some) { return 1; } elseif ($a == 6){ $test = false; } //',
  41. ];
  42. yield [
  43. '<?php
  44. if ($foo) {
  45. return 1;
  46. }
  47. if ($bar) {
  48. return 2;
  49. }
  50. if ($baz) {
  51. return 3;
  52. } else {
  53. return 4;
  54. }',
  55. '<?php
  56. if ($foo) {
  57. return 1;
  58. } elseif ($bar) {
  59. return 2;
  60. } else if ($baz) {
  61. return 3;
  62. } else {
  63. return 4;
  64. }',
  65. ];
  66. yield [
  67. '<?php
  68. if ($foo)
  69. return 1;
  70. if ($bar)
  71. echo \'bar\';
  72. else {
  73. return 3;
  74. }',
  75. '<?php
  76. if ($foo)
  77. return 1;
  78. elseif ($bar)
  79. echo \'bar\';
  80. else {
  81. return 3;
  82. }',
  83. ];
  84. yield [
  85. '<?php
  86. if ($foo)
  87. ?><?php
  88. elseif ($bar)
  89. ?><?php
  90. else {
  91. ?><?php
  92. }',
  93. ];
  94. yield [
  95. '<?php
  96. if ($foo) {
  97. ?><?php
  98. return;
  99. }
  100. if ($bar)
  101. ?><?php
  102. else {
  103. ?><?php
  104. }',
  105. '<?php
  106. if ($foo) {
  107. ?><?php
  108. return;
  109. } elseif ($bar)
  110. ?><?php
  111. else {
  112. ?><?php
  113. }',
  114. ];
  115. yield [
  116. '<?php
  117. while (1) {
  118. if (2) {
  119. if (3) {
  120. if (4) {
  121. die;
  122. }
  123. if (5) {
  124. exit;
  125. } else {#foo
  126. throw new \Exception();
  127. }
  128. '.'
  129. continue;
  130. }
  131. if (6) {
  132. return null;
  133. } else {
  134. return 1;
  135. }
  136. '.'
  137. break;
  138. }
  139. /* bar */if (7)
  140. return 2 + 3;
  141. else {# baz
  142. die(\'foo\');
  143. }
  144. }',
  145. '<?php
  146. while (1) {
  147. if (2) {
  148. if (3) {
  149. if (4) {
  150. die;
  151. } elseif (5) {
  152. exit;
  153. } else {#foo
  154. throw new \Exception();
  155. }
  156. '.'
  157. continue;
  158. } else if (6) {
  159. return null;
  160. } else {
  161. return 1;
  162. }
  163. '.'
  164. break;
  165. } else/* bar */if (7)
  166. return 2 + 3;
  167. else {# baz
  168. die(\'foo\');
  169. }
  170. }',
  171. ];
  172. yield [
  173. '<?php
  174. if ($a === false)
  175. {
  176. if ($v) { $ret = "foo"; }
  177. elseif($a)
  178. die;
  179. }
  180. elseif($a)
  181. $ret .= $value;
  182. return $ret;',
  183. ];
  184. yield [
  185. '<?php
  186. if ($a)
  187. echo 1;
  188. else if ($b)
  189. die;
  190. else {
  191. echo 2;
  192. }',
  193. ];
  194. yield [
  195. '<?php
  196. if ($a) {
  197. echo 1;
  198. } else if ($b)
  199. die;
  200. else {
  201. echo 2;
  202. }',
  203. ];
  204. yield [
  205. '<?php
  206. if ($a) {
  207. echo 1;
  208. } else if ($b) {
  209. die;
  210. } else {
  211. echo 2;
  212. }',
  213. ];
  214. yield [
  215. '<?php
  216. if ($foo) {
  217. return 1;
  218. }
  219. if ($bar) {
  220. return 2;
  221. }
  222. if ($baz) {
  223. throw new class extends Exception{};
  224. } else {
  225. return 4;
  226. }',
  227. '<?php
  228. if ($foo) {
  229. return 1;
  230. } elseif ($bar) {
  231. return 2;
  232. } else if ($baz) {
  233. throw new class extends Exception{};
  234. } else {
  235. return 4;
  236. }',
  237. ];
  238. }
  239. /**
  240. * @dataProvider provideFix80Cases
  241. *
  242. * @requires PHP 8.0
  243. */
  244. public function testFix80(string $expected): void
  245. {
  246. $this->doTest($expected);
  247. }
  248. /**
  249. * @return iterable<array{string}>
  250. */
  251. public static function provideFix80Cases(): iterable
  252. {
  253. yield [
  254. '<?php
  255. if ($foo) {
  256. $a = $bar ?? throw new \Exception();
  257. } elseif ($bar) {
  258. echo 1;
  259. }
  260. ',
  261. ];
  262. }
  263. }