CombineConsecutiveIssetsFixerTest.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  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\LanguageConstruct;
  12. use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
  13. /**
  14. * @author SpacePossum
  15. *
  16. * @internal
  17. *
  18. * @covers \PhpCsFixer\Fixer\LanguageConstruct\CombineConsecutiveIssetsFixer
  19. */
  20. final class CombineConsecutiveIssetsFixerTest 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. [
  36. '<?php $a = isset($a, $b) ;',
  37. '<?php $a = isset($a) && isset($b);',
  38. ],
  39. [
  40. '<?php $a = isset($a, $b,$c) ;',
  41. '<?php $a = isset($a) && isset($b,$c);',
  42. ],
  43. [
  44. '<?php $a = isset($a,$c, $b,$c) ;',
  45. '<?php $a = isset($a,$c) && isset($b,$c);',
  46. ],
  47. [
  48. '<?php $a = isset($a,$c, $b) ;',
  49. '<?php $a = isset($a,$c) && isset($b);',
  50. ],
  51. [
  52. '<?php $a = isset($a, $b) || isset($c, $e) ?>',
  53. '<?php $a = isset($a) && isset($b) || isset($c) && isset($e)?>',
  54. ],
  55. [
  56. '<?php $a = isset($a[a() ? b() : $d], $b) ;',
  57. '<?php $a = isset($a[a() ? b() : $d]) && isset($b);',
  58. ],
  59. [
  60. '<?php $a = isset($a[$b], $b/**/) ;',
  61. '<?php $a = isset($a[$b]/**/) && isset($b);',
  62. ],
  63. [
  64. '<?php $a = isset ( $a, $c, $d /*1*/ ) ;',
  65. '<?php $a = isset ( $a /*1*/ ) && isset ( $c ) && isset( $d );',
  66. ],
  67. 'minimal fix case' => [
  68. '<?php isset($a, $b);',
  69. '<?php isset($a)&&isset($b);',
  70. ],
  71. [
  72. '<?php isset($a, $b, $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. // don't fix cases
  131. [
  132. '<?php $a = isset($a) && $a->isset(); $b=isset($d);',
  133. ],
  134. [
  135. '<?php $a = isset($a) && !isset($b);',
  136. ],
  137. [
  138. '<?php $a = !isset($a) && isset($b);',
  139. ],
  140. [
  141. '<?php $a = !isset($container[$a]) && isset($container[$b]) && !isset($container[$c]) && isset($container[$d]);',
  142. ],
  143. ];
  144. }
  145. /**
  146. * @requires PHP 7.0
  147. */
  148. public function testAnonymousClass()
  149. {
  150. $this->doTest(
  151. '<?php
  152. class A {function isset(){}} // isset($b) && isset($c)
  153. $a = new A(); /** isset($b) && isset($c) */
  154. if (isset($b) && $a->isset()) {}
  155. '
  156. );
  157. }
  158. }