CombineConsecutiveIssetsFixerTest.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  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 function provideFixCases(): array
  29. {
  30. return [
  31. [
  32. '<?php $a = isset($a, $b) ;',
  33. '<?php $a = isset($a) && isset($b);',
  34. ],
  35. [
  36. '<?php $a = isset($a, $b,$c) ;',
  37. '<?php $a = isset($a) && isset($b,$c);',
  38. ],
  39. [
  40. '<?php $a = isset($a,$c, $b,$c) ;',
  41. '<?php $a = isset($a,$c) && isset($b,$c);',
  42. ],
  43. [
  44. '<?php $a = isset($a,$c, $b) ;',
  45. '<?php $a = isset($a,$c) && isset($b);',
  46. ],
  47. [
  48. '<?php $a = isset($a, $b) || isset($c, $e) ?>',
  49. '<?php $a = isset($a) && isset($b) || isset($c) && isset($e)?>',
  50. ],
  51. [
  52. '<?php $a = isset($a[a() ? b() : $d], $b) ;',
  53. '<?php $a = isset($a[a() ? b() : $d]) && isset($b);',
  54. ],
  55. [
  56. '<?php $a = isset($a[$b], $b/**/) ;',
  57. '<?php $a = isset($a[$b]/**/) && isset($b);',
  58. ],
  59. [
  60. '<?php $a = isset ( $a, $c, $d /*1*/ ) ;',
  61. '<?php $a = isset ( $a /*1*/ ) && isset ( $c ) && isset( $d );',
  62. ],
  63. 'minimal fix case' => [
  64. '<?php {{isset($a, $b);}}',
  65. '<?php {{isset($a)&&isset($b);}}',
  66. ],
  67. [
  68. '<?php foo(isset($a, $b, $c) );',
  69. '<?php foo(isset($a) && isset($b) && isset($c));',
  70. ],
  71. [
  72. '<?php isset($a, $b) && !isset($c) ?>',
  73. '<?php isset($a) && isset($b) && !isset($c) ?>',
  74. ],
  75. [
  76. '<?php $a = isset($a,$c, $b,$c, $b,$c,$d,$f, $b) ;',
  77. '<?php $a = isset($a,$c) && isset($b,$c) && isset($b,$c,$d,$f) && isset($b);',
  78. ],
  79. 'comments' => [
  80. '<?php
  81. $a =#0
  82. isset#1
  83. (#2
  84. $a, $b,$c, $d#3
  85. )#4
  86. #5
  87. #6
  88. #7
  89. #8
  90. #9
  91. /*10*/ /**11
  92. */
  93. '.'
  94. ;',
  95. '<?php
  96. $a =#0
  97. isset#1
  98. (#2
  99. $a#3
  100. )#4
  101. &&#5
  102. isset
  103. #6
  104. #7
  105. ( #8
  106. $b #9
  107. /*10*/, $c/**11
  108. */
  109. )&& isset($d)
  110. ;',
  111. ],
  112. [
  113. '<?php
  114. $a = isset($a, $b, $c, $d, $e, $f) ;
  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. echo 1; echo 1; echo 1; echo 1; echo 1; echo 1; echo 1;
  119. $a = isset($a, $b) ;
  120. ',
  121. '<?php
  122. $a = isset($a) && isset($b) && isset($c) && isset($d) && isset($e) && isset($f);
  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. echo 1; echo 1; echo 1; echo 1; echo 1; echo 1; echo 1;
  127. $a = isset($a) && isset($b);
  128. ',
  129. ],
  130. [
  131. '<?php $d = isset($z[1], $z[2], $z[3]) || false;',
  132. '<?php $d = isset($z[1]) && isset($z[2]) && isset($z[3]) || false;',
  133. ],
  134. [
  135. '<?php
  136. $a = isset($a, $b) && isset($c) === false;
  137. $a = isset($a, $b) && isset($c) | false;
  138. $a = isset($a, $b) && isset($c) ^ false;
  139. ',
  140. '<?php
  141. $a = isset($a) && isset($b) && isset($c) === false;
  142. $a = isset($a) && isset($b) && isset($c) | false;
  143. $a = isset($a) && isset($b) && isset($c) ^ false;
  144. ',
  145. ],
  146. // don't fix cases
  147. [
  148. '<?php $a = isset($a) && $a->isset(); $b=isset($d);',
  149. ],
  150. [
  151. '<?php
  152. $a = !isset($a) && isset($b);
  153. $a = !isset($a) && !isset($b);
  154. $a = isset($a) && !isset($b);
  155. //
  156. $a = isset($b) && isset($c) === false;
  157. $a = isset($b) && isset($c) | false;
  158. $a = isset($b) && isset($c) ^ false;
  159. //
  160. $a = false === isset($b) && isset($c);
  161. $a = false | isset($b) && isset($c);
  162. $a = false ^ isset($b) && isset($c);
  163. ',
  164. ],
  165. [
  166. '<?php $a = !isset($container[$a]) && isset($container[$b]) && !isset($container[$c]) && isset($container[$d]);',
  167. ],
  168. ];
  169. }
  170. public function testAnonymousClass(): void
  171. {
  172. $this->doTest(
  173. '<?php
  174. class A {function isset(){}} // isset($b) && isset($c)
  175. $a = new A(); /** isset($b) && isset($c) */
  176. if (isset($b) && $a->isset()) {}
  177. '
  178. );
  179. }
  180. }