SimplifiedIfReturnFixerTest.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. <?php
  2. /*
  3. * This file is part of PHP CS Fixer.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. * Dariusz Rumiński <dariusz.ruminski@gmail.com>
  7. *
  8. * This source file is subject to the MIT license that is bundled
  9. * with this source code in the file LICENSE.
  10. */
  11. namespace PhpCsFixer\Tests\Fixer\ControlStructure;
  12. use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
  13. /**
  14. * @author Filippo Tessarotto <zoeslam@gmail.com>
  15. *
  16. * @internal
  17. *
  18. * @covers \PhpCsFixer\Fixer\ControlStructure\SimplifiedIfReturnFixer
  19. */
  20. final class SimplifiedIfReturnFixerTest extends AbstractFixerTestCase
  21. {
  22. /**
  23. * @param string $expected
  24. * @param null|string $input
  25. *
  26. * @dataProvider provideFixCases
  27. */
  28. public function testFix($expected, $input = null)
  29. {
  30. $this->doTest($expected, $input);
  31. }
  32. public function provideFixCases()
  33. {
  34. return [
  35. 'simple' => [
  36. '<?php return (bool) ($foo) ;',
  37. '<?php if ($foo) { return true; } return false;',
  38. ],
  39. 'simple-negative' => [
  40. '<?php return ! ($foo) ;',
  41. '<?php if ($foo) { return false; } return true;',
  42. ],
  43. 'simple-negative II' => [
  44. '<?php return ! (!$foo && $a()) ;',
  45. '<?php if (!$foo && $a()) { return false; } return true;',
  46. ],
  47. 'simple-braceless' => [
  48. '<?php return (bool) ($foo) ;',
  49. '<?php if ($foo) return true; return false;',
  50. ],
  51. 'simple-braceless-negative' => [
  52. '<?php return ! ($foo) ;',
  53. '<?php if ($foo) return false; return true;',
  54. ],
  55. 'bug-consecutive-ifs' => [
  56. '<?php if ($bar) { return 1; } return (bool) ($foo) ;',
  57. '<?php if ($bar) { return 1; } if ($foo) { return true; } return false;',
  58. ],
  59. 'bug-consecutive-ifs-negative' => [
  60. '<?php if ($bar) { return 1; } return ! ($foo) ;',
  61. '<?php if ($bar) { return 1; } if ($foo) { return false; } return true;',
  62. ],
  63. 'bug-consecutive-ifs-braceless' => [
  64. '<?php if ($bar) return 1; return (bool) ($foo) ;',
  65. '<?php if ($bar) return 1; if ($foo) return true; return false;',
  66. ],
  67. 'bug-consecutive-ifs-braceless-negative' => [
  68. '<?php if ($bar) return 1; return ! ($foo) ;',
  69. '<?php if ($bar) return 1; if ($foo) return false; return true;',
  70. ],
  71. [
  72. <<<'EOT'
  73. <?php
  74. function f1() { return (bool) ($f1) ; }
  75. function f2() { return true; } return false;
  76. function f3() { return (bool) ($f3) ; }
  77. function f4() { return true; } return false;
  78. function f5() { return (bool) ($f5) ; }
  79. function f6() { return false; } return true;
  80. function f7() { return ! ($f7) ; }
  81. function f8() { return false; } return true;
  82. function f9() { return ! ($f9) ; }
  83. EOT
  84. ,
  85. <<<'EOT'
  86. <?php
  87. function f1() { if ($f1) { return true; } return false; }
  88. function f2() { return true; } return false;
  89. function f3() { if ($f3) { return true; } return false; }
  90. function f4() { return true; } return false;
  91. function f5() { if ($f5) { return true; } return false; }
  92. function f6() { return false; } return true;
  93. function f7() { if ($f7) { return false; } return true; }
  94. function f8() { return false; } return true;
  95. function f9() { if ($f9) { return false; } return true; }
  96. EOT
  97. ,
  98. ],
  99. 'preserve-comments' => [
  100. <<<'EOT'
  101. <?php
  102. // C1
  103. return (bool)
  104. # C2
  105. (
  106. /* C3 */
  107. $foo
  108. /** C4 */
  109. )
  110. // C5
  111. # C6
  112. // C7
  113. # C8
  114. /* C9 */
  115. /** C10 */
  116. // C11
  117. # C12
  118. ;
  119. /* C13 */
  120. EOT
  121. ,
  122. <<<'EOT'
  123. <?php
  124. // C1
  125. if
  126. # C2
  127. (
  128. /* C3 */
  129. $foo
  130. /** C4 */
  131. )
  132. // C5
  133. {
  134. # C6
  135. return
  136. // C7
  137. true
  138. # C8
  139. ;
  140. /* C9 */
  141. }
  142. /** C10 */
  143. return
  144. // C11
  145. false
  146. # C12
  147. ;
  148. /* C13 */
  149. EOT
  150. ,
  151. ],
  152. 'preserve-comments-braceless' => [
  153. <<<'EOT'
  154. <?php
  155. // C1
  156. return (bool)
  157. # C2
  158. (
  159. /* C3 */
  160. $foo
  161. /** C4 */
  162. )
  163. // C5
  164. # C6
  165. // C7
  166. # C8
  167. /* C9 */
  168. /** C10 */
  169. // C11
  170. # C12
  171. ;
  172. /* C13 */
  173. EOT
  174. ,
  175. <<<'EOT'
  176. <?php
  177. // C1
  178. if
  179. # C2
  180. (
  181. /* C3 */
  182. $foo
  183. /** C4 */
  184. )
  185. // C5
  186. # C6
  187. return
  188. // C7
  189. true
  190. # C8
  191. ;
  192. /* C9 */
  193. /** C10 */
  194. return
  195. // C11
  196. false
  197. # C12
  198. ;
  199. /* C13 */
  200. EOT
  201. ,
  202. ],
  203. 'else-if' => [
  204. '<?php if ($bar) { return $bar; } else return (bool) ($foo) ;',
  205. '<?php if ($bar) { return $bar; } else if ($foo) { return true; } return false;',
  206. ],
  207. 'else-if-negative' => [
  208. '<?php if ($bar) { return $bar; } else return ! ($foo) ;',
  209. '<?php if ($bar) { return $bar; } else if ($foo) { return false; } return true;',
  210. ],
  211. 'else-if-braceless' => [
  212. '<?php if ($bar) return $bar; else return (bool) ($foo) ;',
  213. '<?php if ($bar) return $bar; else if ($foo) return true; return false;',
  214. ],
  215. 'else-if-braceless-negative' => [
  216. '<?php if ($bar) return $bar; else return ! ($foo) ;',
  217. '<?php if ($bar) return $bar; else if ($foo) return false; return true;',
  218. ],
  219. 'elseif' => [
  220. '<?php if ($bar) { return $bar; } return (bool) ($foo) ;',
  221. '<?php if ($bar) { return $bar; } elseif ($foo) { return true; } return false;',
  222. ],
  223. 'elseif-negative' => [
  224. '<?php if ($bar) { return $bar; } return ! ($foo) ;',
  225. '<?php if ($bar) { return $bar; } elseif ($foo) { return false; } return true;',
  226. ],
  227. 'elseif-braceless' => [
  228. '<?php if ($bar) return $bar; return (bool) ($foo) ;',
  229. '<?php if ($bar) return $bar; elseif ($foo) return true; return false;',
  230. ],
  231. 'elseif-braceless-negative' => [
  232. '<?php if ($bar) return $bar; return ! ($foo) ;',
  233. '<?php if ($bar) return $bar; elseif ($foo) return false; return true;',
  234. ],
  235. ];
  236. }
  237. }