Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tests: add dedicated test for the SyntaxError::translateTokens() method + edge case bug fix #117

Merged
merged 2 commits into from
Apr 19, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/Errors/SyntaxError.php
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ protected function translateTokens($message)
'T_ECHO' => 'echo'
);

return preg_replace_callback('~T_([A-Z_]*)~', function ($matches) use ($translateTokens) {
return preg_replace_callback('~(?<!\()T_([A-Z_]*)(?!\))~', function ($matches) use ($translateTokens) {
list($tokenName) = $matches;
if (isset($translateTokens[$tokenName])) {
$operator = $translateTokens[$tokenName];
Expand Down
77 changes: 77 additions & 0 deletions tests/Unit/Errors/SyntaxErrorTranslateTokensTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
<?php

namespace PHP_Parallel_Lint\PhpParallelLint\Tests\Unit\Errors;

use PHP_Parallel_Lint\PhpParallelLint\Errors\SyntaxError;
use PHP_Parallel_Lint\PhpParallelLint\Tests\UnitTestCase;

/**
* @covers \PHP_Parallel_Lint\PhpParallelLint\Errors\SyntaxError::translateTokens
*/
class SyntaxErrorTranslateTokensTest extends UnitTestCase
{
/**
* Test retrieving a normalized error message with token translations on.
*
* @dataProvider dataTranslateTokens
*
* @param string $message The message input to run the test with.
* @param string $expected The expected method return value.
*
* @return void
*/
public function testTranslateTokens($message, $expected)
{
$error = new SyntaxError('test.php', $message);
$this->assertSame($expected, $error->getNormalizedMessage(true));
}

/**
* Data provider.
*
* @return array
*/
public function dataTranslateTokens()
{
return array(
'No token name in message' => array(
'message' => 'Methods with the same name as their class will not be constructors in a future version of PHP',
'expected' => 'Methods with the same name as their class will not be constructors in a future version of PHP',
),
'Non-existent token name in message (shouldn\'t be possible)' => array(
'message' => 'Unexpected T_1H2, expecting T_STRING',
'expected' => 'Unexpected T_1H2, expecting T_STRING',
),
'Token names in message, but not in translation list' => array(
// phpcs:disable Generic.Files.LineLength.TooLong
'message' => 'Unexpected \'\' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)',
'expected' => 'Unexpected \'\' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)',
// phpcs:enable Generic.Files.LineLength
),
'PHP 5.3-style message with token name without PHP native translation [1]' => array(
'message' => 'Unexpected T_FILE, expecting T_STRING',
'expected' => 'Unexpected __FILE__ (T_FILE), expecting T_STRING',
),
'PHP 5.3-style message with token name without PHP native translation [2]' => array(
'message' => 'Unexpected T_INC',
'expected' => 'Unexpected ++ (T_INC)',
),
'Message with multiple tokens without PHP native translation' => array(
'message' => 'Unexpected T_INC, T_IS_IDENTICAL, T_OBJECT_OPERATOR, T_START_HEREDOC',
'expected' => 'Unexpected ++ (T_INC), === (T_IS_IDENTICAL), -> (T_OBJECT_OPERATOR), <<< (T_START_HEREDOC)',
),
'PHP 5.4-style message with token name with PHP native translation [1] - prevent double translation' => array(
'message' => 'Unexpected \'__FILE__\' (T_FILE), expecting T_STRING',
'expected' => 'Unexpected \'__FILE__\' (T_FILE), expecting T_STRING',
),
'PHP 5.4-style message with token name with PHP native translation [2] - prevent double translation' => array(
'message' => 'Unexpected \'++\' (T_INC) in',
'expected' => 'Unexpected \'++\' (T_INC) in',
),
'Message with multiple tokens with PHP native translation' => array(
'message' => 'Unexpected ++ (T_INC), === (T_IS_IDENTICAL), -> (T_OBJECT_OPERATOR), <<< (T_START_HEREDOC)',
'expected' => 'Unexpected ++ (T_INC), === (T_IS_IDENTICAL), -> (T_OBJECT_OPERATOR), <<< (T_START_HEREDOC)',
),
);
}
}