p2 project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

252 lines
6.7 KiB

<?php
/**
* This file is part of phpDocumentor.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*
* @copyright 2010-2015 Mike van Riel<mike@phpdoc.org>
* @license http://www.opensource.org/licenses/mit-license.php MIT
* @link http://phpdoc.org
*/
namespace phpDocumentor\Reflection;
use Mockery as m;
use phpDocumentor\Reflection\Types\Context;
/**
* @coversDefaultClass phpDocumentor\Reflection\DocBlock
* @covers ::<private>
* @uses \Webmozart\Assert\Assert
*/
class DocBlockTest extends \PHPUnit_Framework_TestCase
{
/**
* @covers ::__construct
* @covers ::getSummary
*
* @uses \phpDocumentor\Reflection\DocBlock\Description
*/
public function testDocBlockCanHaveASummary()
{
$summary = 'This is a summary';
$fixture = new DocBlock($summary);
$this->assertSame($summary, $fixture->getSummary());
}
/**
* @covers ::__construct
*
* @expectedException \InvalidArgumentException
*/
public function testExceptionIsThrownIfSummaryIsNotAString()
{
new DocBlock([]);
}
/**
* @covers ::__construct
*
* @expectedException \InvalidArgumentException
*/
public function testExceptionIsThrownIfTemplateStartIsNotABoolean()
{
new DocBlock('', null, [], null, null, ['is not boolean']);
}
/**
* @covers ::__construct
*
* @expectedException \InvalidArgumentException
*/
public function testExceptionIsThrownIfTemplateEndIsNotABoolean()
{
new DocBlock('', null, [], null, null, false, ['is not boolean']);
}
/**
* @covers ::__construct
* @covers ::getDescription
*
* @uses \phpDocumentor\Reflection\DocBlock\Description
*/
public function testDocBlockCanHaveADescription()
{
$description = new DocBlock\Description('');
$fixture = new DocBlock('', $description);
$this->assertSame($description, $fixture->getDescription());
}
/**
* @covers ::__construct
* @covers ::getTags
*
* @uses \phpDocumentor\Reflection\DocBlock\Description
* @uses \phpDocumentor\Reflection\DocBlock\Tag
*/
public function testDocBlockCanHaveTags()
{
$tags = [
m::mock(DocBlock\Tag::class)
];
$fixture = new DocBlock('', null, $tags);
$this->assertSame($tags, $fixture->getTags());
}
/**
* @covers ::__construct
* @covers ::getTags
*
* @uses \phpDocumentor\Reflection\DocBlock\Description
* @uses \phpDocumentor\Reflection\DocBlock\Tag
*
* @expectedException \InvalidArgumentException
*/
public function testDocBlockAllowsOnlyTags()
{
$tags = [
null
];
$fixture = new DocBlock('', null, $tags);
}
/**
* @covers ::__construct
* @covers ::getTagsByName
*
* @uses \phpDocumentor\Reflection\DocBlock::getTags
* @uses \phpDocumentor\Reflection\DocBlock\Description
* @uses \phpDocumentor\Reflection\DocBlock\Tag
*/
public function testFindTagsInDocBlockByName()
{
$tag1 = m::mock(DocBlock\Tag::class);
$tag2 = m::mock(DocBlock\Tag::class);
$tag3 = m::mock(DocBlock\Tag::class);
$tags = [$tag1, $tag2, $tag3];
$tag1->shouldReceive('getName')->andReturn('abc');
$tag2->shouldReceive('getName')->andReturn('abcd');
$tag3->shouldReceive('getName')->andReturn('ab');
$fixture = new DocBlock('', null, $tags);
$this->assertSame([$tag2], $fixture->getTagsByName('abcd'));
$this->assertSame([], $fixture->getTagsByName('Ebcd'));
}
/**
* @covers ::__construct
* @covers ::getTagsByName
* @uses \phpDocumentor\Reflection\DocBlock\Description
* @expectedException \InvalidArgumentException
*/
public function testExceptionIsThrownIfNameForTagsIsNotString()
{
$fixture = new DocBlock();
$fixture->getTagsByName([]);
}
/**
* @covers ::__construct
* @covers ::hasTag
*
* @uses \phpDocumentor\Reflection\DocBlock::getTags
* @uses \phpDocumentor\Reflection\DocBlock\Description
* @uses \phpDocumentor\Reflection\DocBlock\Tag
*/
public function testCheckIfThereAreTagsWithAGivenName()
{
$tag1 = m::mock(DocBlock\Tag::class);
$tag2 = m::mock(DocBlock\Tag::class);
$tag3 = m::mock(DocBlock\Tag::class);
$tags = [$tag1, $tag2, $tag3];
$tag1->shouldReceive('getName')->twice()->andReturn('abc');
$tag2->shouldReceive('getName')->twice()->andReturn('abcd');
$tag3->shouldReceive('getName')->once();
$fixture = new DocBlock('', null, $tags);
$this->assertTrue($fixture->hasTag('abcd'));
$this->assertFalse($fixture->hasTag('Ebcd'));
}
/**
* @covers ::__construct
* @covers ::hasTag
* @uses \phpDocumentor\Reflection\DocBlock\Description
* @expectedException \InvalidArgumentException
*/
public function testExceptionIsThrownIfNameForCheckingTagsIsNotString()
{
$fixture = new DocBlock();
$fixture->hasTag([]);
}
/**
* @covers ::__construct
* @covers ::getContext
*
* @uses \phpDocumentor\Reflection\DocBlock\Description
* @uses \phpDocumentor\Reflection\Types\Context
*/
public function testDocBlockKnowsInWhichNamespaceItIsAndWhichAliasesThereAre()
{
$context = new Context('');
$fixture = new DocBlock('', null, [], $context);
$this->assertSame($context, $fixture->getContext());
}
/**
* @covers ::__construct
* @covers ::getLocation
*
* @uses \phpDocumentor\Reflection\DocBlock\Description
* @uses \phpDocumentor\Reflection\Location
*/
public function testDocBlockKnowsAtWhichLineItIs()
{
$location = new Location(10);
$fixture = new DocBlock('', null, [], null, $location);
$this->assertSame($location, $fixture->getLocation());
}
/**
* @covers ::__construct
* @covers ::isTemplateStart
*
* @uses \phpDocumentor\Reflection\DocBlock\Description
*/
public function testDocBlockKnowsIfItIsTheStartOfADocBlockTemplate()
{
$fixture = new DocBlock('', null, [], null, null, true);
$this->assertTrue($fixture->isTemplateStart());
}
/**
* @covers ::__construct
* @covers ::isTemplateEnd
*
* @uses \phpDocumentor\Reflection\DocBlock\Description
*/
public function testDocBlockKnowsIfItIsTheEndOfADocBlockTemplate()
{
$fixture = new DocBlock('', null, [], null, null, false, true);
$this->assertTrue($fixture->isTemplateEnd());
}
}