NativeFunctionCasingFixerTest.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  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\Casing;
  13. use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
  14. /**
  15. * @internal
  16. *
  17. * @covers \PhpCsFixer\Fixer\Casing\NativeFunctionCasingFixer
  18. */
  19. final class NativeFunctionCasingFixerTest extends AbstractFixerTestCase
  20. {
  21. /**
  22. * @dataProvider provideFixCases
  23. */
  24. public function testFix(string $expected, ?string $input = null): void
  25. {
  26. $this->doTest($expected, $input);
  27. }
  28. public static function provideFixCases(): iterable
  29. {
  30. yield [
  31. '<?php
  32. namespace Bar {
  33. function STRLEN($str) {
  34. return "overriden" . \strlen($str);
  35. }
  36. }
  37. namespace {
  38. echo \Bar\STRLEN("xxx");
  39. }',
  40. ];
  41. yield [
  42. '<?php
  43. echo strtolower("hello 1");
  44. ',
  45. '<?php
  46. echo STRTOLOWER("hello 1");
  47. ',
  48. ];
  49. yield [
  50. '<?php
  51. echo strtolower //a
  52. ("hello 2");
  53. ',
  54. '<?php
  55. echo STRTOLOWER //a
  56. ("hello 2");
  57. ',
  58. ];
  59. yield [
  60. '<?php
  61. echo strtolower /**/ ("hello 3");
  62. ',
  63. '<?php
  64. echo STRTOLOWER /**/ ("hello 3");
  65. ',
  66. ];
  67. yield [
  68. '<?php
  69. echo \sqrt(4);
  70. ',
  71. '<?php
  72. echo \sQrT(4);
  73. ',
  74. ];
  75. yield [
  76. '<?php
  77. echo "1".\sqrt("hello 5");
  78. ',
  79. '<?php
  80. echo "1".\SQRT("hello 5");
  81. ',
  82. ];
  83. yield [
  84. '<?php
  85. class Test{
  86. public function gettypE()
  87. {
  88. return 1;
  89. }
  90. function sqrT($a)
  91. {
  92. }
  93. function &END($a)
  94. {
  95. }
  96. }
  97. ',
  98. ];
  99. yield [
  100. '<?php
  101. new STRTOLOWER();
  102. ',
  103. ];
  104. yield [
  105. '<?php
  106. new \STRTOLOWER();
  107. ',
  108. ];
  109. yield [
  110. '<?php
  111. new \A\B\STRTOLOWER();
  112. ',
  113. ];
  114. yield [
  115. '<?php
  116. a::STRTOLOWER();
  117. ',
  118. ];
  119. yield [
  120. '<?php
  121. $a->STRTOLOWER();
  122. ',
  123. ];
  124. yield [
  125. '<?php fOoO();',
  126. ];
  127. yield [
  128. '<?php
  129. namespace Foo {
  130. function &Next() {
  131. return prev(-1);
  132. }
  133. }',
  134. ];
  135. yield [
  136. '<?php
  137. $next1 = & next($array1);
  138. $next2 = & \next($array2);
  139. ',
  140. '<?php
  141. $next1 = & Next($array1);
  142. $next2 = & \Next($array2);
  143. ',
  144. ];
  145. yield [
  146. '<?php
  147. namespace Foo;
  148. use function MyStuff\StrToLower;
  149. class Bar {
  150. public function getName() {
  151. return StrToLower($this->name);
  152. }
  153. }',
  154. ];
  155. yield [
  156. '<?php
  157. echo \sqrt(4 , );
  158. ',
  159. '<?php
  160. echo \sQrT(4 , );
  161. ',
  162. ];
  163. yield [
  164. '<?php
  165. $a->STRTOLOWER(1,);
  166. ',
  167. ];
  168. }
  169. /**
  170. * @dataProvider provideFix80Cases
  171. *
  172. * @requires PHP 8.0
  173. */
  174. public function testFix80(string $expected): void
  175. {
  176. $this->doTest($expected);
  177. }
  178. public static function provideFix80Cases(): iterable
  179. {
  180. yield ['<?php $a?->STRTOLOWER(1,);'];
  181. yield [
  182. '<?php
  183. final class SomeClass
  184. {
  185. #[File(mimeTypes: ["application/pdf", "image/*"])]
  186. public FileBlob $attachment;
  187. }
  188. ',
  189. ];
  190. }
  191. }