* @date 2021/1/22 13:33 */ namespace JerryYan\DSL\Test\Tokenizer; use JerryYan\DSL\Lexer\DefaultLexer; 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[] 预期的类型 */ 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 DefaultLexer()); $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()); } }