<?php declare(strict_types=1); /** * 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. * * @link http://phpdoc.org */ namespace phpDocumentor\Reflection\Php\Factory; use Mockery as m; use Mockery\Adapter\Phpunit\MockeryTestCase; use phpDocumentor\Reflection\Fqsen; use PhpParser\Comment\Doc; use PhpParser\Node\Const_; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt\ClassConst; use PHPUnit\Framework\Attributes\CoversClass; #[CoversClass(ClassConstantIterator::class)] final class ClassConstantIteratorTest extends MockeryTestCase { public function testIterateProps(): void { $const1 = new Const_('\Space\MyClass::MY_CONST1', new Variable('1')); $const1->setAttribute('fqsen', new Fqsen((string) $const1->name)); $const2 = new Const_('\Space\MyClass::MY_CONST2', new Variable('2')); $const2->setAttribute('fqsen', new Fqsen((string) $const2->name)); $classConstantNode = new ClassConst([$const1, $const2]); $i = 1; foreach (new ClassConstantIterator($classConstantNode) as $constant) { $this->assertEquals('\Space\MyClass::MY_CONST' . $i, $constant->getName()); $this->assertEquals('\Space\MyClass::MY_CONST' . $i, (string) $constant->getFqsen()); $this->assertEquals($i, $constant->getValue()->name); ++$i; } } public function testKey(): void { $constantMock = m::mock(ClassConst::class); $fixture = new ClassConstantIterator($constantMock); $this->assertEquals(0, $fixture->key()); $fixture->next(); $this->assertEquals(1, $fixture->key()); } public function testProxyMethods(): void { $constantMock = m::mock(ClassConst::class); $constantMock->shouldReceive('getLine')->once()->andReturn(10); $fixture = new ClassConstantIterator($constantMock); $this->assertEquals(10, $fixture->getLine()); } public function testGetDocCommentPropFirst(): void { $const = m::mock(Const_::class); $classConstants = m::mock(ClassConst::class); $classConstants->consts = [$const]; $const->shouldReceive('getDocComment')->once()->andReturn(new Doc('test')); $classConstants->shouldReceive('getDocComment')->never(); $fixture = new ClassConstantIterator($classConstants); $this->assertEquals('test', $fixture->getDocComment()->getText()); } public function testGetDocComment(): void { $const = m::mock(Const_::class); $classConstants = m::mock(ClassConst::class); $classConstants->consts = [$const]; $const->shouldReceive('getDocComment')->once()->andReturnNull(); $classConstants->shouldReceive('getDocComment')->once()->andReturn(new Doc('test')); $fixture = new ClassConstantIterator($classConstants); $this->assertEquals('test', $fixture->getDocComment()->getText()); } }