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
+12 -8
View File
@@ -200,7 +200,15 @@ 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 ('' !== $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
);
}
foreach (explode("\n", $tags) as $tag_line) {
if (trim($tag_line) === '') { if (trim($tag_line) === '') {
continue; continue;
} }
@@ -208,13 +216,6 @@ class DocBlock implements \Reflector
if (isset($tag_line[0]) && ($tag_line[0] === '@')) { if (isset($tag_line[0]) && ($tag_line[0] === '@')) {
$result[] = $tag_line; $result[] = $tag_line;
} else { } 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; $result[count($result) - 1] .= PHP_EOL . $tag_line;
} }
} }
@@ -225,6 +226,7 @@ class DocBlock implements \Reflector
$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()
{ {
@@ -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,6 +165,7 @@ 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()
{ {
@@ -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()
{ {
@@ -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')
); );
} }
} }