LowercaseStaticReferenceFixerTest.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  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. * @author Kuba Werłos <werlos@gmail.com>
  16. *
  17. * @covers \PhpCsFixer\Fixer\Casing\LowercaseStaticReferenceFixer
  18. *
  19. * @internal
  20. */
  21. final class LowercaseStaticReferenceFixerTest extends AbstractFixerTestCase
  22. {
  23. /**
  24. * @dataProvider provideFixCases
  25. */
  26. public function testFix(string $expected, ?string $input = null): void
  27. {
  28. $this->doTest($expected, $input);
  29. }
  30. public static function provideFixCases(): iterable
  31. {
  32. return [
  33. [
  34. '<?php class Foo extends Bar { public function baz() { self::qux(); } }',
  35. '<?php class Foo extends Bar { public function baz() { SELF::qux(); } }',
  36. ],
  37. [
  38. '<?php class Foo extends Bar { public function baz() { static::qux(); } }',
  39. '<?php class Foo extends Bar { public function baz() { STATIC::qux(); } }',
  40. ],
  41. [
  42. '<?php class Foo extends Bar { public function baz() { parent::baz(); } }',
  43. '<?php class Foo extends Bar { public function baz() { PARENT::baz(); } }',
  44. ],
  45. [
  46. '<?php class Foo extends Bar { public function baz() { parent::baz(); } }',
  47. '<?php class Foo extends Bar { public function baz() { Parent::baz(); } }',
  48. ],
  49. [
  50. '<?php class Foo extends Bar { public function baz() { return new self(); } }',
  51. '<?php class Foo extends Bar { public function baz() { return new Self(); } }',
  52. ],
  53. [
  54. '<?php class Foo extends Bar { public function baz() { return SelfFoo::FOO; } }',
  55. ],
  56. [
  57. '<?php class Foo extends Bar { public function baz() { return FooSelf::FOO; } }',
  58. ],
  59. [
  60. '<?php class Foo extends Bar { private STATIC $baz; }',
  61. ],
  62. [
  63. '<?php class Foo extends Bar { STATIC private $baz; }',
  64. ],
  65. [
  66. '<?php class Foo extends Bar { public function paRent() {} }',
  67. ],
  68. [
  69. '<?php $foo->Self();',
  70. ],
  71. [
  72. '<?php Foo::Self();',
  73. ],
  74. [
  75. '<?php if ($foo instanceof self) { return true; }',
  76. '<?php if ($foo instanceof Self) { return true; }',
  77. ],
  78. [
  79. '<?php if ($foo instanceof static) { return true; }',
  80. '<?php if ($foo instanceof Static) { return true; }',
  81. ],
  82. [
  83. '<?php if ($foo instanceof parent) { return true; }',
  84. '<?php if ($foo instanceof Parent) { return true; }',
  85. ],
  86. [
  87. '<?php if ($foo instanceof Self\Bar) { return true; }',
  88. ],
  89. [
  90. '<?php if ($foo instanceof MySelf) { return true; }',
  91. ],
  92. [
  93. '<?php class Foo extends Bar { public function baz(self $x) {} }',
  94. '<?php class Foo extends Bar { public function baz(Self $x) {} }',
  95. ],
  96. [
  97. '<?php class Foo extends Bar { public function baz(parent $x) {} }',
  98. '<?php class Foo extends Bar { public function baz(Parent $x) {} }',
  99. ],
  100. [
  101. '<?php class Foo extends Bar { public function baz(MySelf $x) {} }',
  102. ],
  103. [
  104. '<?php class Foo extends Bar { public function baz(Self\Qux $x) {} }',
  105. ],
  106. [
  107. '<?php $a = STATIC function() {};',
  108. ],
  109. [
  110. '<?php class A { public function B() { STATIC $a; echo $a; }}',
  111. ],
  112. [
  113. '<?php class A { public function B() { $collection = $static ? new static($b) : new self(); } }',
  114. '<?php class A { public function B() { $collection = $static ? new STATIC($b) : new self(); } }',
  115. ],
  116. [
  117. '<?php class A { STATIC public function B() {} }',
  118. ],
  119. [
  120. '<?php
  121. $a = function () {
  122. STATIC $B = false;
  123. if ($B) {
  124. echo 1;
  125. }
  126. $B = true;
  127. };
  128. ',
  129. ],
  130. [
  131. '<?php class A { const PARENT = 42; }',
  132. ],
  133. [
  134. '<?php namespace Foo\Parent;',
  135. ],
  136. [
  137. '<?php namespace Parent\Foo;',
  138. ],
  139. [
  140. '<?php class Foo extends Bar { public function baz() : self {} }',
  141. '<?php class Foo extends Bar { public function baz() : Self {} }',
  142. ],
  143. [
  144. '<?php class Foo extends Bar { public function baz() : parent {} }',
  145. '<?php class Foo extends Bar { public function baz() : Parent {} }',
  146. ],
  147. [
  148. '<?php class Foo extends Bar { public function baz() : MySelf {} }',
  149. ],
  150. [
  151. '<?php class Foo extends Bar { public function baz() : Self\Qux {} }',
  152. ],
  153. [
  154. '<?php class Foo extends Bar { public function baz(?self $x) {} }',
  155. '<?php class Foo extends Bar { public function baz(?Self $x) {} }',
  156. ],
  157. [
  158. '<?php class Foo extends Bar { public function baz(?parent $x) {} }',
  159. '<?php class Foo extends Bar { public function baz(?Parent $x) {} }',
  160. ],
  161. [
  162. '<?php class Foo extends Bar { public function baz() : ?self {} }',
  163. '<?php class Foo extends Bar { public function baz() : ?Self {} }',
  164. ],
  165. [
  166. '<?php class Foo extends Bar { public function baz() : ?parent {} }',
  167. '<?php class Foo extends Bar { public function baz() : ?Parent {} }',
  168. ],
  169. [
  170. '<?php class Foo extends Bar { public function baz() : ?MySelf {} }',
  171. ],
  172. [
  173. '<?php class Foo extends Bar { public function baz() : ?Self\Qux {} }',
  174. ],
  175. [
  176. '<?php class Foo {
  177. private STATIC int $baz1;
  178. private STATIC ?int $baz2;
  179. }',
  180. ],
  181. [
  182. '<?php
  183. class Foo { public function bar() {} }
  184. class FooChild extends Foo
  185. {
  186. public function bar()
  187. {
  188. switch (true) {
  189. case parent::bar():
  190. }
  191. }
  192. }',
  193. '<?php
  194. class Foo { public function bar() {} }
  195. class FooChild extends Foo
  196. {
  197. public function bar()
  198. {
  199. switch (true) {
  200. case PARENT::bar():
  201. }
  202. }
  203. }',
  204. ],
  205. ];
  206. }
  207. /**
  208. * @dataProvider provideFix80Cases
  209. *
  210. * @requires PHP 8.0
  211. */
  212. public function testFix80(string $expected, ?string $input = null): void
  213. {
  214. $this->doTest($expected, $input);
  215. }
  216. public static function provideFix80Cases(): iterable
  217. {
  218. yield ['<?php $foo?->Self();'];
  219. yield [
  220. '<?php class Foo extends A {
  221. public function baz1() : int|parent {}
  222. public function baz2() : parent|int {}
  223. public function baz3() : ?parent {}
  224. }',
  225. '<?php class Foo extends A {
  226. public function baz1() : int|Parent {}
  227. public function baz2() : Parent|int {}
  228. public function baz3() : ?Parent {}
  229. }',
  230. ];
  231. yield [
  232. '<?php class Foo extends A {
  233. public function baz1() : int|static {}
  234. public function baz2() : static|int {}
  235. public function baz3() : ?static {}
  236. }',
  237. '<?php class Foo extends A {
  238. public function baz1() : int|STATIC {}
  239. public function baz2() : STATIC|int {}
  240. public function baz3() : ?STATIC {}
  241. }',
  242. ];
  243. yield [
  244. '<?php
  245. class Foo
  246. {
  247. private int|self $prop1, $prop2;
  248. private self|int $prop3, $prop4;
  249. }
  250. ',
  251. '<?php
  252. class Foo
  253. {
  254. private int|SELF $prop1, $prop2;
  255. private SELF|int $prop3, $prop4;
  256. }
  257. ',
  258. ];
  259. }
  260. /**
  261. * @dataProvider provideFix81Cases
  262. *
  263. * @requires PHP 8.1
  264. */
  265. public function testFix81(string $expected, ?string $input = null): void
  266. {
  267. $this->doTest($expected, $input);
  268. }
  269. public static function provideFix81Cases(): iterable
  270. {
  271. yield [
  272. '<?php class A { final const PARENT = 42; }',
  273. ];
  274. yield [
  275. '<?php enum Foo: string { case PARENT = \'parent\'; }',
  276. ];
  277. }
  278. }