TernaryToNullCoalescingFixerTest.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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\Operator;
  12. use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
  13. /**
  14. * @author Filippo Tessarotto <zoeslam@gmail.com>
  15. *
  16. * @internal
  17. *
  18. * @requires PHP 7.0
  19. * @covers \PhpCsFixer\Fixer\Operator\TernaryToNullCoalescingFixer
  20. */
  21. final class TernaryToNullCoalescingFixerTest extends AbstractFixerTestCase
  22. {
  23. /**
  24. * @dataProvider provideFixCases
  25. *
  26. * @param string $expected
  27. * @param null|string $input
  28. */
  29. public function testFix($expected, $input = null)
  30. {
  31. $this->doTest($expected, $input);
  32. }
  33. public function provideFixCases()
  34. {
  35. return [
  36. // Do not fix cases.
  37. ['<?php $x = isset($a) ? $a[1] : null;'],
  38. ['<?php $x = isset($a) and $a ? $a : "";'],
  39. ['<?php $x = "isset($a) ? $a : null";'],
  40. ['<?php $x = isset($a) ? $$a : null;'],
  41. ['<?php $x = isset($a) ? "$a" : null;'],
  42. ['<?php $x = isset($a) ?: false;'],
  43. ['<?php $x = $a ? $a : isset($b) ? $b : isset($c) ? $c : "";'],
  44. ['<?php $x = $y ?? isset($a) ? $a : null;'],
  45. ['<?php $x = isset($a) ?: $b;'],
  46. ['<?php $x = isset($a, $b) ? $a : null;'],
  47. ['<?php $x = $a && isset($b) ? $b : null;'],
  48. ['<?php $x = $a & isset($b) ? $b : null;'],
  49. ['<?php $x = ! isset($a) ? $a : null;'],
  50. ['<?php $x = false === isset($a) ? $a : 2;'],
  51. ['<?php $x = 4 * isset($a) ? $a : 2;'],
  52. ['<?php $x = 3 ** isset($a) ? $a : 2;'],
  53. ['<?php $x = 1 | isset($a) ? $a : 2;'],
  54. ['<?php $x = (array) isset($a) ? $a : 2;'],
  55. ['<?php $x = isset($a[++$i]) ? $a[++$i] : null;'],
  56. ['<?php $x = function(){isset($a[yield]) ? $a[yield] : null;};'],
  57. ['<?php $x = isset($a[foo()]) ? $a[foo()] : null;'],
  58. ['<?php $x = isset($a[$callback()]) ? $a[$callback()] : null;'],
  59. ['<?php $y = isset($a) ? 2**3 : 3**2;'],
  60. ['<?php $x = function(){isset($a[yield from $a]) ? $a[yield from $a] : null;};'],
  61. // Fix cases.
  62. 'Common fix case (I).' => [
  63. '<?php $x = $a ?? null;',
  64. '<?php $x = isset($a) ? $a : null;',
  65. ],
  66. 'Common fix case (II).' => [
  67. '<?php $x = $a[0] ?? 1;',
  68. '<?php $x = isset($a[0]) ? $a[0] : 1;',
  69. ],
  70. 'Minimal number of tokens case.' => [
  71. '<?php
  72. $x=$a??null?>',
  73. '<?php
  74. $x=isset($a)?$a:null?>',
  75. ],
  76. [
  77. '<?php $x = $a ?? 1; $y = isset($b) ? "b" : 2; $x = $c ?? 3;',
  78. '<?php $x = isset($a) ? $a : 1; $y = isset($b) ? "b" : 2; $x = isset($c) ? $c : 3;',
  79. ],
  80. [
  81. '<?php $x = $a[ $b[ "c" ]] ?? null;',
  82. '<?php $x = isset ( $a[$b["c"]]) ?$a[ $b[ "c" ]] : null;',
  83. ],
  84. [
  85. '<?php $x = $a ?? $b[func(1, true)];',
  86. '<?php $x = isset($a) ? $a : $b[func(1, true)];',
  87. ],
  88. [
  89. '<?php $x = $a ?? ($b ?? "");',
  90. '<?php $x = isset($a) ? $a : (isset($b) ? $b : "");',
  91. ],
  92. [
  93. '<?php $x = ($a ?? isset($b)) ? $b : "";',
  94. '<?php $x = (isset($a) ? $a : isset($b)) ? $b : "";',
  95. ],
  96. [
  97. '<?php $x = $a ?? isset($b) ? $b : isset($c) ? $c : "";',
  98. '<?php $x = isset($a) ? $a : isset($b) ? $b : isset($c) ? $c : "";',
  99. ],
  100. [
  101. '<?php $x = /*a1*//*a2*/ /*b*/ $a /*c*/ ?? /*d*/ isset($b) /*e*/ ? /*f*/ $b /*g*/ : /*h*/ isset($c) /*i*/ ? /*j*/ $c /*k*/ : /*l*/ "";',
  102. '<?php $x = isset($a) /*a1*//*a2*/ ? /*b*/ $a /*c*/ : /*d*/ isset($b) /*e*/ ? /*f*/ $b /*g*/ : /*h*/ isset($c) /*i*/ ? /*j*/ $c /*k*/ : /*l*/ "";',
  103. ],
  104. [
  105. '<?php $x = (
  106. // c1
  107. // c2
  108. // c3
  109. $a
  110. // c4
  111. ??
  112. // c5
  113. null
  114. /* c6 */
  115. )
  116. # c7
  117. ;',
  118. '<?php $x = (
  119. // c1
  120. isset($a)
  121. // c2
  122. ?
  123. // c3
  124. $a
  125. // c4
  126. :
  127. // c5
  128. null
  129. /* c6 */
  130. )
  131. # c7
  132. ;',
  133. ],
  134. ];
  135. }
  136. }