FopenFlagOrderFixerTest.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  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\FunctionNotation;
  13. use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
  14. /**
  15. * @internal
  16. *
  17. * @covers \PhpCsFixer\AbstractFopenFlagFixer
  18. * @covers \PhpCsFixer\Fixer\FunctionNotation\FopenFlagOrderFixer
  19. */
  20. final class FopenFlagOrderFixerTest extends AbstractFixerTestCase
  21. {
  22. /**
  23. * @dataProvider provideFixCases
  24. */
  25. public function testFix(string $expected, ?string $input = null): void
  26. {
  27. $this->doTest($expected, $input);
  28. }
  29. public static function provideFixCases(): iterable
  30. {
  31. yield 'most simple fix case' => [
  32. '<?php
  33. $a = fopen($foo, \'rw+b\');
  34. ',
  35. '<?php
  36. $a = fopen($foo, \'brw+\');
  37. ',
  38. ];
  39. yield '"fopen" casing insensitive' => [
  40. '<?php
  41. $a = \FOPen($foo, "cr+w+b");
  42. $a = \FOPEN($foo, "crw+b");
  43. ',
  44. '<?php
  45. $a = \FOPen($foo, "bw+r+c");
  46. $a = \FOPEN($foo, "bw+rc");
  47. ',
  48. ];
  49. yield 'comments around flags' => [
  50. '<?php
  51. $a = fopen($foo,/*0*/\'rb\'/*1*/);
  52. ',
  53. '<?php
  54. $a = fopen($foo,/*0*/\'br\'/*1*/);
  55. ',
  56. ];
  57. yield 'binary string' => [
  58. '<?php
  59. $a = \fopen($foo, b"cr+w+b");
  60. $b = \fopen($foo, B"crw+b");
  61. $c = \fopen($foo, b\'cr+w+b\');
  62. $d = \fopen($foo, B\'crw+b\');
  63. ',
  64. '<?php
  65. $a = \fopen($foo, b"bw+r+c");
  66. $b = \fopen($foo, B"bw+rc");
  67. $c = \fopen($foo, b\'bw+r+c\');
  68. $d = \fopen($foo, B\'bw+rc\');
  69. ',
  70. ];
  71. yield 'common typos' => [
  72. '<?php
  73. $a = fopen($a, "b+r");
  74. $b = fopen($b, \'b+w\');
  75. ',
  76. ];
  77. // `t` cases
  78. yield [
  79. '<?php
  80. $a = fopen($foo, \'rw+t\');
  81. ',
  82. '<?php
  83. $a = fopen($foo, \'trw+\');
  84. ',
  85. ];
  86. yield [
  87. '<?php
  88. $a = \fopen($foo, \'rw+tb\');
  89. ',
  90. '<?php
  91. $a = \fopen($foo, \'btrw+\');
  92. ',
  93. ];
  94. // don't fix cases
  95. yield 'single flag' => [
  96. '<?php
  97. $a = fopen($foo, "r");
  98. $a = fopen($foo, "r+");
  99. ',
  100. ];
  101. yield 'not simple flags' => [
  102. '<?php
  103. $a = fopen($foo, "br+".$a);
  104. ',
  105. ];
  106. yield 'wrong # of arguments' => [
  107. '<?php
  108. $b = \fopen("br+");
  109. $c = fopen($foo, "bw+", 1, 2 , 3);
  110. ',
  111. ];
  112. yield '"flags" is too long (must be overridden)' => [
  113. '<?php
  114. $d = fopen($foo, "r+w+a+x+c+etbX");
  115. ',
  116. ];
  117. yield 'static method call' => [
  118. '<?php
  119. $e = A::fopen($foo, "bw+");
  120. ',
  121. ];
  122. yield 'method call' => [
  123. '<?php
  124. $f = $b->fopen($foo, "br+");
  125. ',
  126. ];
  127. yield 'comments, PHPDoc and literal' => [
  128. '<?php
  129. // fopen($foo, "brw");
  130. /* fopen($foo, "brw"); */
  131. echo("fopen($foo, \"brw\")");
  132. ',
  133. ];
  134. yield 'invalid flag values' => [
  135. '<?php
  136. $a = fopen($foo, \'\');
  137. $a = fopen($foo, \'x\'); // ok but should not mark collection as changed
  138. $a = fopen($foo, \'k\');
  139. $a = fopen($foo, \'kz\');
  140. $a = fopen($foo, \'k+\');
  141. $a = fopen($foo, \'+k\');
  142. $a = fopen($foo, \'xc++\');
  143. $a = fopen($foo, \'w+r+r+\');
  144. $a = fopen($foo, \'+brw+\');
  145. $a = fopen($foo, \'b+rw\');
  146. $a = fopen($foo, \'bbrw+\');
  147. $a = fopen($foo, \'brw++\');
  148. $a = fopen($foo, \'++brw\');
  149. $a = fopen($foo, \'ybrw+\');
  150. $a = fopen($foo, \'rr\');
  151. $a = fopen($foo, \'ロ\');
  152. $a = fopen($foo, \'ロ+\');
  153. $a = \fopen($foo, \'rロ\');
  154. $a = \fopen($foo, \'w+ロ\');
  155. ',
  156. ];
  157. }
  158. }