SingleImportPerStatementFixerTest.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  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 Dariusz Rumiński <dariusz.ruminski@gmail.com>
  16. * @author SpacePossum
  17. *
  18. * @internal
  19. *
  20. * @covers \PhpCsFixer\Fixer\Import\SingleImportPerStatementFixer
  21. */
  22. final class SingleImportPerStatementFixerTest extends AbstractFixerTestCase
  23. {
  24. /**
  25. * @param string $expected
  26. * @param null|string $input
  27. *
  28. * @dataProvider provideCases
  29. */
  30. public function testFix($expected, $input = null)
  31. {
  32. $this->doTest($expected, $input);
  33. }
  34. public function provideCases()
  35. {
  36. return array(
  37. array(
  38. '<?php
  39. /**/use Foo;
  40. use FooB;
  41. ',
  42. '<?php
  43. /**/use Foo,FooB;
  44. ',
  45. ),
  46. array(
  47. <<<'EOF'
  48. use Some, Not, PHP, Like, Use, Statement;
  49. <?php
  50. use Foo;
  51. use FooA;
  52. use FooB;
  53. use FooC;
  54. use FooD as D;
  55. use FooE;
  56. use FooF;
  57. use FooG as G;
  58. use FooH;
  59. use FooI;
  60. use FooJ;
  61. use FooZ;
  62. EOF
  63. ,
  64. <<<'EOF'
  65. use Some, Not, PHP, Like, Use, Statement;
  66. <?php
  67. use Foo;
  68. use FooA, FooB;
  69. use FooC, FooD as D, FooE;
  70. use FooF,
  71. FooG as G,
  72. FooH, FooI,
  73. FooJ;
  74. use FooZ;
  75. EOF
  76. ),
  77. array(
  78. <<<'EOF'
  79. <?php
  80. namespace {
  81. use Foo;
  82. use FooA;
  83. use FooB;
  84. use FooC;
  85. use FooD as D;
  86. use FooE;
  87. use FooF;
  88. use FooG as G;
  89. use FooH;
  90. use FooI;
  91. use FooJ;
  92. use FooZ;
  93. }
  94. namespace Boo {
  95. use Bar;
  96. use BarA;
  97. use BarB;
  98. use BarC;
  99. use BarD as D;
  100. use BarE;
  101. use BarF;
  102. use BarG as G;
  103. use BarH;
  104. use BarI;
  105. use BarJ;
  106. use BarZ;
  107. }
  108. EOF
  109. ,
  110. <<<'EOF'
  111. <?php
  112. namespace {
  113. use Foo;
  114. use FooA, FooB;
  115. use FooC, FooD as D, FooE;
  116. use FooF,
  117. FooG as G,
  118. FooH, FooI,
  119. FooJ;
  120. use FooZ;
  121. }
  122. namespace Boo {
  123. use Bar;
  124. use BarA, BarB;
  125. use BarC, BarD as D, BarE;
  126. use BarF,
  127. BarG as G,
  128. BarH, BarI,
  129. BarJ;
  130. use BarZ;
  131. }
  132. EOF
  133. ),
  134. array(
  135. '<?php
  136. use FooA;
  137. use FooB;
  138. ',
  139. '<?php
  140. use FooA, FooB;
  141. ',
  142. ),
  143. array(
  144. '<?php use FooA;
  145. use FooB?>',
  146. '<?php use FooA, FooB?>',
  147. ),
  148. array(
  149. '<?php
  150. use B;
  151. use C;
  152. use E;
  153. use F;
  154. use G;
  155. use H;
  156. ',
  157. '<?php
  158. use B,C;
  159. use E,F;
  160. use G,H;
  161. ',
  162. ),
  163. array(
  164. '<?php
  165. use B;
  166. /*
  167. */use C;
  168. ',
  169. '<?php
  170. use B,
  171. /*
  172. */C;
  173. ',
  174. ),
  175. array(
  176. '<?php
  177. use A;
  178. use B;
  179. //,{} use ; :
  180. #,{} use ; :
  181. /*,{} use ; :*/
  182. use C ; ',
  183. '<?php
  184. use A,B,
  185. //,{} use ; :
  186. #,{} use ; :
  187. /*,{} use ; :*/
  188. C ; ',
  189. ),
  190. array(
  191. '<?php use Z ;
  192. use X ?><?php new X(); // run before white space around semicolon',
  193. '<?php use Z , X ?><?php new X(); // run before white space around semicolon',
  194. ),
  195. );
  196. }
  197. /**
  198. * @param string $expected
  199. * @param null|string $input
  200. *
  201. * @dataProvider provide70Cases
  202. * @requires PHP 7.0
  203. */
  204. public function test70($expected, $input = null)
  205. {
  206. $this->doTest($expected, $input);
  207. }
  208. public function provide70Cases()
  209. {
  210. return array(
  211. array(
  212. '<?php
  213. use some\a\ClassA;
  214. use some\a\ClassB;
  215. use some\a\ClassC as C;
  216. use function some\b\fn_a;
  217. use function some\b\fn_b;
  218. use function some\b\fn_c;
  219. use const some\c\ConstA/**/as/**/E; /* group comment */
  220. use const some\c\ConstB as D;
  221. use const some\c\// use.,{}
  222. ConstC;
  223. use A\{B};
  224. use D\E;
  225. use D\F;
  226. ',
  227. '<?php
  228. use some\a\{ClassA, ClassB, ClassC as C};
  229. use function some\b\{fn_a, fn_b, fn_c};
  230. use const/* group comment */some\c\{ConstA/**/as/**/ E , ConstB AS D, '.'
  231. // use.,{}
  232. ConstC};
  233. use A\{B};
  234. use D\{E,F};
  235. ',
  236. ),
  237. array(
  238. '<?php use FooA#
  239. ;#
  240. #
  241. use FooB;',
  242. '<?php use FooA#
  243. ,#
  244. #
  245. FooB;',
  246. ),
  247. );
  248. }
  249. /**
  250. * @param string $expected
  251. * @param null|string $input
  252. *
  253. * @dataProvider provideMessyWhitespacesCases
  254. */
  255. public function testMessyWhitespaces($expected, $input = null)
  256. {
  257. $this->fixer->setWhitespacesConfig(new WhitespacesFixerConfig("\t", "\r\n"));
  258. $this->doTest($expected, $input);
  259. }
  260. public function provideMessyWhitespacesCases()
  261. {
  262. return array(
  263. array(
  264. "<?php\r\n use FooA;\r\n use FooB;",
  265. "<?php\r\n use FooA, FooB;",
  266. ),
  267. );
  268. }
  269. }