mirror of
https://github.com/barryvdh/ReflectionDocBlock.git
synced 2026-08-18 01:57:13 +00:00
Increased unit test coverage of DocBlock;
Moved the tag block checks outside (and prior to) the tag line loop; Doc and CS fixes.
This commit is contained in:
@@ -200,30 +200,32 @@ class DocBlock implements \Reflector
|
|||||||
protected function parseTags($tags)
|
protected function parseTags($tags)
|
||||||
{
|
{
|
||||||
$result = array();
|
$result = array();
|
||||||
foreach (explode("\n", trim($tags)) as $tag_line) {
|
$tags = trim($tags);
|
||||||
if (trim($tag_line) === '') {
|
if ('' !== $tags) {
|
||||||
continue;
|
if ('@' !== $tags[0]) {
|
||||||
|
throw new \LogicException(
|
||||||
|
'A tag block started with text instead of an actual tag,'
|
||||||
|
. ' this makes the tag block invalid: ' . $tags
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
foreach (explode("\n", $tags) as $tag_line) {
|
||||||
if (isset($tag_line[0]) && ($tag_line[0] === '@')) {
|
if (trim($tag_line) === '') {
|
||||||
$result[] = $tag_line;
|
continue;
|
||||||
} else {
|
|
||||||
if (count($result) == 0) {
|
|
||||||
throw new \LogicException(
|
|
||||||
'A tag block started with text instead of an actual tag,'
|
|
||||||
. ' this makes the tag block invalid: ' . $tags
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$result[count($result) - 1] .= PHP_EOL . $tag_line;
|
if (isset($tag_line[0]) && ($tag_line[0] === '@')) {
|
||||||
|
$result[] = $tag_line;
|
||||||
|
} else {
|
||||||
|
$result[count($result) - 1] .= PHP_EOL . $tag_line;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// create proper Tag objects
|
// create proper Tag objects
|
||||||
foreach ($result as $key => $tag_line) {
|
foreach ($result as $key => $tag_line) {
|
||||||
$tag = DocBlock\Tag::createInstance($tag_line);
|
$tag = DocBlock\Tag::createInstance($tag_line);
|
||||||
$tag->setDocBlock($this);
|
$tag->setDocBlock($this);
|
||||||
$result[$key] = $tag;
|
$result[$key] = $tag;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->tags = $result;
|
$this->tags = $result;
|
||||||
@@ -388,6 +390,7 @@ class DocBlock implements \Reflector
|
|||||||
* implement it.
|
* implement it.
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
|
* @codeCoverageIgnore Not yet implemented
|
||||||
*/
|
*/
|
||||||
public static function export()
|
public static function export()
|
||||||
{
|
{
|
||||||
@@ -399,6 +402,7 @@ class DocBlock implements \Reflector
|
|||||||
* BUT this throws an exception at this point).
|
* BUT this throws an exception at this point).
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
|
* @codeCoverageIgnore Not yet implemented
|
||||||
*/
|
*/
|
||||||
public function __toString()
|
public function __toString()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ class LongDescription implements \Reflector
|
|||||||
$this->parsedContents[$i]
|
$this->parsedContents[$i]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
//In order to allow "literal" inline tags, the otherwise invalid
|
//In order to allow "literal" inline tags, the otherwise invalid
|
||||||
//sequence "{@}" is changed to "@", and "{}" is changed to "}".
|
//sequence "{@}" is changed to "@", and "{}" is changed to "}".
|
||||||
//See unit tests for examples.
|
//See unit tests for examples.
|
||||||
@@ -153,6 +153,7 @@ class LongDescription implements \Reflector
|
|||||||
* and implement it.
|
* and implement it.
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
|
* @codeCoverageIgnore Not yet implemented
|
||||||
*/
|
*/
|
||||||
public static function export()
|
public static function export()
|
||||||
{
|
{
|
||||||
@@ -164,9 +165,10 @@ class LongDescription implements \Reflector
|
|||||||
* BUT this throws an exception at this point).
|
* BUT this throws an exception at this point).
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
|
* @codeCoverageIgnore Not yet implemented
|
||||||
*/
|
*/
|
||||||
public function __toString()
|
public function __toString()
|
||||||
{
|
{
|
||||||
return 'Not yet implemented';
|
return 'Not yet implemented';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -173,6 +173,7 @@ class Tag implements \Reflector
|
|||||||
* @todo determine the exact format as used by PHP Reflection and implement it.
|
* @todo determine the exact format as used by PHP Reflection and implement it.
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
|
* @codeCoverageIgnore Not yet implemented
|
||||||
*/
|
*/
|
||||||
public static function export()
|
public static function export()
|
||||||
{
|
{
|
||||||
@@ -184,6 +185,7 @@ class Tag implements \Reflector
|
|||||||
* BUT this throws an exception at this point).
|
* BUT this throws an exception at this point).
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
|
* @codeCoverageIgnore Not yet implemented
|
||||||
*/
|
*/
|
||||||
public function __toString()
|
public function __toString()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ tags.',
|
|||||||
$parsedContents[2]
|
$parsedContents[2]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testInlineTagAtStartParsing()
|
public function testInlineTagAtStartParsing()
|
||||||
{
|
{
|
||||||
$fixture = <<<LONGDESC
|
$fixture = <<<LONGDESC
|
||||||
@@ -69,7 +69,7 @@ LONGDESC;
|
|||||||
|
|
||||||
$parsedContents = $object->getParsedContents();
|
$parsedContents = $object->getParsedContents();
|
||||||
$this->assertCount(3, $parsedContents);
|
$this->assertCount(3, $parsedContents);
|
||||||
|
|
||||||
$this->assertSame('', $parsedContents[0]);
|
$this->assertSame('', $parsedContents[0]);
|
||||||
$this->assertInstanceOf(
|
$this->assertInstanceOf(
|
||||||
__NAMESPACE__ . '\Tag\LinkTag',
|
__NAMESPACE__ . '\Tag\LinkTag',
|
||||||
@@ -81,7 +81,7 @@ tags.',
|
|||||||
$parsedContents[2]
|
$parsedContents[2]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testNestedInlineTagParsing()
|
public function testNestedInlineTagParsing()
|
||||||
{
|
{
|
||||||
$fixture = <<<LONGDESC
|
$fixture = <<<LONGDESC
|
||||||
@@ -93,7 +93,7 @@ LONGDESC;
|
|||||||
|
|
||||||
$parsedContents = $object->getParsedContents();
|
$parsedContents = $object->getParsedContents();
|
||||||
$this->assertCount(3, $parsedContents);
|
$this->assertCount(3, $parsedContents);
|
||||||
|
|
||||||
$this->assertSame(
|
$this->assertSame(
|
||||||
'This is text for a description with ',
|
'This is text for a description with ',
|
||||||
$parsedContents[0]
|
$parsedContents[0]
|
||||||
@@ -198,7 +198,7 @@ inline tag'),
|
|||||||
$parsedContents[1]->getParsedDescription()
|
$parsedContents[1]->getParsedDescription()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testInlineTagEscapingSequence()
|
public function testInlineTagEscapingSequence()
|
||||||
{
|
{
|
||||||
$fixture = <<<LONGDESC
|
$fixture = <<<LONGDESC
|
||||||
@@ -242,4 +242,4 @@ LONGDESC;
|
|||||||
$parsedContents[1]->getParsedDescription()
|
$parsedContents[1]->getParsedDescription()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class LinkTagTest extends \PHPUnit_Framework_TestCase
|
|||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Test that the \phpDocumentor\Reflection\DocBlock\Tag\LinkTag can create
|
* Test that the \phpDocumentor\Reflection\DocBlock\Tag\LinkTag can create
|
||||||
* a link for the @link doc block
|
* a link for the @link doc block.
|
||||||
*
|
*
|
||||||
* @param string $type
|
* @param string $type
|
||||||
* @param string $content
|
* @param string $content
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class ParamTagTest extends \PHPUnit_Framework_TestCase
|
|||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Test that the \phpDocumentor\Reflection\DocBlock\Tag\ParamTag can
|
* Test that the \phpDocumentor\Reflection\DocBlock\Tag\ParamTag can
|
||||||
* understand the param DocBlock.
|
* understand the @param DocBlock.
|
||||||
*
|
*
|
||||||
* @param string $type
|
* @param string $type
|
||||||
* @param string $content
|
* @param string $content
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class ReturnTagTest extends ParamTagTest
|
|||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Test that the \phpDocumentor\Reflection\DocBlock\Tag\ReturnTag can
|
* Test that the \phpDocumentor\Reflection\DocBlock\Tag\ReturnTag can
|
||||||
* understand the Return DocBlock.
|
* understand the @return DocBlock.
|
||||||
*
|
*
|
||||||
* @param string $content
|
* @param string $content
|
||||||
* @param string $extractedType
|
* @param string $extractedType
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class SeeTagTest extends \PHPUnit_Framework_TestCase
|
|||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Test that the phpDocumentor_Reflection_DocBlock_Tag_See can create a link
|
* Test that the phpDocumentor_Reflection_DocBlock_Tag_See can create a link
|
||||||
* for the @see doc block
|
* for the @see doc block.
|
||||||
*
|
*
|
||||||
* @param string $type
|
* @param string $type
|
||||||
* @param string $content
|
* @param string $content
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class UsesTagTest extends \PHPUnit_Framework_TestCase
|
|||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Test that the \phpDocumentor\Reflection\DocBlock\Tag\UsesTag can create
|
* Test that the \phpDocumentor\Reflection\DocBlock\Tag\UsesTag can create
|
||||||
* a link for the @uses doc block
|
* a link for the @uses doc block.
|
||||||
*
|
*
|
||||||
* @param string $type
|
* @param string $type
|
||||||
* @param string $content
|
* @param string $content
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class VarTagTest extends \PHPUnit_Framework_TestCase
|
|||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Test that the \phpDocumentor\Reflection\DocBlock\Tag\VarTag can
|
* Test that the \phpDocumentor\Reflection\DocBlock\Tag\VarTag can
|
||||||
* understand the @var doc block
|
* understand the @var doc block.
|
||||||
*
|
*
|
||||||
* @param string $type
|
* @param string $type
|
||||||
* @param string $content
|
* @param string $content
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
namespace phpDocumentor\Reflection;
|
namespace phpDocumentor\Reflection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test class for phpDocumentor_Reflection_DocBlock
|
* Test class for phpDocumentor\Reflection\DocBlock
|
||||||
*
|
*
|
||||||
* @author Mike van Riel <[email protected]>
|
* @author Mike van Riel <[email protected]>
|
||||||
* @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com)
|
* @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com)
|
||||||
@@ -46,6 +46,31 @@ DOCBLOCK;
|
|||||||
$this->assertEquals(2, count($object->getTags()));
|
$this->assertEquals(2, count($object->getTags()));
|
||||||
$this->assertTrue($object->hasTag('see'));
|
$this->assertTrue($object->hasTag('see'));
|
||||||
$this->assertTrue($object->hasTag('return'));
|
$this->assertTrue($object->hasTag('return'));
|
||||||
|
$this->assertFalse($object->hasTag('category'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testConstructFromReflector()
|
||||||
|
{
|
||||||
|
$object = new DocBlock(new \ReflectionClass($this));
|
||||||
|
$this->assertEquals(
|
||||||
|
'Test class for phpDocumentor\Reflection\DocBlock',
|
||||||
|
$object->getShortDescription()
|
||||||
|
);
|
||||||
|
$this->assertEquals('', $object->getLongDescription()->getContents());
|
||||||
|
$this->assertEquals(4, count($object->getTags()));
|
||||||
|
$this->assertTrue($object->hasTag('author'));
|
||||||
|
$this->assertTrue($object->hasTag('copyright'));
|
||||||
|
$this->assertTrue($object->hasTag('license'));
|
||||||
|
$this->assertTrue($object->hasTag('link'));
|
||||||
|
$this->assertFalse($object->hasTag('category'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedException \InvalidArgumentException
|
||||||
|
*/
|
||||||
|
public function testExceptionOnInvalidObject()
|
||||||
|
{
|
||||||
|
$object = new DocBlock($this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testDotSeperation()
|
public function testDotSeperation()
|
||||||
@@ -139,16 +164,18 @@ DOCBLOCK;
|
|||||||
public function testThatExpandTypeDoesNotExpandAllKeywords($keyword)
|
public function testThatExpandTypeDoesNotExpandAllKeywords($keyword)
|
||||||
{
|
{
|
||||||
$docblock = new DocBlock('', '\My\Namespace');
|
$docblock = new DocBlock('', '\My\Namespace');
|
||||||
$this->assertEquals($keyword, $docblock->expandType($keyword));
|
$this->assertSame($keyword, $docblock->expandType($keyword));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getNonExpandableKeywordsForExpandType()
|
public function getNonExpandableKeywordsForExpandType()
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
|
array(null),
|
||||||
array('string'), array('int'), array('integer'), array('bool'),
|
array('string'), array('int'), array('integer'), array('bool'),
|
||||||
array('boolean'), array('float'), array('double'), array('object'),
|
array('boolean'), array('float'), array('double'), array('object'),
|
||||||
array('mixed'), array('array'), array('resource'), array('void'),
|
array('mixed'), array('array'), array('resource'), array('void'),
|
||||||
array('null'), array('callback'), array('false'), array('true')
|
array('null'), array('callback'), array('false'), array('true'),
|
||||||
|
array('self'), array('$this'), array('callable')
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user