62 lines
1.8 KiB
PHP
62 lines
1.8 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\Grammar\DefaultGrammar;
|
|
use JerryYan\DSL\Reader\StringReader;
|
|
use JerryYan\DSL\Token\TokenCurry;
|
|
use JerryYan\DSL\Token\TokenLogicAnd;
|
|
use JerryYan\DSL\Token\TokenInterface;
|
|
use JerryYan\DSL\Token\TokenLogicEqual;
|
|
use JerryYan\DSL\Token\TokenLogicFake;
|
|
use JerryYan\DSL\Token\TokenLogicNotEqual;
|
|
use JerryYan\DSL\Token\TokenLogicOr;
|
|
use JerryYan\DSL\Token\TokenNumber;
|
|
use JerryYan\DSL\Token\TokenVariable;
|
|
use JerryYan\DSL\Tokenizer\Tokenizer;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class TokenizerTest extends TestCase
|
|
{
|
|
protected $tokenizer;
|
|
protected $reader;
|
|
private $text = "当 另外那个 与 另外一个 不相等时 或者 那个 和 这个 等于 -0.5 的时候";
|
|
/** @var class-string<TokenInterface>[] 预期的类型 */
|
|
private $textTokenType = [
|
|
TokenLogicFake::class,
|
|
TokenVariable::class,
|
|
TokenCurry::class,
|
|
TokenVariable::class,
|
|
TokenLogicNotEqual::class,
|
|
TokenLogicOr::class,
|
|
TokenVariable::class,
|
|
TokenLogicAnd::class,
|
|
TokenVariable::class,
|
|
TokenLogicEqual::class,
|
|
TokenNumber::class,
|
|
TokenLogicFake::class,
|
|
];
|
|
protected function setUp(): void
|
|
{
|
|
$this->tokenizer = new Tokenizer(new DefaultGrammar());
|
|
$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());
|
|
}
|
|
}
|