TernaryToNullCoalescingFixerTest.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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. // Fix cases.
  61. 'Common fix case (I).' => [
  62. '<?php $x = $a ?? null;',
  63. '<?php $x = isset($a) ? $a : null;',
  64. ],
  65. 'Common fix case (II).' => [
  66. '<?php $x = $a[0] ?? 1;',
  67. '<?php $x = isset($a[0]) ? $a[0] : 1;',
  68. ],
  69. 'Minimal number of tokens case.' => [
  70. '<?php
  71. $x=$a??null?>',
  72. '<?php
  73. $x=isset($a)?$a:null?>',
  74. ],
  75. [
  76. '<?php $x = $a ?? 1; $y = isset($b) ? "b" : 2; $x = $c ?? 3;',
  77. '<?php $x = isset($a) ? $a : 1; $y = isset($b) ? "b" : 2; $x = isset($c) ? $c : 3;',
  78. ],
  79. [
  80. '<?php $x = $a[ $b[ "c" ]] ?? null;',
  81. '<?php $x = isset ( $a[$b["c"]]) ?$a[ $b[ "c" ]] : null;',
  82. ],
  83. [
  84. '<?php $x = $a ?? $b[func(1, true)];',
  85. '<?php $x = isset($a) ? $a : $b[func(1, true)];',
  86. ],
  87. [
  88. '<?php $x = $a ?? ($b ?? "");',
  89. '<?php $x = isset($a) ? $a : (isset($b) ? $b : "");',
  90. ],
  91. [
  92. '<?php $x = ($a ?? isset($b)) ? $b : "";',
  93. '<?php $x = (isset($a) ? $a : isset($b)) ? $b : "";',
  94. ],
  95. [
  96. '<?php $x = $a ?? isset($b) ? $b : isset($c) ? $c : "";',
  97. '<?php $x = isset($a) ? $a : isset($b) ? $b : isset($c) ? $c : "";',
  98. ],
  99. [
  100. '<?php $x = /*a1*//*a2*/ /*b*/ $a /*c*/ ?? /*d*/ isset($b) /*e*/ ? /*f*/ $b /*g*/ : /*h*/ isset($c) /*i*/ ? /*j*/ $c /*k*/ : /*l*/ "";',
  101. '<?php $x = isset($a) /*a1*//*a2*/ ? /*b*/ $a /*c*/ : /*d*/ isset($b) /*e*/ ? /*f*/ $b /*g*/ : /*h*/ isset($c) /*i*/ ? /*j*/ $c /*k*/ : /*l*/ "";',
  102. ],
  103. [
  104. '<?php $x = (
  105. // c1
  106. // c2
  107. // c3
  108. $a
  109. // c4
  110. ??
  111. // c5
  112. null
  113. /* c6 */
  114. )
  115. # c7
  116. ;',
  117. '<?php $x = (
  118. // c1
  119. isset($a)
  120. // c2
  121. ?
  122. // c3
  123. $a
  124. // c4
  125. :
  126. // c5
  127. null
  128. /* c6 */
  129. )
  130. # c7
  131. ;',
  132. ],
  133. ];
  134. }
  135. }