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:
Vasil Rangelov
2012-11-10 13:24:46 +02:00
parent 233e4b3ff7
commit 082c9354d0
11 changed files with 71 additions and 36 deletions
+23 -19
View File
@@ -200,30 +200,32 @@ class DocBlock implements \Reflector
protected function parseTags($tags)
{
$result = array();
foreach (explode("\n", trim($tags)) as $tag_line) {
if (trim($tag_line) === '') {
continue;
$tags = trim($tags);
if ('' !== $tags) {
if ('@' !== $tags[0]) {
throw new \LogicException(
'A tag block started with text instead of an actual tag,'
. ' this makes the tag block invalid: ' . $tags
);
}
if (isset($tag_line[0]) && ($tag_line[0] === '@')) {
$result[] = $tag_line;
} 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
);
foreach (explode("\n", $tags) as $tag_line) {
if (trim($tag_line) === '') {
continue;
}
$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
foreach ($result as $key => $tag_line) {
$tag = DocBlock\Tag::createInstance($tag_line);
$tag->setDocBlock($this);
$result[$key] = $tag;
// create proper Tag objects
foreach ($result as $key => $tag_line) {
$tag = DocBlock\Tag::createInstance($tag_line);
$tag->setDocBlock($this);
$result[$key] = $tag;
}
}
$this->tags = $result;
@@ -388,6 +390,7 @@ class DocBlock implements \Reflector
* implement it.
*
* @return string
* @codeCoverageIgnore Not yet implemented
*/
public static function export()
{
@@ -399,6 +402,7 @@ class DocBlock implements \Reflector
* BUT this throws an exception at this point).
*
* @return string
* @codeCoverageIgnore Not yet implemented
*/
public function __toString()
{
@@ -153,6 +153,7 @@ class LongDescription implements \Reflector
* and implement it.
*
* @return void
* @codeCoverageIgnore Not yet implemented
*/
public static function export()
{
@@ -164,6 +165,7 @@ class LongDescription implements \Reflector
* BUT this throws an exception at this point).
*
* @return string
* @codeCoverageIgnore Not yet implemented
*/
public function __toString()
{
@@ -173,6 +173,7 @@ class Tag implements \Reflector
* @todo determine the exact format as used by PHP Reflection and implement it.
*
* @return void
* @codeCoverageIgnore Not yet implemented
*/
public static function export()
{
@@ -184,6 +185,7 @@ class Tag implements \Reflector
* BUT this throws an exception at this point).
*
* @return string
* @codeCoverageIgnore Not yet implemented
*/
public function __toString()
{
@@ -24,7 +24,7 @@ class LinkTagTest extends \PHPUnit_Framework_TestCase
{
/**
* 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 $content
@@ -24,7 +24,7 @@ class ParamTagTest extends \PHPUnit_Framework_TestCase
{
/**
* Test that the \phpDocumentor\Reflection\DocBlock\Tag\ParamTag can
* understand the param DocBlock.
* understand the @param DocBlock.
*
* @param string $type
* @param string $content
@@ -24,7 +24,7 @@ class ReturnTagTest extends ParamTagTest
{
/**
* Test that the \phpDocumentor\Reflection\DocBlock\Tag\ReturnTag can
* understand the Return DocBlock.
* understand the @return DocBlock.
*
* @param string $content
* @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
* for the @see doc block
* for the @see doc block.
*
* @param string $type
* @param string $content
@@ -24,7 +24,7 @@ class UsesTagTest extends \PHPUnit_Framework_TestCase
{
/**
* 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 $content
@@ -24,7 +24,7 @@ class VarTagTest extends \PHPUnit_Framework_TestCase
{
/**
* Test that the \phpDocumentor\Reflection\DocBlock\Tag\VarTag can
* understand the @var doc block
* understand the @var doc block.
*
* @param string $type
* @param string $content
@@ -13,7 +13,7 @@
namespace phpDocumentor\Reflection;
/**
* Test class for phpDocumentor_Reflection_DocBlock
* Test class for phpDocumentor\Reflection\DocBlock
*
* @author Mike van Riel <[email protected]>
* @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com)
@@ -46,6 +46,31 @@ DOCBLOCK;
$this->assertEquals(2, count($object->getTags()));
$this->assertTrue($object->hasTag('see'));
$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()
@@ -139,16 +164,18 @@ DOCBLOCK;
public function testThatExpandTypeDoesNotExpandAllKeywords($keyword)
{
$docblock = new DocBlock('', '\My\Namespace');
$this->assertEquals($keyword, $docblock->expandType($keyword));
$this->assertSame($keyword, $docblock->expandType($keyword));
}
public function getNonExpandableKeywordsForExpandType()
{
return array(
array(null),
array('string'), array('int'), array('integer'), array('bool'),
array('boolean'), array('float'), array('double'), array('object'),
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')
);
}
}