CleanNamespaceFixerTest.php 4.0 KB

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