SingleTraitInsertPerStatementFixerTest.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  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\ClassNotation;
  13. use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
  14. /**
  15. * @internal
  16. *
  17. * @covers \PhpCsFixer\Fixer\ClassNotation\SingleTraitInsertPerStatementFixer
  18. */
  19. final class SingleTraitInsertPerStatementFixerTest extends AbstractFixerTestCase
  20. {
  21. /**
  22. * @dataProvider provideFixCases
  23. */
  24. public function testFix(string $expected, ?string $input = null): void
  25. {
  26. $this->doTest($expected, $input);
  27. }
  28. public static function provideFixCases(): iterable
  29. {
  30. yield 'simple' => [
  31. '<?php
  32. final class Example
  33. {
  34. use Foo;use Bar;
  35. }
  36. ',
  37. '<?php
  38. final class Example
  39. {
  40. use Foo, Bar;
  41. }
  42. ',
  43. ];
  44. yield 'simple I' => [
  45. '<?php
  46. final class Example
  47. {
  48. use Foo;use Bar;
  49. }
  50. ',
  51. '<?php
  52. final class Example
  53. {
  54. use Foo,Bar;
  55. }
  56. ',
  57. ];
  58. yield 'simple II' => [
  59. '<?php
  60. use Foo\Bar, Foo\Bar2; // do not touch
  61. final class Example
  62. {
  63. use Foo;use Bar ;
  64. }
  65. ',
  66. '<?php
  67. use Foo\Bar, Foo\Bar2; // do not touch
  68. final class Example
  69. {
  70. use Foo, Bar ;
  71. }
  72. ',
  73. ];
  74. yield 'simple III' => [
  75. '<?php
  76. class Example
  77. {
  78. use Foo;use Bar;
  79. public function baz() {}
  80. }
  81. ',
  82. '<?php
  83. class Example
  84. {
  85. use Foo, Bar;
  86. public function baz() {}
  87. }
  88. ',
  89. ];
  90. yield 'multiple' => [
  91. '<?php
  92. final class Example
  93. {
  94. use Foo;
  95. use Foo00;use Bar01;
  96. use Foo10;use Bar11;use Bar110;
  97. use Foo20;use Bar20;use Bar200;use Bar201;
  98. }
  99. ',
  100. '<?php
  101. final class Example
  102. {
  103. use Foo;
  104. use Foo00, Bar01;
  105. use Foo10, Bar11, Bar110;
  106. use Foo20, Bar20, Bar200, Bar201;
  107. }
  108. ',
  109. ];
  110. yield 'multiple_multiline' => [
  111. '<?php
  112. final class Example
  113. {
  114. use Foo;
  115. use Bar;
  116. use Baz;
  117. }
  118. ',
  119. '<?php
  120. final class Example
  121. {
  122. use Foo,
  123. Bar,
  124. Baz;
  125. }
  126. ',
  127. ];
  128. yield 'multiple_multiline_with_comment' => [
  129. '<?php
  130. final class Example
  131. {
  132. use Foo;
  133. use Bar;
  134. // Bazz,
  135. use Baz;
  136. }
  137. ',
  138. '<?php
  139. final class Example
  140. {
  141. use Foo,
  142. Bar,
  143. // Bazz,
  144. Baz;
  145. }
  146. ',
  147. ];
  148. yield 'namespaces' => [
  149. '<?php
  150. class Z
  151. {
  152. use X\Y\Z0;use X\Y\Z0;use M;
  153. use X\Y\Z1;use X\Y\Z1;
  154. }
  155. ',
  156. '<?php
  157. class Z
  158. {
  159. use X\Y\Z0, X\Y\Z0, M;
  160. use X\Y\Z1, X\Y\Z1;
  161. }
  162. ',
  163. ];
  164. yield 'comments' => [
  165. '<?php
  166. class ZZ
  167. {#1
  168. use#2
  169. Z/* 2 */ #3
  170. #4
  171. ;#5
  172. #6
  173. use T#7
  174. #8
  175. ;#9
  176. #10
  177. }
  178. ',
  179. '<?php
  180. class ZZ
  181. {#1
  182. use#2
  183. Z/* 2 */ #3
  184. #4
  185. ,#5
  186. #6
  187. T#7
  188. #8
  189. ;#9
  190. #10
  191. }
  192. ',
  193. ];
  194. yield 'two classes. same file' => [
  195. '<?php
  196. namespace Foo;
  197. class Test1
  198. {
  199. use A;use B; /** use A2, B2; */
  200. }
  201. ?>
  202. <?php
  203. class Test2
  204. {
  205. use A1;use B1; # use A2, B2;
  206. }
  207. ',
  208. '<?php
  209. namespace Foo;
  210. class Test1
  211. {
  212. use A, B; /** use A2, B2; */
  213. }
  214. ?>
  215. <?php
  216. class Test2
  217. {
  218. use A1, B1; # use A2, B2;
  219. }
  220. ',
  221. ];
  222. yield 'do not fix group' => [
  223. '<?php
  224. class Talker {
  225. use A, B {
  226. B::smallTalk insteadof A;
  227. A::bigTalk insteadof B;
  228. }
  229. }',
  230. ];
  231. }
  232. public function testAnonymousClassFixing(): void
  233. {
  234. $this->doTest(
  235. '<?php new class { use A;use B;}?>',
  236. '<?php new class { use A, B;}?>'
  237. );
  238. }
  239. }