FopenFlagsFixerTest.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  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\FunctionNotation;
  12. use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
  13. /**
  14. * @author SpacePossum
  15. *
  16. * @internal
  17. *
  18. * @covers \PhpCsFixer\AbstractFopenFlagFixer
  19. * @covers \PhpCsFixer\Fixer\FunctionNotation\FopenFlagsFixer
  20. */
  21. final class FopenFlagsFixerTest extends AbstractFixerTestCase
  22. {
  23. /**
  24. * @param string $expected
  25. * @param string $input
  26. *
  27. * @dataProvider provideFixCases
  28. */
  29. public function testFix($expected, $input, array $config = [])
  30. {
  31. $this->fixer->configure($config);
  32. $this->doTest($expected, $input);
  33. }
  34. public function provideFixCases()
  35. {
  36. return [
  37. 'missing "b"' => [
  38. '<?php
  39. $a = fopen($foo, \'rw+b\');
  40. ',
  41. '<?php
  42. $a = fopen($foo, \'rw+\');
  43. ',
  44. ],
  45. 'has "t" and "b"' => [
  46. '<?php
  47. $a = \fopen($foo, "rw+b");
  48. ',
  49. '<?php
  50. $a = \fopen($foo, "rw+bt");
  51. ',
  52. ],
  53. 'has "t" and no "b" and binary string mod' => [
  54. '<?php
  55. $a = fopen($foo, b\'rw+b\');
  56. ',
  57. '<?php
  58. $a = fopen($foo, b\'trw+\');
  59. ',
  60. ],
  61. // configure remove b
  62. 'missing "b" but not configured' => [
  63. '<?php
  64. $a = fopen($foo, \'rw+\');
  65. ',
  66. '<?php
  67. $a = fopen($foo, \'rw+t\');
  68. ',
  69. ['b_mode' => false],
  70. ],
  71. '"t" and superfluous "b"' => [
  72. '<?php
  73. $a = fopen($foo, \'r+\');
  74. $a = fopen($foo, \'w+r\');
  75. $a = fopen($foo, \'r+\');
  76. $a = fopen($foo, \'w+r\');
  77. ',
  78. '<?php
  79. $a = fopen($foo, \'r+bt\');
  80. $a = fopen($foo, \'btw+r\');
  81. $a = fopen($foo, \'r+tb\');
  82. $a = fopen($foo, \'tbw+r\');
  83. ',
  84. ['b_mode' => false],
  85. ],
  86. 'superfluous "b"' => [
  87. '<?php
  88. $a = fopen($foo, \'r+\');
  89. $a = fopen($foo, \'w+r\');
  90. ',
  91. '<?php
  92. $a = fopen($foo, \'r+b\');
  93. $a = fopen($foo, \'bw+r\');
  94. ',
  95. ['b_mode' => false],
  96. ],
  97. ];
  98. }
  99. /**
  100. * @param string $expected
  101. *
  102. * @dataProvider provideDoNotFixCases
  103. */
  104. public function testDoNotFix($expected)
  105. {
  106. $this->doTest($expected);
  107. $this->fixer->configure(['b_mode' => false]);
  108. $this->doTest($expected);
  109. }
  110. public function provideDoNotFixCases()
  111. {
  112. return [
  113. 'not simple flags' => [
  114. '<?php $a = fopen($foo, "t".$a);',
  115. ],
  116. 'wrong # of arguments' => [
  117. '<?php
  118. $b = fopen("br+");
  119. $c = fopen($foo, "w+", 1, 2 , 3);
  120. ',
  121. ],
  122. '"flags" is too long (must be overridden)' => [
  123. '<?php $d = fopen($foo, "r+w+a+x+c+etXY");',
  124. ],
  125. '"flags" is too short (must be overridden)' => [
  126. '<?php $d = fopen($foo, "");',
  127. ],
  128. 'static method call' => [
  129. '<?php $e = A::fopen($foo, "w+");',
  130. ],
  131. 'method call' => [
  132. '<?php $f = $b->fopen($foo, "r+");',
  133. ],
  134. 'comments, PHPDoc and literal' => [
  135. '<?php
  136. // fopen($foo, "rw");
  137. /* fopen($foo, "rw"); */
  138. echo("fopen($foo, \"rw\")");
  139. ',
  140. ],
  141. 'invalid flag values' => [
  142. '<?php
  143. $a = fopen($foo, \'\');
  144. $a = fopen($foo, \'k\');
  145. $a = fopen($foo, \'kz\');
  146. $a = fopen($foo, \'k+\');
  147. $a = fopen($foo, \'+k\');
  148. $a = fopen($foo, \'xct++\');
  149. $a = fopen($foo, \'w+r+r+\');
  150. $a = fopen($foo, \'+btrw+\');
  151. $a = fopen($foo, \'b+rw\');
  152. $a = fopen($foo, \'bbrw+\');
  153. $a = fopen($foo, \'brw++\');
  154. $a = fopen($foo, \'++brw\');
  155. $a = fopen($foo, \'ybrw+\');
  156. $a = fopen($foo, \'rr\');
  157. $a = fopen($foo, \'ロ\');
  158. $a = fopen($foo, \'ロ+\');
  159. $a = fopen($foo, \'rロ\');
  160. $a = \fopen($foo, \'w+ロ\');
  161. ',
  162. ],
  163. [
  164. '<?php
  165. echo "abc"; // to pass the candidate check
  166. $a = fopen($foo, 1);
  167. $a = fopen($foo, $a);
  168. $a = fopen($foo, null);
  169. ',
  170. ],
  171. ];
  172. }
  173. }