You've already forked MyDSL
TokenFactory和Tokenizer基础
This commit is contained in:
96
tests/Token/TokenInterfaceTest.php
Normal file
96
tests/Token/TokenInterfaceTest.php
Normal file
@ -0,0 +1,96 @@
|
||||
<?php
|
||||
/**
|
||||
* @filename TokenInterfaceTest.php
|
||||
* @author Jerry Yan <792602257@qq.com>
|
||||
* @date 2021/1/22 13:52
|
||||
*/
|
||||
|
||||
namespace JerryYan\DSL\Test\Token;
|
||||
|
||||
use JerryYan\DSL\Token\TokenAnd;
|
||||
use JerryYan\DSL\Token\TokenDefine;
|
||||
use JerryYan\DSL\Token\TokenInterface;
|
||||
use JerryYan\DSL\Token\TokenOr;
|
||||
use JerryYan\DSL\Token\TokenUndefined;
|
||||
use JerryYan\DSL\Token\TokenVar;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class TokenInterfaceTest extends TestCase
|
||||
{
|
||||
/** @var TokenInterface[] TokenClass */
|
||||
private $tokenTypes = [
|
||||
TokenAnd::class,
|
||||
TokenDefine::class,
|
||||
TokenOr::class,
|
||||
TokenUndefined::class,
|
||||
TokenVar::class,
|
||||
];
|
||||
protected $chainFirst;
|
||||
protected $chainLast;
|
||||
protected function setUp(): void
|
||||
{
|
||||
/** @var ?TokenInterface $next */
|
||||
$last = NULL;
|
||||
foreach ($this->tokenTypes as $cls) {
|
||||
/** @var TokenInterface $current */
|
||||
$current = new $cls('');
|
||||
$current->setPrevToken($last);
|
||||
if ($last !== NULL) $last->setNextToken($current);
|
||||
$last = $current;
|
||||
}
|
||||
$this->chainLast = $last;
|
||||
$this->chainFirst = $last->getFirstToken();
|
||||
}
|
||||
|
||||
public function testGetFirstToken()
|
||||
{
|
||||
$this->assertInstanceOf($this->tokenTypes[0], $this->chainLast->getFirstToken(), '链表头类型非预期');
|
||||
}
|
||||
|
||||
public function testGetPrevToken()
|
||||
{
|
||||
$this->assertInstanceOf($this->tokenTypes[count($this->tokenTypes)-2], $this->chainLast->getPrevToken(), '链表尾前一类型非预期');
|
||||
$this->assertNull($this->chainFirst->getPrevToken(), '链表头前一类型非空');
|
||||
}
|
||||
|
||||
public function testCount()
|
||||
{
|
||||
$this->assertEquals($this->chainFirst->count(), $this->chainLast->count(), '链表头尾计数不同');
|
||||
$this->assertEquals(count($this->tokenTypes), $this->chainLast->count(), '链表尾的长度不同');
|
||||
}
|
||||
|
||||
public function testGetNextToken()
|
||||
{
|
||||
$this->assertInstanceOf($this->tokenTypes[1], $this->chainFirst->getNextToken(), '链表头后一类型非预期');
|
||||
$this->assertNull($this->chainLast->getNextToken(), '链表尾前一类型非空');
|
||||
}
|
||||
|
||||
public function testGetLastToken()
|
||||
{
|
||||
$this->assertInstanceOf($this->tokenTypes[count($this->tokenTypes)-1], $this->chainFirst->getLastToken(), '链表尾类型非预期');
|
||||
}
|
||||
|
||||
public function testHasPrevToken()
|
||||
{
|
||||
$this->assertTrue($this->chainLast->hasPrevToken());
|
||||
$this->assertFalse($this->chainFirst->hasPrevToken());
|
||||
}
|
||||
|
||||
public function testHasNextToken()
|
||||
{
|
||||
$this->assertTrue($this->chainFirst->hasNextToken());
|
||||
$this->assertFalse($this->chainLast->hasNextToken());
|
||||
}
|
||||
|
||||
public function testGetNextTokenLength()
|
||||
{
|
||||
$this->assertEquals(count($this->tokenTypes) - 2, $this->chainFirst->getNextToken()->getNextTokenLength(), '链表头后一后长度不对');
|
||||
$this->assertEquals(0, $this->chainLast->getNextTokenLength(), '链表尾后长度不对');
|
||||
}
|
||||
|
||||
public function testGetPrevTokenLength()
|
||||
{
|
||||
$this->assertEquals(count($this->tokenTypes) - 2, $this->chainLast->getPrevToken()->getPrevTokenLength(), '链表尾前一前长度不对');
|
||||
$this->assertEquals(0, $this->chainFirst->getPrevTokenLength(), '链表头前长度不对');
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user