NoLeadingImportSlashFixerTest.php 6.2 KB

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