MyDSL/tests/Tokenizer/TokenizerTest.php
2021-01-22 14:33:32 +08:00

52 lines
1.4 KiB
PHP

<?php
/**
* @filename TokenizerTest.php
* @author Jerry Yan <792602257@qq.com>
* @date 2021/1/22 13:33
*/
namespace JerryYan\DSL\Test\Tokenizer;
use JerryYan\DSL\Reader\StringReader;
use JerryYan\DSL\Token\Factory\DefaultFactory;
use JerryYan\DSL\Token\TokenAnd;
use JerryYan\DSL\Token\TokenInterface;
use JerryYan\DSL\Token\TokenOr;
use JerryYan\DSL\Token\TokenVar;
use JerryYan\DSL\Tokenizer\Tokenizer;
use PHPUnit\Framework\TestCase;
class TokenizerTest extends TestCase
{
protected $tokenizer;
protected $reader;
private $text = "这个 和 那个 或者 那个 和 这个";
/** @var class-string<TokenInterface>[] 预期的类型 */
private $textTokenType = [
TokenVar::class,
TokenAnd::class,
TokenVar::class,
TokenOr::class,
TokenVar::class,
TokenAnd::class,
TokenVar::class,
];
protected function setUp(): void
{
$this->tokenizer = new Tokenizer(new DefaultFactory());
$this->reader = new StringReader($this->text);
}
public function testTokenize()
{
$tokens = $this->tokenizer->tokenize($this->reader);
$this->assertInstanceOf(TokenInterface::class, $tokens);
$index = 0;
do {
$this->assertInstanceOf($this->textTokenType[$index], $tokens);
$tokens = $tokens->getNextToken();
$index ++;
} while ($tokens->hasNextToken());
}
}