php-kilo/tests/Tokens/PHPTest.php

49 lines
1.2 KiB
PHP

<?php declare(strict_types=1);
namespace Aviat\Kilo\Tests\Tokens;
use Aviat\Kilo\Tokens\PHP;
use PHPUnit\Framework\TestCase;
class PHPTest extends TestCase {
public function testGetTokens(): void
{
$file = file_get_contents(realpath(__DIR__ . '/../../test.php'));
$tokens = PHP::getTokens($file);
$this->assertNotEmpty($file);
$lines = explode("\n", $file);
array_unshift($lines, '');
$misplacedTokens = [];
foreach ($tokens as $index => $lineTokens)
{
if (empty($lineTokens))
{
$this->assertEmpty(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));
}
}