NoLeadingImportSlashFixerTest.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  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\Import;
  13. use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
  14. /**
  15. * @author Carlos Cirello <carlos.cirello.nl@gmail.com>
  16. *
  17. * @internal
  18. *
  19. * @covers \PhpCsFixer\Fixer\Import\NoLeadingImportSlashFixer
  20. */
  21. final class NoLeadingImportSlashFixerTest 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. yield [
  33. '<?php
  34. use A\B;
  35. ',
  36. '<?php
  37. use \A\B;
  38. ',
  39. ];
  40. yield [
  41. '<?php
  42. use/*1*/A\C;
  43. ',
  44. '<?php
  45. use/*1*/\A\C;
  46. ',
  47. ];
  48. yield [
  49. '<?php
  50. $a = function(\B\C $a) use ($b){
  51. };
  52. ',
  53. ];
  54. yield [
  55. '<?php
  56. namespace NS;
  57. use A\B;
  58. ',
  59. '<?php
  60. namespace NS;
  61. use \A\B;
  62. ',
  63. ];
  64. yield [
  65. '<?php
  66. namespace NS{
  67. use A\B;
  68. }
  69. namespace NS2{
  70. use C\D;
  71. }
  72. ',
  73. '<?php
  74. namespace NS{
  75. use \A\B;
  76. }
  77. namespace NS2{
  78. use \C\D;
  79. }
  80. ',
  81. ];
  82. yield [
  83. '<?php
  84. namespace Foo {
  85. use A;
  86. use A\X;
  87. new X();
  88. }
  89. namespace Bar {
  90. use B;
  91. use B\X;
  92. new X();
  93. }
  94. ',
  95. '<?php
  96. namespace Foo {
  97. use \A;
  98. use \A\X;
  99. new X();
  100. }
  101. namespace Bar {
  102. use \B;
  103. use \B\X;
  104. new X();
  105. }
  106. ',
  107. ];
  108. yield [
  109. '<?php
  110. namespace Foo\Bar;
  111. use Baz;
  112. class Foo implements Baz {}
  113. ',
  114. '<?php
  115. namespace Foo\Bar;
  116. use \Baz;
  117. class Foo implements Baz {}
  118. ',
  119. ];
  120. yield [
  121. '<?php
  122. trait SomeTrait {
  123. use \A;
  124. }
  125. ',
  126. ];
  127. yield [
  128. '<?php
  129. namespace NS{
  130. use A\B;
  131. trait Tr8A{
  132. use \B, \C;
  133. }
  134. }
  135. namespace NS2{
  136. use C\D;
  137. }
  138. ',
  139. '<?php
  140. namespace NS{
  141. use \A\B;
  142. trait Tr8A{
  143. use \B, \C;
  144. }
  145. }
  146. namespace NS2{
  147. use \C\D;
  148. }
  149. ',
  150. ];
  151. yield [
  152. '<?php
  153. trait Foo {}
  154. class Bar {
  155. use \Foo;
  156. }
  157. ',
  158. ];
  159. yield [
  160. '<?php
  161. use function a\b;
  162. use const d\e;
  163. ',
  164. '<?php
  165. use function \a\b;
  166. use const \d\e;
  167. ',
  168. ];
  169. yield [
  170. '<?php
  171. namespace AAA;
  172. use some\a\{ClassA, ClassB, ClassC as C,};
  173. use function some\a\{fn_a, fn_b, fn_c,};
  174. use const some\a\{ConstA,ConstB,ConstC
  175. ,
  176. };
  177. use const some\Z\{ConstX,ConstY,ConstZ,};
  178. ',
  179. '<?php
  180. namespace AAA;
  181. use \some\a\{ClassA, ClassB, ClassC as C,};
  182. use function \some\a\{fn_a, fn_b, fn_c,};
  183. use const \some\a\{ConstA,ConstB,ConstC
  184. ,
  185. };
  186. use const \some\Z\{ConstX,ConstY,ConstZ,};
  187. ',
  188. ];
  189. }
  190. /**
  191. * @dataProvider provideFixPrePHP80Cases
  192. *
  193. * @requires PHP <8.0
  194. */
  195. public function testFixPrePHP80(string $expected, ?string $input = null): void
  196. {
  197. $this->doTest($expected, $input);
  198. }
  199. public static function provideFixPrePHP80Cases(): iterable
  200. {
  201. yield [
  202. '<?php use /*1*/A\D;',
  203. '<?php use\/*1*/A\D;',
  204. ];
  205. yield 'no space case' => [
  206. '<?php
  207. use Events\Payment\Base as PaymentEvent;
  208. use const d\e;
  209. ',
  210. '<?php
  211. use\Events\Payment\Base as PaymentEvent;
  212. use const\d\e;
  213. ',
  214. ];
  215. yield [
  216. '<?php
  217. use C;
  218. use C\X;
  219. namespace Foo {
  220. use A;
  221. use A\X;
  222. new X();
  223. }
  224. namespace Bar {
  225. use B;
  226. use B\X;
  227. new X();
  228. }
  229. ',
  230. '<?php
  231. use \C;
  232. use \C\X;
  233. namespace Foo {
  234. use \A;
  235. use \A\X;
  236. new X();
  237. }
  238. namespace Bar {
  239. use \B;
  240. use \B\X;
  241. new X();
  242. }
  243. ',
  244. ];
  245. }
  246. }