Просмотр исходного кода

fix: `PhpUnitAttributesFixer` - fix for `#[RequiresPhp]` exceeding its constructor parameters (#7966)

John Paul E. Balandan, CPA 10 месяцев назад
Родитель
Сommit
4edae7d8f9

+ 3 - 1
src/Fixer/PhpUnit/PhpUnitAttributesFixer.php

@@ -375,11 +375,13 @@ final class PhpUnitAttributesFixer extends AbstractPhpUnitFixer
                 new Token([T_WHITESPACE, ' ']),
                 new Token([T_WHITESPACE, ' ']),
                 self::createEscapedStringToken($method),
                 self::createEscapedStringToken($method),
             ];
             ];
+        } elseif ('RequiresPhp' === $attributeName && isset($matches[3])) {
+            $attributeTokens = [self::createEscapedStringToken($matches[2].' '.$matches[3])];
         } else {
         } else {
             $attributeTokens = [self::createEscapedStringToken($matches[2])];
             $attributeTokens = [self::createEscapedStringToken($matches[2])];
         }
         }
 
 
-        if (isset($matches[3])) {
+        if (isset($matches[3]) && 'RequiresPhp' !== $attributeName) {
             $attributeTokens[] = new Token(',');
             $attributeTokens[] = new Token(',');
             $attributeTokens[] = new Token([T_WHITESPACE, ' ']);
             $attributeTokens[] = new Token([T_WHITESPACE, ' ']);
             $attributeTokens[] = self::createEscapedStringToken($matches[3]);
             $attributeTokens[] = self::createEscapedStringToken($matches[3]);

+ 21 - 0
tests/Fixer/PhpUnit/PhpUnitAttributesFixerTest.php

@@ -136,6 +136,27 @@ final class PhpUnitAttributesFixerTest extends AbstractFixerTestCase
                 PHP,
                 PHP,
         ];
         ];
 
 
+        yield 'fix with > in operator' => [
+            <<<'PHP'
+                <?php
+                class FooTest extends \PHPUnit\Framework\TestCase {
+                    /**
+                     */
+                    #[\PHPUnit\Framework\Attributes\RequiresPhp('>= 8.1')]
+                    public function testFoo() { self::assertTrue(true); }
+                }
+                PHP,
+            <<<'PHP'
+                <?php
+                class FooTest extends \PHPUnit\Framework\TestCase {
+                    /**
+                     * @requires PHP >= 8.1
+                     */
+                    public function testFoo() { self::assertTrue(true); }
+                }
+                PHP,
+        ];
+
         yield 'fix with trailing spaces' => self::createCase(
         yield 'fix with trailing spaces' => self::createCase(
             ['class'],
             ['class'],
             '#[CoversClass(Foo::class)]',
             '#[CoversClass(Foo::class)]',