Browse Source

Token::getNameForId

SpacePossum 7 years ago
parent
commit
8e4e364279

+ 19 - 3
src/Tokenizer/Token.php

@@ -258,11 +258,27 @@ class Token
             return null;
         }
 
-        if (CT::has($this->id)) {
-            return CT::getName($this->id);
+        return self::getNameForId($this->id);
+    }
+
+    /**
+     * Get token's name.
+     *
+     * It shall be used only for getting the name of token, not for checking it against excepted value.
+     *
+     * @param int $id
+     *
+     * @return null|string token name
+     */
+    public static function getNameForId($id)
+    {
+        if (CT::has($id)) {
+            return CT::getName($id);
         }
 
-        return token_name($this->id);
+        $name = token_name($id);
+
+        return 'UNKNOWN' === $name ? null : $name;
     }
 
     /**

+ 6 - 1
tests/Test/Assert/AssertTokensTrait.php

@@ -12,6 +12,7 @@
 
 namespace PhpCsFixer\Tests\Test\Assert;
 
+use PhpCsFixer\Tokenizer\Token;
 use PhpCsFixer\Tokenizer\Tokens;
 
 /**
@@ -36,7 +37,11 @@ trait AssertTokensTrait
             $expectedTokenKind = $expectedToken->isArray() ? $expectedToken->getId() : $expectedToken->getContent();
             $this->assertTrue(
                 $inputTokens->isTokenKindFound($expectedTokenKind),
-                sprintf('The token kind %s must be found in fixed tokens collection.', $expectedTokenKind)
+                sprintf(
+                    'The token kind %s (%s) must be found in tokens collection.',
+                    $expectedTokenKind,
+                    is_string($expectedTokenKind) ? $expectedTokenKind : Token::getNameForId($expectedTokenKind)
+                )
             );
         }
 

+ 30 - 0
tests/Tokenizer/TokenTest.php

@@ -12,6 +12,7 @@
 
 namespace PhpCsFixer\Tests\Tokenizer;
 
+use PhpCsFixer\Tokenizer\CT;
 use PhpCsFixer\Tokenizer\Token;
 use PhpCsFixer\Tokenizer\Tokens;
 use PHPUnit\Framework\TestCase;
@@ -446,4 +447,33 @@ final class TokenTest extends TestCase
         $token = new Token([T_WHITESPACE, ' ']);
         $this->assertFalse($token->isChanged());
     }
+
+    /**
+     * @param null|string $expected
+     * @param int         $id
+     *
+     * @dataProvider provideTokenGetNameCases
+     */
+    public function testTokenGetNameForId($expected, $id)
+    {
+        $this->assertSame($expected, Token::getNameForId($id));
+    }
+
+    public function provideTokenGetNameCases()
+    {
+        return [
+            [
+                null,
+                -1,
+            ],
+            [
+                'T_CLASS',
+                T_CLASS,
+            ],
+            [
+                'CT::T_ARRAY_INDEX_CURLY_BRACE_CLOSE',
+                CT::T_ARRAY_INDEX_CURLY_BRACE_CLOSE,
+            ],
+        ];
+    }
 }

+ 33 - 0
tests/Tokenizer/TokensTest.php

@@ -1002,6 +1002,39 @@ echo $a;',
         ];
     }
 
+    public function testAssertTokensAfterChanging()
+    {
+        $template =
+            '<?php class SomeClass {
+                    %s//
+
+                    public function __construct($name)
+                    {
+                        $this->name = $name;
+                    }
+            }';
+
+        $tokens = Tokens::fromCode(sprintf($template, ''));
+        $commentIndex = $tokens->getNextTokenOfKind(0, [[T_COMMENT]]);
+
+        $tokens->insertAt(
+            $commentIndex,
+            [
+                new Token([T_PRIVATE, 'private']),
+                new Token([T_WHITESPACE, ' ']),
+                new Token([T_VARIABLE, '$name']),
+                new Token(';'),
+            ]
+        );
+
+        $this->assertTrue($tokens->isChanged());
+
+        $expected = Tokens::fromCode(sprintf($template, 'private $name;'));
+        $this->assertFalse($expected->isChanged());
+
+        $this->assertTokens($expected, $tokens);
+    }
+
     /**
      * @param null|Token[] $expected
      * @param null|Token[] $input