SingleLineAfterImportsFixerTest.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457
  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\Test\AbstractFixerTestCase;
  13. use PhpCsFixer\WhitespacesFixerConfig;
  14. /**
  15. * @author Ceeram <ceeram@cakephp.org>
  16. *
  17. * @internal
  18. *
  19. * @covers \PhpCsFixer\Fixer\Import\SingleLineAfterImportsFixer
  20. */
  21. final class SingleLineAfterImportsFixerTest extends AbstractFixerTestCase
  22. {
  23. /**
  24. * @param string $expected
  25. * @param null|string $input
  26. *
  27. * @dataProvider provideCases
  28. */
  29. public function testFix($expected, $input = null)
  30. {
  31. $this->doTest($expected, $input);
  32. }
  33. public function provideCases()
  34. {
  35. return array(
  36. array(
  37. '<?php
  38. use D;
  39. use E;
  40. use DP; /**/
  41. use EZ; //
  42. use DAZ;
  43. use EGGGG; /**/
  44. use A\B;
  45. use C\DE;
  46. use E\F;
  47. use G\H;
  48. ',
  49. '<?php
  50. use D; use E;
  51. use DP; /**/ use EZ; //
  52. use DAZ; use EGGGG; /**/
  53. use A\B;
  54. use C\DE;
  55. use E\F;
  56. use G\H;
  57. ',
  58. ),
  59. array(
  60. '<?php use \Exception;
  61. ?>
  62. <?php
  63. $a = new Exception();
  64. ',
  65. '<?php use \Exception?>
  66. <?php
  67. $a = new Exception();
  68. ',
  69. ),
  70. array(
  71. '<?php use \stdClass;
  72. use \DateTime;
  73. ?>
  74. <?php
  75. $a = new DateTime();
  76. ',
  77. '<?php use \stdClass; use \DateTime?>
  78. <?php
  79. $a = new DateTime();
  80. ', ),
  81. array(
  82. '<?php namespace Foo;
  83. '.'
  84. use Bar\Baz;
  85. /**
  86. * Foo.
  87. */',
  88. '<?php namespace Foo;
  89. '.'
  90. use Bar\Baz;
  91. /**
  92. * Foo.
  93. */',
  94. ),
  95. array(
  96. '<?php
  97. namespace A\B;
  98. use D;
  99. class C {}
  100. ',
  101. '<?php
  102. namespace A\B;
  103. use D;
  104. class C {}
  105. ',
  106. ),
  107. array(
  108. '<?php
  109. namespace A\B;
  110. use D;
  111. class C {}
  112. ',
  113. '<?php
  114. namespace A\B;
  115. use D;
  116. class C {}
  117. ',
  118. ),
  119. array(
  120. '<?php
  121. namespace A\B;
  122. use D;
  123. use E;
  124. class C {}
  125. ',
  126. '<?php
  127. namespace A\B;
  128. use D;
  129. use E;
  130. class C {}
  131. ',
  132. ),
  133. array(
  134. '<?php
  135. namespace A\B;
  136. use D;
  137. class C {}
  138. ',
  139. '<?php
  140. namespace A\B;
  141. use D; class C {}
  142. ',
  143. ),
  144. array(
  145. '<?php
  146. namespace A\B;
  147. use D;
  148. use E;
  149. {
  150. class C {}
  151. }',
  152. '<?php
  153. namespace A\B;
  154. use D; use E; {
  155. class C {}
  156. }',
  157. ),
  158. array(
  159. '<?php
  160. namespace A\B;
  161. use D;
  162. use E;
  163. {
  164. class C {}
  165. }',
  166. '<?php
  167. namespace A\B;
  168. use D;
  169. use E; {
  170. class C {}
  171. }',
  172. ),
  173. array(
  174. '<?php
  175. namespace A\B {
  176. use D;
  177. use E;
  178. class C {}
  179. }',
  180. '<?php
  181. namespace A\B {
  182. use D; use E; class C {}
  183. }',
  184. ),
  185. array(
  186. '<?php
  187. namespace A\B;
  188. class C {
  189. use SomeTrait;
  190. }',
  191. ),
  192. array(
  193. '<?php
  194. $lambda = function () use (
  195. $arg
  196. ){
  197. return true;
  198. };',
  199. ),
  200. array(
  201. '<?php
  202. namespace A\B;
  203. use D, E;
  204. class C {
  205. }',
  206. '<?php
  207. namespace A\B;
  208. use D, E;
  209. class C {
  210. }',
  211. ),
  212. array(
  213. '<?php
  214. namespace A1;
  215. use B1; // need to import this !
  216. use B2;
  217. class C1 {}
  218. ',
  219. ),
  220. array(
  221. '<?php
  222. namespace A2;
  223. use B2;// need to import this !
  224. use B3;
  225. class C4 {}
  226. ',
  227. ),
  228. array(
  229. '<?php
  230. namespace A1;
  231. use B1; // need to import this !
  232. use B2;
  233. class C1 {}
  234. ',
  235. ),
  236. array(
  237. '<?php
  238. namespace A1;
  239. use B1;// need to import this !
  240. use B2;
  241. class C1 {}
  242. ',
  243. ),
  244. array(
  245. '<?php
  246. namespace A1;
  247. use B1; /** need to import this !*/
  248. use B2;
  249. class C1 {}
  250. ',
  251. ),
  252. array(
  253. '<?php
  254. namespace A1;
  255. use B1;# need to import this !
  256. use B2;
  257. class C1 {}
  258. ',
  259. ),
  260. array(
  261. '<?php
  262. namespace Foo;
  263. use Bar;
  264. use Baz;
  265. class Hello {}
  266. ',
  267. '<?php
  268. namespace Foo;
  269. use Bar;
  270. use Baz;
  271. class Hello {}
  272. ',
  273. ),
  274. array(
  275. '<?php
  276. class HelloTrait {
  277. use SomeTrait;
  278. use Another;// ensure use statements for traits are not touched
  279. }
  280. ',
  281. ),
  282. array(
  283. '<?php
  284. namespace Foo {}
  285. namespace Bar {
  286. class Baz
  287. {
  288. use Aaa;
  289. }
  290. }
  291. ',
  292. ),
  293. array(
  294. '<?php use A\B;
  295. ?>',
  296. '<?php use A\B?>',
  297. ),
  298. array(
  299. '<?php use A\B;
  300. ',
  301. '<?php use A\B;',
  302. ),
  303. );
  304. }
  305. /**
  306. * @param string $expected
  307. * @param null|string $input
  308. *
  309. * @dataProvider provide70Cases
  310. * @requires PHP 7.0
  311. */
  312. public function test70($expected, $input = null)
  313. {
  314. $this->doTest($expected, $input);
  315. }
  316. public function provide70Cases()
  317. {
  318. return array(
  319. array(
  320. '<?php
  321. use some\test\{ClassA, ClassB, ClassC as C};
  322. ?>
  323. test 123
  324. ',
  325. '<?php
  326. use some\test\{ClassA, ClassB, ClassC as C} ?>
  327. test 123
  328. ',
  329. ),
  330. array(
  331. '<?php
  332. use some\test\{CA, Cl, ClassC as C};
  333. class Test {}
  334. ',
  335. '<?php
  336. use some\test\{CA, Cl, ClassC as C};
  337. class Test {}
  338. ',
  339. ),
  340. array(
  341. '<?php
  342. use function some\test\{fn_g, fn_f, fn_e};
  343. fn_a();',
  344. '<?php
  345. use function some\test\{fn_g, fn_f, fn_e};
  346. fn_a();',
  347. ),
  348. array(
  349. '<?php
  350. use const some\test\{ConstA, ConstB, ConstD};
  351. ',
  352. '<?php
  353. use const some\test\{ConstA, ConstB, ConstD};
  354. ',
  355. ),
  356. array(
  357. '<?php
  358. namespace Z\B;
  359. use const some\test\{ConstA, ConstB, ConstC};
  360. use A\B\C;
  361. ',
  362. '<?php
  363. namespace Z\B;
  364. use const some\test\{ConstA, ConstB, ConstC};
  365. use A\B\C;
  366. ',
  367. ),
  368. );
  369. }
  370. /**
  371. * @param string $expected
  372. * @param null|string $input
  373. *
  374. * @dataProvider provideMessyWhitespacesCases
  375. */
  376. public function testMessyWhitespaces($expected, $input = null)
  377. {
  378. $this->fixer->setWhitespacesConfig(new WhitespacesFixerConfig("\t", "\r\n"));
  379. $this->doTest($expected, $input);
  380. }
  381. public function provideMessyWhitespacesCases()
  382. {
  383. return array(
  384. array(
  385. "<?php namespace A\B;\r\n use D;\r\n\r\n class C {}",
  386. "<?php namespace A\B;\r\n use D;\r\n\r\n\r\n class C {}",
  387. ),
  388. array(
  389. "<?php namespace A\B;\r\n use D;\r\n\r\n class C {}",
  390. "<?php namespace A\B;\r\n use D;\r\n class C {}",
  391. ),
  392. );
  393. }
  394. }