NoSuperfluousElseifFixerTest.php 6.7 KB

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