CombineConsecutiveIssetsFixerTest.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  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\LanguageConstruct;
  13. use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
  14. /**
  15. * @internal
  16. *
  17. * @covers \PhpCsFixer\Fixer\LanguageConstruct\CombineConsecutiveIssetsFixer
  18. */
  19. final class CombineConsecutiveIssetsFixerTest extends AbstractFixerTestCase
  20. {
  21. /**
  22. * @dataProvider provideFixCases
  23. */
  24. public function testFix(string $expected, ?string $input = null): void
  25. {
  26. $this->doTest($expected, $input);
  27. }
  28. public static function provideFixCases(): iterable
  29. {
  30. yield [
  31. '<?php $a = isset($a, $b) ;',
  32. '<?php $a = isset($a) && isset($b);',
  33. ];
  34. yield [
  35. '<?php $a = isset($a, $b,$c) ;',
  36. '<?php $a = isset($a) && isset($b,$c);',
  37. ];
  38. yield [
  39. '<?php $a = isset($a,$c, $b,$c) ;',
  40. '<?php $a = isset($a,$c) && isset($b,$c);',
  41. ];
  42. yield [
  43. '<?php $a = isset($a,$c, $b) ;',
  44. '<?php $a = isset($a,$c) && isset($b);',
  45. ];
  46. yield [
  47. '<?php $a = isset($a, $b) || isset($c, $e) ?>',
  48. '<?php $a = isset($a) && isset($b) || isset($c) && isset($e)?>',
  49. ];
  50. yield [
  51. '<?php $a = isset($a[a() ? b() : $d], $b) ;',
  52. '<?php $a = isset($a[a() ? b() : $d]) && isset($b);',
  53. ];
  54. yield [
  55. '<?php $a = isset($a[$b], $b/**/) ;',
  56. '<?php $a = isset($a[$b]/**/) && isset($b);',
  57. ];
  58. yield [
  59. '<?php $a = isset ( $a, $c, $d /*1*/ ) ;',
  60. '<?php $a = isset ( $a /*1*/ ) && isset ( $c ) && isset( $d );',
  61. ];
  62. yield 'minimal fix case' => [
  63. '<?php {{isset($a, $b);}}',
  64. '<?php {{isset($a)&&isset($b);}}',
  65. ];
  66. yield [
  67. '<?php foo(isset($a, $b, $c) );',
  68. '<?php foo(isset($a) && isset($b) && isset($c));',
  69. ];
  70. yield [
  71. '<?php isset($a, $b) && !isset($c) ?>',
  72. '<?php isset($a) && isset($b) && !isset($c) ?>',
  73. ];
  74. yield [
  75. '<?php $a = isset($a,$c, $b,$c, $b,$c,$d,$f, $b) ;',
  76. '<?php $a = isset($a,$c) && isset($b,$c) && isset($b,$c,$d,$f) && isset($b);',
  77. ];
  78. yield 'comments' => [
  79. '<?php
  80. $a =#0
  81. isset#1
  82. (#2
  83. $a, $b,$c, $d#3
  84. )#4
  85. #5
  86. #6
  87. #7
  88. #8
  89. #9
  90. /*10*/ /**11
  91. */
  92. '.'
  93. ;',
  94. '<?php
  95. $a =#0
  96. isset#1
  97. (#2
  98. $a#3
  99. )#4
  100. &&#5
  101. isset
  102. #6
  103. #7
  104. ( #8
  105. $b #9
  106. /*10*/, $c/**11
  107. */
  108. )&& isset($d)
  109. ;',
  110. ];
  111. yield [
  112. '<?php
  113. $a = isset($a, $b, $c, $d, $e, $f) ;
  114. echo 1; echo 1; echo 1; echo 1; echo 1; echo 1; echo 1;
  115. echo 1; echo 1; echo 1; echo 1; echo 1; echo 1; echo 1;
  116. echo 1; echo 1; echo 1; echo 1; echo 1; echo 1; echo 1;
  117. echo 1; echo 1; echo 1; echo 1; echo 1; echo 1; echo 1;
  118. $a = isset($a, $b) ;
  119. ',
  120. '<?php
  121. $a = isset($a) && isset($b) && isset($c) && isset($d) && isset($e) && isset($f);
  122. echo 1; echo 1; echo 1; echo 1; echo 1; echo 1; echo 1;
  123. echo 1; echo 1; echo 1; echo 1; echo 1; echo 1; echo 1;
  124. echo 1; echo 1; echo 1; echo 1; echo 1; echo 1; echo 1;
  125. echo 1; echo 1; echo 1; echo 1; echo 1; echo 1; echo 1;
  126. $a = isset($a) && isset($b);
  127. ',
  128. ];
  129. yield [
  130. '<?php $d = isset($z[1], $z[2], $z[3]) || false;',
  131. '<?php $d = isset($z[1]) && isset($z[2]) && isset($z[3]) || false;',
  132. ];
  133. yield [
  134. '<?php
  135. $a = isset($a, $b) && isset($c) === false;
  136. $a = isset($a, $b) && isset($c) | false;
  137. $a = isset($a, $b) && isset($c) ^ false;
  138. ',
  139. '<?php
  140. $a = isset($a) && isset($b) && isset($c) === false;
  141. $a = isset($a) && isset($b) && isset($c) | false;
  142. $a = isset($a) && isset($b) && isset($c) ^ false;
  143. ',
  144. ];
  145. // don't fix cases
  146. yield [
  147. '<?php $a = isset($a) && $a->isset(); $b=isset($d);',
  148. ];
  149. yield [
  150. '<?php
  151. $a = !isset($a) && isset($b);
  152. $a = !isset($a) && !isset($b);
  153. $a = isset($a) && !isset($b);
  154. //
  155. $a = isset($b) && isset($c) === false;
  156. $a = isset($b) && isset($c) | false;
  157. $a = isset($b) && isset($c) ^ false;
  158. //
  159. $a = false === isset($b) && isset($c);
  160. $a = false | isset($b) && isset($c);
  161. $a = false ^ isset($b) && isset($c);
  162. ',
  163. ];
  164. yield [
  165. '<?php $a = !isset($container[$a]) && isset($container[$b]) && !isset($container[$c]) && isset($container[$d]);',
  166. ];
  167. }
  168. public function testAnonymousClass(): void
  169. {
  170. $this->doTest(
  171. '<?php
  172. class A {function isset(){}} // isset($b) && isset($c)
  173. $a = new A(); /** isset($b) && isset($c) */
  174. if (isset($b) && $a->isset()) {}
  175. '
  176. );
  177. }
  178. }