CleanNamespaceFixerTest.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  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\NamespaceNotation;
  12. use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
  13. /**
  14. * @internal
  15. *
  16. * @covers \PhpCsFixer\Fixer\NamespaceNotation\CleanNamespaceFixer
  17. */
  18. final class CleanNamespaceFixerTest extends AbstractFixerTestCase
  19. {
  20. /**
  21. * @param string $expected
  22. * @param string $input
  23. *
  24. * @requires PHP <8.0
  25. * @dataProvider provideFixCases
  26. */
  27. public function testFix($expected, $input)
  28. {
  29. $this->doTest($expected, $input);
  30. }
  31. public function provideFixCases()
  32. {
  33. yield [
  34. '<?php use function FooLibrary\Bar\Baz\ClassA as Foo ?>',
  35. '<?php use function FooLibrary \ Bar \ Baz \ /* A */ ClassA as Foo ?>',
  36. ];
  37. yield [
  38. '<?php use function FooLibrary\Bar\Baz\ClassA as Foo;',
  39. '<?php use function FooLibrary \ Bar \ Baz \ /* A */ ClassA as Foo;',
  40. ];
  41. yield [
  42. '<?php namespace AT\B # foo 3
  43. ;',
  44. '<?php namespace AT # foo 1
  45. \ /**
  46. 2
  47. */
  48. B # foo 3
  49. ;',
  50. ];
  51. yield [
  52. '<?php namespace AX\B;',
  53. '<?php namespace AX /* foo */ \ B;',
  54. ];
  55. yield [
  56. '<?php namespace A1\B\C ; // foo',
  57. '<?php namespace A1 \ B \ C ; // foo',
  58. ];
  59. yield [
  60. '<?php echo A\B();A\B();A\B();A\B();',
  61. '<?php echo A \ B();A \ B();A \ B();A \ B();',
  62. ];
  63. yield [
  64. '<?php namespace A\B ?>',
  65. '<?php namespace A \ B ?>',
  66. ];
  67. yield [
  68. '<?php echo /* */ x\y() ?>',
  69. '<?php echo /* */ x \ y() ?>',
  70. ];
  71. yield [
  72. '<?php namespace A\B\C\D;?>',
  73. '<?php namespace A\/* 1 */B/* 2 */\C/* 3 *//* 4 */\/* 5 */D;?>',
  74. ];
  75. yield [
  76. '<?php namespace A\B ?>',
  77. '<?php namespace A \/* 1 */ B ?>',
  78. ];
  79. yield [
  80. '<?php echo A\B(1, 2, 3) ?>',
  81. '<?php echo A \ /* 1 */ B(1, 2, 3) ?>',
  82. ];
  83. yield [
  84. '<?php
  85. namespace A\B\C\D\E /* 5.1 */{ }
  86. namespace B\B\C\D\E /* 5.2 */{ }
  87. namespace C\B\C\D\E /* 5.3 */{ }
  88. namespace D\B\C\D\E /* 5.4 */{ }
  89. namespace E\B\C\D\E /* 5.5 */{ }
  90. ',
  91. '<?php
  92. namespace A /* 1 */ \ B \ /** 2 */ C \ /* 3 */ D /* 4 */ \ E /* 5.1 */{ }
  93. namespace B /* 1 */ \ B \ /* 2 */ C \ /** 3 */ D /* 4 */ \ E /* 5.2 */{ }
  94. namespace C /* 1 */ \ B \ /* 2 */ C \ /* 3 */ D /** 4 */ \ E /* 5.3 */{ }
  95. namespace D /* 1 */ \ B \ /* 2 */ C \ /* 3 */ D /* 4 */ \ E /* 5.4 */{ }
  96. namespace E /* 1 */ \ B \ /* 2 */ C \ /* 3 */ D /* 4 */ \ E /* 5.5 */{ }
  97. ',
  98. ];
  99. yield [
  100. '<?php
  101. namespace A\B;
  102. try {
  103. foo();
  104. } catch ( \ParseError\A\B $e) {
  105. }
  106. if (
  107. !a instanceof \EventDispatcher\EventDispatcherInterface
  108. ) {
  109. foo();
  110. }
  111. ',
  112. '<?php
  113. namespace A \ B;
  114. try {
  115. foo();
  116. } catch ( \ ParseError\ A \ B $e) {
  117. }
  118. if (
  119. !a instanceof \EventDispatcher\/* 1 */EventDispatcherInterface
  120. ) {
  121. foo();
  122. }
  123. ',
  124. ];
  125. if (\PHP_VERSION_ID >= 70000) {
  126. yield [
  127. '<?php use function Foo\iter\ { range, map, filter, apply, reduce, foo\operator };
  128. class Foo
  129. {
  130. private function foo1(): \Exception\A /** 2 */ // trailing comment
  131. {
  132. }
  133. private function foo2(): \Exception // trailing comment
  134. {
  135. }
  136. }',
  137. '<?php use function Foo \ iter /* A */ \ { range, map, filter, apply, reduce, foo \ operator };
  138. class Foo
  139. {
  140. private function foo1(): \Exception \ /* 1 */ A /** 2 */ // trailing comment
  141. {
  142. }
  143. private function foo2(): \Exception // trailing comment
  144. {
  145. }
  146. }',
  147. ];
  148. }
  149. }
  150. }