49 lines
1.2 KiB
PHP
49 lines
1.2 KiB
PHP
<?php declare(strict_types=1);
|
|
|
|
namespace Aviat\Kilo\Tests;
|
|
|
|
use function Aviat\Kilo\get_php_tokens;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class FunctionTest extends TestCase {
|
|
public function testGetPhpTokensLineAlignment(): void
|
|
{
|
|
$file = file_get_contents(realpath(__DIR__ . '/../test.php'));
|
|
$tokens = get_php_tokens($file);
|
|
|
|
$this->assertNotEmpty($file);
|
|
|
|
$lines = explode("\n", $file);
|
|
array_unshift($lines, '');
|
|
|
|
$misplacedTokens = [];
|
|
|
|
foreach ($tokens as $index => $lineTokens)
|
|
{
|
|
if (empty($lineTokens))
|
|
{
|
|
$this->assertNotEmpty(trim($lines[$index]), 'Token is empty for non-empty line');
|
|
}
|
|
|
|
foreach ($lineTokens as $token)
|
|
{
|
|
// don't compare whitespace-only tokens
|
|
if (empty(trim($token['char'])))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
$this->assertIsArray($token, 'All outputted tokens should be arrays');
|
|
|
|
// Make sure the matched string for the token is on the correct line
|
|
if (strpos($lines[$index], trim($token['char'])) === FALSE)
|
|
{
|
|
$token['misplaced_line'] = $index;
|
|
$misplacedTokens[] = $token;
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->assertEmpty($misplacedTokens, 'Not all tokens are on the correct lines: ' . print_r($misplacedTokens, TRUE));
|
|
}
|
|
} |