SimplifiedIfReturnFixerTest.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  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 Filippo Tessarotto <zoeslam@gmail.com>
  16. *
  17. * @internal
  18. *
  19. * @covers \PhpCsFixer\Fixer\ControlStructure\SimplifiedIfReturnFixer
  20. */
  21. final class SimplifiedIfReturnFixerTest 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(): array
  31. {
  32. return [
  33. 'simple' => [
  34. '<?php return (bool) ($foo) ;',
  35. '<?php if ($foo) { return true; } return false;',
  36. ],
  37. 'simple-negative' => [
  38. '<?php return ! ($foo) ;',
  39. '<?php if ($foo) { return false; } return true;',
  40. ],
  41. 'simple-negative II' => [
  42. '<?php return ! (!$foo && $a()) ;',
  43. '<?php if (!$foo && $a()) { return false; } return true;',
  44. ],
  45. 'simple-braceless' => [
  46. '<?php return (bool) ($foo) ;',
  47. '<?php if ($foo) return true; return false;',
  48. ],
  49. 'simple-braceless-negative' => [
  50. '<?php return ! ($foo) ;',
  51. '<?php if ($foo) return false; return true;',
  52. ],
  53. 'bug-consecutive-ifs' => [
  54. '<?php if ($bar) { return 1; } return (bool) ($foo) ;',
  55. '<?php if ($bar) { return 1; } if ($foo) { return true; } return false;',
  56. ],
  57. 'bug-consecutive-ifs-negative' => [
  58. '<?php if ($bar) { return 1; } return ! ($foo) ;',
  59. '<?php if ($bar) { return 1; } if ($foo) { return false; } return true;',
  60. ],
  61. 'bug-consecutive-ifs-braceless' => [
  62. '<?php if ($bar) return 1; return (bool) ($foo) ;',
  63. '<?php if ($bar) return 1; if ($foo) return true; return false;',
  64. ],
  65. 'bug-consecutive-ifs-braceless-negative' => [
  66. '<?php if ($bar) return 1; return ! ($foo) ;',
  67. '<?php if ($bar) return 1; if ($foo) return false; return true;',
  68. ],
  69. [
  70. <<<'EOT'
  71. <?php
  72. function f1() { return (bool) ($f1) ; }
  73. function f2() { return true; } return false;
  74. function f3() { return (bool) ($f3) ; }
  75. function f4() { return true; } return false;
  76. function f5() { return (bool) ($f5) ; }
  77. function f6() { return false; } return true;
  78. function f7() { return ! ($f7) ; }
  79. function f8() { return false; } return true;
  80. function f9() { return ! ($f9) ; }
  81. EOT
  82. ,
  83. <<<'EOT'
  84. <?php
  85. function f1() { if ($f1) { return true; } return false; }
  86. function f2() { return true; } return false;
  87. function f3() { if ($f3) { return true; } return false; }
  88. function f4() { return true; } return false;
  89. function f5() { if ($f5) { return true; } return false; }
  90. function f6() { return false; } return true;
  91. function f7() { if ($f7) { return false; } return true; }
  92. function f8() { return false; } return true;
  93. function f9() { if ($f9) { return false; } return true; }
  94. EOT
  95. ,
  96. ],
  97. 'preserve-comments' => [
  98. <<<'EOT'
  99. <?php
  100. // C1
  101. return (bool)
  102. # C2
  103. (
  104. /* C3 */
  105. $foo
  106. /** C4 */
  107. )
  108. // C5
  109. # C6
  110. // C7
  111. # C8
  112. /* C9 */
  113. /** C10 */
  114. // C11
  115. # C12
  116. ;
  117. /* C13 */
  118. EOT
  119. ,
  120. <<<'EOT'
  121. <?php
  122. // C1
  123. if
  124. # C2
  125. (
  126. /* C3 */
  127. $foo
  128. /** C4 */
  129. )
  130. // C5
  131. {
  132. # C6
  133. return
  134. // C7
  135. true
  136. # C8
  137. ;
  138. /* C9 */
  139. }
  140. /** C10 */
  141. return
  142. // C11
  143. false
  144. # C12
  145. ;
  146. /* C13 */
  147. EOT
  148. ,
  149. ],
  150. 'preserve-comments-braceless' => [
  151. <<<'EOT'
  152. <?php
  153. // C1
  154. return (bool)
  155. # C2
  156. (
  157. /* C3 */
  158. $foo
  159. /** C4 */
  160. )
  161. // C5
  162. # C6
  163. // C7
  164. # C8
  165. /* C9 */
  166. /** C10 */
  167. // C11
  168. # C12
  169. ;
  170. /* C13 */
  171. EOT
  172. ,
  173. <<<'EOT'
  174. <?php
  175. // C1
  176. if
  177. # C2
  178. (
  179. /* C3 */
  180. $foo
  181. /** C4 */
  182. )
  183. // C5
  184. # C6
  185. return
  186. // C7
  187. true
  188. # C8
  189. ;
  190. /* C9 */
  191. /** C10 */
  192. return
  193. // C11
  194. false
  195. # C12
  196. ;
  197. /* C13 */
  198. EOT
  199. ,
  200. ],
  201. 'else-if' => [
  202. '<?php if ($bar) { return $bar; } else return (bool) ($foo) ;',
  203. '<?php if ($bar) { return $bar; } else if ($foo) { return true; } return false;',
  204. ],
  205. 'else-if-negative' => [
  206. '<?php if ($bar) { return $bar; } else return ! ($foo) ;',
  207. '<?php if ($bar) { return $bar; } else if ($foo) { return false; } return true;',
  208. ],
  209. 'else-if-braceless' => [
  210. '<?php if ($bar) return $bar; else return (bool) ($foo) ;',
  211. '<?php if ($bar) return $bar; else if ($foo) return true; return false;',
  212. ],
  213. 'else-if-braceless-negative' => [
  214. '<?php if ($bar) return $bar; else return ! ($foo) ;',
  215. '<?php if ($bar) return $bar; else if ($foo) return false; return true;',
  216. ],
  217. 'elseif' => [
  218. '<?php if ($bar) { return $bar; } return (bool) ($foo) ;',
  219. '<?php if ($bar) { return $bar; } elseif ($foo) { return true; } return false;',
  220. ],
  221. 'elseif-negative' => [
  222. '<?php if ($bar) { return $bar; } return ! ($foo) ;',
  223. '<?php if ($bar) { return $bar; } elseif ($foo) { return false; } return true;',
  224. ],
  225. 'elseif-braceless' => [
  226. '<?php if ($bar) return $bar; return (bool) ($foo) ;',
  227. '<?php if ($bar) return $bar; elseif ($foo) return true; return false;',
  228. ],
  229. 'elseif-braceless-negative' => [
  230. '<?php if ($bar) return $bar; return ! ($foo) ;',
  231. '<?php if ($bar) return $bar; elseif ($foo) return false; return true;',
  232. ],
  233. ];
  234. }
  235. }