221 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			221 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php declare(strict_types=1);
 | |
| /*
 | |
|  * This file is part of the Docblock package.
 | |
|  * For the full copyright and license information, please view the LICENSE
 | |
|  * file that was distributed with this source code.
 | |
|  *
 | |
|  * @license MIT License
 | |
|  */
 | |
| 
 | |
| namespace phpowermove\docblock\tests;
 | |
| 
 | |
| use InvalidArgumentException;
 | |
| use phpowermove\docblock\Docblock;
 | |
| use phpowermove\docblock\tags\AuthorTag;
 | |
| use phpowermove\docblock\tags\ParamTag;
 | |
| use phpowermove\docblock\tags\PropertyTag;
 | |
| use phpowermove\docblock\tags\ReturnTag;
 | |
| use phpowermove\docblock\tags\SeeTag;
 | |
| use phpowermove\docblock\tags\SinceTag;
 | |
| use phpowermove\docblock\tags\ThrowsTag;
 | |
| use phpowermove\docblock\tags\UnknownTag;
 | |
| use phpowermove\docblock\tests\fixtures\MyDocBlock;
 | |
| use PHPUnit\Framework\TestCase;
 | |
| 
 | |
| class DocblockTest extends TestCase {
 | |
| 	public function testShortDescription(): void {
 | |
| 		$desc = 'Hello World';
 | |
| 		$docblock = new Docblock();
 | |
| 
 | |
| 		$docblock->setShortDescription($desc);
 | |
| 
 | |
| 		$this->assertEquals($desc, $docblock->getShortDescription());
 | |
| 	}
 | |
| 
 | |
| 	public function testLongDescription(): void {
 | |
| 		$desc = 'Hello World';
 | |
| 		$docblock = new Docblock();
 | |
| 
 | |
| 		$docblock->setLongDescription($desc);
 | |
| 
 | |
| 		$this->assertEquals($desc, $docblock->getLongDescription());
 | |
| 	}
 | |
| 
 | |
| 	public function testSimpleReadWrite(): void {
 | |
| 		$expected = '/**
 | |
|  * Short Description.
 | |
|  *
 | |
|  * Long Description.
 | |
|  */';
 | |
| 		$docblock = new Docblock($expected);
 | |
| 
 | |
| 		$this->assertEquals('Short Description.', $docblock->getShortDescription());
 | |
| 		$this->assertEquals('Long Description.', $docblock->getLongDescription());
 | |
| 		$this->assertEquals($expected, $docblock->toString());
 | |
| 	}
 | |
| 
 | |
| 	public function testSingleLine(): void {
 | |
| 		$docblock = new Docblock('/** Single Line Doc */');
 | |
| 		$this->assertEquals('Single Line Doc', $docblock->getShortDescription());
 | |
| 	}
 | |
| 
 | |
| 	public function testTags(): void {
 | |
| 		$expected = '/**
 | |
|  * @see https://github.com/gossi/docblock
 | |
|  * @author gossi
 | |
|  * @author KH
 | |
|  * @since 28.5.2014
 | |
|  */';
 | |
| 		$docblock = new Docblock($expected);
 | |
| 
 | |
| 		$tags = $docblock->getTags();
 | |
| 		$this->assertEquals(4, $tags->size());
 | |
| 		$this->assertTrue($docblock->hasTag('see'));
 | |
| 		$this->assertTrue($docblock->hasTag('author'));
 | |
| 		$this->assertTrue($docblock->hasTag('since'));
 | |
| 		$this->assertFalse($docblock->hasTag('license'));
 | |
| 
 | |
| 		$authors = $docblock->getTags('author');
 | |
| 		$this->assertEquals(2, $authors->size());
 | |
| 
 | |
| 		$this->assertEquals($expected, $docblock->toString());
 | |
| 		$this->assertSame($docblock, $docblock->appendTag(ThrowsTag::create()));
 | |
| 
 | |
| 		$tags = $docblock->getTags();
 | |
| 		$this->assertEquals(5, $tags->size());
 | |
| 
 | |
| 		$this->assertTrue($docblock->hasTag('author'));
 | |
| 		$this->assertFalse($docblock->hasTag('moooh'));
 | |
| 	}
 | |
| 
 | |
| 	public function testInvalidTags(): void {
 | |
| 		$this->expectException(InvalidArgumentException::class);
 | |
| 
 | |
| 		new MyDocBlock('');
 | |
| 	}
 | |
| 
 | |
| 	public function testInvalidDocblockParameter(): void {
 | |
| 		$this->expectException(\TypeError::class);
 | |
| 
 | |
| 		new Docblock(new \stdClass());
 | |
| 	}
 | |
| 
 | |
| 	public function testMultilLongLineDescription(): void {
 | |
| 		$expected = '/**
 | |
|  * Short Description.
 | |
|  *
 | |
|  * Long Description, which is very long and takes ages to reach the very last of the current line
 | |
|  * before it brakes onto the next line
 | |
|  * 
 | |
|  * sdfasdf @tag
 | |
|  *
 | |
|  * @tag2 wurst multi-
 | |
|  *     linee
 | |
|  */';
 | |
| 		$docblock = new Docblock($expected);
 | |
| 		$this->assertEquals($expected, $docblock->toString());
 | |
| 	}
 | |
| 
 | |
| 	public function testFromReflection(): void {
 | |
| 		$expected = '/**
 | |
|  * Short Description.
 | |
|  *
 | |
|  * @author gossi
 | |
|  */';
 | |
| 		$reflection = new \ReflectionClass('\\phpowermove\\docblock\\tests\\fixtures\\ReflectionTestClass');
 | |
| 		$docblock = Docblock::create($reflection);
 | |
| 
 | |
| 		$this->assertEquals($expected, '' . $docblock);
 | |
| 	}
 | |
| 
 | |
| 	public function testTagSorting(): void {
 | |
| 		$doc = new Docblock();
 | |
| 
 | |
| 		$doc->appendTag(new AuthorTag());
 | |
| 		$doc->appendTag(new SeeTag());
 | |
| 		$doc->appendTag(new ThrowsTag());
 | |
| 		$doc->appendTag((new UnknownTag())->setTagName('wurst'));
 | |
| 		$doc->appendTag(new SinceTag());
 | |
| 		$doc->appendTag(new ParamTag());
 | |
| 		$doc->appendTag(new ParamTag());
 | |
| 		$doc->appendTag(new PropertyTag());
 | |
| 		$doc->appendTag(new ReturnTag());
 | |
| 
 | |
| 		$actual = [];
 | |
| 		$expected = ['wurst', 'see', 'author', 'property', 'since', 'param', 'param', 'throws', 'return'];
 | |
| 		$sorted = $doc->getSortedTags();
 | |
| 		foreach ($sorted as $tag) {
 | |
| 			$actual[] = $tag->getTagName();
 | |
| 		}
 | |
| 
 | |
| 		$this->assertEquals($expected, $actual);
 | |
| 	}
 | |
| 
 | |
| 	public function testEmpty(): void {
 | |
| 		$doc = new Docblock();
 | |
| 		$this->assertTrue($doc->isEmpty());
 | |
| 
 | |
| 		$doc->setLongDescription('bla');
 | |
| 		$this->assertFalse($doc->isEmpty());
 | |
| 
 | |
| 		$doc->setLongDescription();
 | |
| 		$this->assertTrue($doc->isEmpty());
 | |
| 
 | |
| 		$doc->setShortDescription('bla');
 | |
| 		$this->assertFalse($doc->isEmpty());
 | |
| 
 | |
| 		$doc->setShortDescription();
 | |
| 		$this->assertTrue($doc->isEmpty());
 | |
| 
 | |
| 		$doc->appendTag(new SeeTag());
 | |
| 		$this->assertFalse($doc->isEmpty());
 | |
| 	}
 | |
| 
 | |
| 	public function testRemoveTag(): void {
 | |
| 		$expected = '/**
 | |
|  * @see https://github.com/gossi/docblock
 | |
|  * @author gossi
 | |
|  * @author KH
 | |
|  * @since 28.5.2014
 | |
|  */';
 | |
| 		$docblock = new Docblock($expected);
 | |
| 
 | |
| 		$tags = $docblock->getTags();
 | |
| 		$this->assertEquals(4, $tags->size());
 | |
| 		$this->assertTrue($docblock->hasTag('see'));
 | |
| 		$this->assertTrue($docblock->hasTag('author'));
 | |
| 		$this->assertTrue($docblock->hasTag('since'));
 | |
| 
 | |
| 		$docblock->removeTags('author');
 | |
| 
 | |
| 		$tags = $docblock->getTags();
 | |
| 		$this->assertEquals(2, $tags->size());
 | |
| 		$this->assertTrue($docblock->hasTag('see'));
 | |
| 		$this->assertTrue($docblock->hasTag('since'));
 | |
| 		$this->assertFalse($docblock->hasTag('author'));
 | |
| 
 | |
| 		$docblock->removeTags('since');
 | |
| 
 | |
| 		$tags = $docblock->getTags();
 | |
| 		$this->assertEquals(1, $tags->size());
 | |
| 		$this->assertTrue($docblock->hasTag('see'));
 | |
| 		$this->assertFalse($docblock->hasTag('since'));
 | |
| 	}
 | |
| 
 | |
| 	public function testDocblockWithBlankLines(): void {
 | |
| 		$text = '/**
 | |
|  * @param string $foo makes a fow
 | |
|  *
 | |
|  * @return bool true on success and false if it fails
 | |
|  */';
 | |
| 		$docblock = new Docblock($text);
 | |
| 		$tags = $docblock->getTags();
 | |
| 
 | |
| 		$this->assertEquals(2, $tags->size());
 | |
| 		$this->assertInstanceOf(ParamTag::class, $tags->get(0));
 | |
| 		$this->assertEquals('makes a fow', $tags->get(0)->getDescription());
 | |
| 		$this->assertInstanceOf(ReturnTag::class, $tags->get(1));
 | |
| 		$this->assertEquals('true on success and false if it fails', $tags->get(1)->getDescription());
 | |
| 	}
 | |
| }
 |