137 líneas
4.3 KiB
PHP
137 líneas
4.3 KiB
PHP
<?php
|
|
|
|
namespace Doctrine\Tests\Common\Annotations;
|
|
|
|
use Doctrine\Common\Annotations\DocLexer;
|
|
|
|
class DocLexerTest extends \PHPUnit_Framework_TestCase
|
|
{
|
|
public function testMarkerAnnotation()
|
|
{
|
|
$lexer = new DocLexer;
|
|
|
|
$lexer->setInput("@Name");
|
|
$this->assertNull($lexer->token);
|
|
$this->assertNull($lexer->lookahead);
|
|
|
|
$this->assertTrue($lexer->moveNext());
|
|
$this->assertNull($lexer->token);
|
|
$this->assertEquals('@', $lexer->lookahead['value']);
|
|
|
|
$this->assertTrue($lexer->moveNext());
|
|
$this->assertEquals('@', $lexer->token['value']);
|
|
$this->assertEquals('Name', $lexer->lookahead['value']);
|
|
|
|
$this->assertFalse($lexer->moveNext());
|
|
}
|
|
|
|
public function testScannerTokenizesDocBlockWhitConstants()
|
|
{
|
|
$lexer = new DocLexer();
|
|
$docblock = '@AnnotationWithConstants(PHP_EOL, ClassWithConstants::SOME_VALUE, \Doctrine\Tests\Common\Annotations\Fixtures\IntefaceWithConstants::SOME_VALUE)';
|
|
|
|
$tokens = array (
|
|
array(
|
|
'value' => '@',
|
|
'position' => 0,
|
|
'type' => DocLexer::T_AT,
|
|
),
|
|
array(
|
|
'value' => 'AnnotationWithConstants',
|
|
'position' => 1,
|
|
'type' => DocLexer::T_IDENTIFIER,
|
|
),
|
|
array(
|
|
'value' => '(',
|
|
'position' => 24,
|
|
'type' => DocLexer::T_OPEN_PARENTHESIS,
|
|
),
|
|
array(
|
|
'value' => 'PHP_EOL',
|
|
'position' => 25,
|
|
'type' => DocLexer::T_IDENTIFIER,
|
|
),
|
|
array(
|
|
'value' => ',',
|
|
'position' => 32,
|
|
'type' => DocLexer::T_COMMA,
|
|
),
|
|
array(
|
|
'value' => 'ClassWithConstants::SOME_VALUE',
|
|
'position' => 34,
|
|
'type' => DocLexer::T_IDENTIFIER,
|
|
),
|
|
array(
|
|
'value' => ',',
|
|
'position' => 64,
|
|
'type' => DocLexer::T_COMMA,
|
|
),
|
|
array(
|
|
'value' => '\\Doctrine\\Tests\\Common\\Annotations\\Fixtures\\IntefaceWithConstants::SOME_VALUE',
|
|
'position' => 66,
|
|
'type' => DocLexer::T_IDENTIFIER,
|
|
),
|
|
array(
|
|
'value' => ')',
|
|
'position' => 143,
|
|
'type' => DocLexer::T_CLOSE_PARENTHESIS,
|
|
)
|
|
|
|
);
|
|
|
|
$lexer->setInput($docblock);
|
|
|
|
foreach ($tokens as $expected) {
|
|
$lexer->moveNext();
|
|
$lookahead = $lexer->lookahead;
|
|
$this->assertEquals($expected['value'], $lookahead['value']);
|
|
$this->assertEquals($expected['type'], $lookahead['type']);
|
|
$this->assertEquals($expected['position'], $lookahead['position']);
|
|
}
|
|
|
|
$this->assertFalse($lexer->moveNext());
|
|
}
|
|
|
|
|
|
public function testScannerTokenizesDocBlockWhitInvalidIdentifier()
|
|
{
|
|
$lexer = new DocLexer();
|
|
$docblock = '@Foo\3.42';
|
|
|
|
$tokens = array (
|
|
array(
|
|
'value' => '@',
|
|
'position' => 0,
|
|
'type' => DocLexer::T_AT,
|
|
),
|
|
array(
|
|
'value' => 'Foo',
|
|
'position' => 1,
|
|
'type' => DocLexer::T_IDENTIFIER,
|
|
),
|
|
array(
|
|
'value' => '\\',
|
|
'position' => 4,
|
|
'type' => DocLexer::T_NAMESPACE_SEPARATOR,
|
|
),
|
|
array(
|
|
'value' => 3.42,
|
|
'position' => 5,
|
|
'type' => DocLexer::T_FLOAT,
|
|
)
|
|
);
|
|
|
|
$lexer->setInput($docblock);
|
|
|
|
foreach ($tokens as $expected) {
|
|
$lexer->moveNext();
|
|
$lookahead = $lexer->lookahead;
|
|
$this->assertEquals($expected['value'], $lookahead['value']);
|
|
$this->assertEquals($expected['type'], $lookahead['type']);
|
|
$this->assertEquals($expected['position'], $lookahead['position']);
|
|
}
|
|
|
|
$this->assertFalse($lexer->moveNext());
|
|
}
|
|
|
|
} |