1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
|
<?php
namespace LaminasTest\Code\Reflection;
use Laminas\Code\Generator\DocBlock\Tag\VarTag;
use Laminas\Code\Reflection;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\TestCase;
#[Group('Laminas_Reflection')]
#[Group('Laminas_Reflection_DocBlock')]
#[Group('Laminas_Reflection_DocBlock_Tag')]
class ReflectionDocBlockTagTest extends TestCase
{
public function testTagDescriptionIsReturned()
{
$classReflection = new Reflection\ClassReflection(TestAsset\TestSampleClass5::class);
$authorTag = $classReflection->getDocBlock()->getTag('author');
self::assertEquals('Ralph Schindler', $authorTag->getAuthorName());
self::assertEquals('ralph.schindler@zend.com', $authorTag->getAuthorEmail());
}
public function testTagShouldAllowJustTagNameInDocBlockTagLine()
{
$classReflection = new Reflection\ClassReflection(TestAsset\TestSampleClass6::class);
$tag = $classReflection->getMethod('doSomething')->getDocBlock()->getTag('emptyTag');
self::assertEquals('emptyTag', $tag->getName(), 'Factory First Match Failed');
}
public function testTagShouldAllowMultipleWhitespacesBeforeDescription()
{
$classReflection = new Reflection\ClassReflection(TestAsset\TestSampleClass6::class);
$tag = $classReflection->getMethod('doSomething')->getDocBlock()->getTag('descriptionTag');
self::assertNotEquals(
' A tag with just a description',
$tag->getContent(),
'Final Match Failed'
);
self::assertEquals(
'A tag with just a description',
$tag->getContent(),
'Final Match Failed'
);
}
public function testToString()
{
$classReflection = new Reflection\ClassReflection(TestAsset\TestSampleClass6::class);
$tag = $classReflection->getMethod('doSomething')->getDocBlock()->getTag('descriptionTag');
$expectedString = 'DocBlock Tag [ * @descriptionTag ]' . "\n";
self::assertEquals($expectedString, (string) $tag);
}
public function testTypeParam()
{
$classReflection = new Reflection\ClassReflection(TestAsset\TestSampleClass5::class);
$paramTag = $classReflection->getMethod('doSomething')->getDocBlock()->getTag('param');
self::assertEquals('int', $paramTag->getType());
}
public function testVariableName()
{
$classReflection = new Reflection\ClassReflection(TestAsset\TestSampleClass5::class);
$paramTag = $classReflection->getMethod('doSomething')->getDocBlock()->getTag('param');
self::assertEquals('$one', $paramTag->getVariableName());
}
public function testAllowsMultipleSpacesInDocBlockTagLine()
{
$classReflection = new Reflection\ClassReflection(TestAsset\TestSampleClass6::class);
$paramTag = $classReflection->getMethod('doSomething')->getDocBlock()->getTag('param');
self::assertEquals('int', $paramTag->getType(), 'Second Match Failed');
self::assertEquals('$var', $paramTag->getVariableName(), 'Third Match Failed');
self::assertEquals(
'Description of $var',
$paramTag->getDescription(),
'Final Match Failed'
);
}
#[Group('Laminas-8307')]
public function testNamespaceInParam()
{
$classReflection = new Reflection\ClassReflection(TestAsset\TestSampleClass7::class);
$paramTag = $classReflection->getMethod('doSomething')->getDocBlock()->getTag('param');
self::assertEquals('Laminas\Foo\Bar', $paramTag->getType());
self::assertEquals('$var', $paramTag->getVariableName());
self::assertEquals('desc', $paramTag->getDescription());
}
public function testType()
{
$classReflection = new Reflection\ClassReflection(TestAsset\TestSampleClass5::class);
$paramTag = $classReflection->getMethod('doSomething')->getDocBlock()->getTag('return');
self::assertEquals('mixed', $paramTag->getType());
}
public function testAllowsMultipleSpacesInDocBlockTagLine2()
{
$classReflection = new Reflection\ClassReflection(TestAsset\TestSampleClass6::class);
$paramTag = $classReflection->getMethod('doSomething')->getDocBlock()->getTag('return');
self::assertEquals('string', $paramTag->getType(), 'Second Match Failed');
self::assertEquals(
'Description of return value',
$paramTag->getDescription(),
'Final Match Failed'
);
}
#[Group('Laminas-8307')]
public function testReturnClassWithNamespace()
{
$classReflection = new Reflection\ClassReflection(TestAsset\TestSampleClass7::class);
$paramTag = $classReflection->getMethod('doSomething')->getDocBlock()->getTag('return');
self::assertEquals('Laminas\Code\Reflection\DocBlock', $paramTag->getType());
}
#[DataProvider('propertyVarDocProvider')]
public function testPropertyVarDoc(
string $property,
array $expectedTypes,
?string $expectedName,
?string $expectedDescription
) {
$classReflection = new Reflection\ClassReflection(
TestAsset\TestSampleClass14::class
);
/** @var VarTag $varTag */
$varTag = $classReflection
->getProperty($property)
->getDocBlock()
->getTag('var');
self::assertSame($expectedTypes, $varTag->getTypes());
self::assertSame($expectedName, $varTag->getVariableName());
self::assertSame($expectedDescription, $varTag->getDescription());
}
public static function propertyVarDocProvider(): array
{
return [
'only type' => ['onlyType', ['string'], null, null],
'type and description' => [
'typeDescription',
['string'],
null,
'Foo bar',
],
'type and name' => ['typeName', ['string'], '$typeName', null],
'type, name and description' => [
'typeNameDescription',
['string'],
'$typeNameDescription',
'Foo bar',
],
];
}
}
|