PhpdocVarAnnotationCorrectOrderFixerTest.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  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\Phpdoc;
  13. use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
  14. /**
  15. * @internal
  16. *
  17. * @author Kuba Werłos <werlos@gmail.com>
  18. *
  19. * @covers \PhpCsFixer\Fixer\Phpdoc\PhpdocVarAnnotationCorrectOrderFixer
  20. */
  21. final class PhpdocVarAnnotationCorrectOrderFixerTest extends AbstractFixerTestCase
  22. {
  23. /**
  24. * @dataProvider provideFixCases
  25. */
  26. public function testFix(string $expected, ?string $input = null): void
  27. {
  28. $this->doTest($expected, $input);
  29. }
  30. public static function provideFixCases(): iterable
  31. {
  32. yield [ // It's @param, we care only about @var
  33. '<?php /** @param $foo Foo */',
  34. ];
  35. yield [ // This is already fine
  36. '<?php /** @var Foo $foo */ ',
  37. ];
  38. yield [ // What? Two variables, I'm not touching this
  39. '<?php /** @var $foo $bar */',
  40. ];
  41. yield [ // Two classes are not to touch either
  42. '<?php /** @var Foo Bar */',
  43. ];
  44. yield ['<?php /** @var */'];
  45. yield ['<?php /** @var $foo */'];
  46. yield ['<?php /** @var Bar */'];
  47. yield [
  48. '<?php
  49. /**
  50. * @var Foo $foo
  51. * @var Bar $bar
  52. */
  53. ',
  54. '<?php
  55. /**
  56. * @var $foo Foo
  57. * @var $bar Bar
  58. */
  59. ',
  60. ];
  61. yield [
  62. '<?php
  63. /**
  64. * @var Foo $foo Some description
  65. */
  66. ',
  67. '<?php
  68. /**
  69. * @var $foo Foo Some description
  70. */
  71. ',
  72. ];
  73. yield [
  74. '<?php /** @var Foo $foo */',
  75. '<?php /** @var $foo Foo */',
  76. ];
  77. yield [
  78. '<?php /** @type Foo $foo */',
  79. '<?php /** @type $foo Foo */',
  80. ];
  81. yield [
  82. '<?php /** @var Foo $foo*/',
  83. '<?php /** @var $foo Foo*/',
  84. ];
  85. yield [
  86. '<?php /** @var Foo[] $foos */',
  87. '<?php /** @var $foos Foo[] */',
  88. ];
  89. yield [
  90. '<?php /** @Var Foo $foo */',
  91. '<?php /** @Var $foo Foo */',
  92. ];
  93. yield [
  94. '<?php
  95. /** @var Foo|Bar|mixed|int $someWeirdLongNAME__123 */
  96. ',
  97. '<?php
  98. /** @var $someWeirdLongNAME__123 Foo|Bar|mixed|int */
  99. ',
  100. ];
  101. yield [
  102. '<?php
  103. /**
  104. * @var Foo $bar long description
  105. * goes here
  106. */
  107. ',
  108. '<?php
  109. /**
  110. * @var $bar Foo long description
  111. * goes here
  112. */
  113. ',
  114. ];
  115. yield [
  116. '<?php
  117. /** @var array<int, int> $foo */
  118. ',
  119. '<?php
  120. /** @var $foo array<int, int> */
  121. ',
  122. ];
  123. yield [
  124. '<?php
  125. /** @var array<int, int> $foo Array of something */
  126. ',
  127. '<?php
  128. /** @var $foo array<int, int> Array of something */
  129. ',
  130. ];
  131. yield [
  132. '<?php
  133. /** @var Foo|array<int, int>|null $foo */
  134. ',
  135. '<?php
  136. /** @var $foo Foo|array<int, int>|null */
  137. ',
  138. ];
  139. yield [
  140. '<?php
  141. class Foo
  142. {
  143. /**
  144. * @var $bar
  145. */
  146. private $bar;
  147. }
  148. ',
  149. ];
  150. }
  151. }