File "NodesFactoryTest.php"
Full Path: /var/www/html/back/vendor/phpdocumentor/reflection/tests/unit/phpDocumentor/Reflection/Php/NodesFactoryTest.php
File size: 2.24 KB
MIME-type: text/x-php
Charset: utf-8
<?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;
use phpDocumentor\Reflection\NodeVisitor\ElementNameResolver;
use PhpParser\NodeTraverser;
use PhpParser\NodeTraverserInterface;
use PhpParser\NodeVisitor\NameResolver;
use PhpParser\Parser;
use PhpParser\ParserFactory;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\TestCase;
use Prophecy\PhpUnit\ProphecyTrait;
#[CoversClass(NodesFactory::class)]
final class NodesFactoryTest extends TestCase
{
use ProphecyTrait;
/**
* Tests that an instance of the NodesFactory can be made using its static factory method.
*
* Unfortunately, we cannot actually inspect whether all recommended items were instantiated, so I create an example
* NodesFactory containing what I expected and this test will verify that no regression took place.
*/
public function testThatAFactoryWithRecommendedComponentsCanBeInstantiated(): void
{
$factory = NodesFactory::createInstance();
$this->assertInstanceOf(NodesFactory::class, $factory);
$this->assertEquals($this->givenTheExpectedDefaultNodesFactory(), $factory);
}
public function testThatCodeGetsConvertedIntoNodes(): void
{
$parser = $this->prophesize(Parser::class);
$parser->parse('this is my code')->willReturn(['parsed code']);
$nodeTraverser = $this->prophesize(NodeTraverserInterface::class);
$nodeTraverser->traverse(['parsed code'])->willReturn(['traversed code']);
$factory = new NodesFactory($parser->reveal(), $nodeTraverser->reveal());
$result = $factory->create('this is my code');
$this->assertSame(['traversed code'], $result);
}
private function givenTheExpectedDefaultNodesFactory(): NodesFactory
{
$parser = (new ParserFactory())->createForNewestSupportedVersion();
$traverser = new NodeTraverser();
$traverser->addVisitor(new NameResolver());
$traverser->addVisitor(new ElementNameResolver());
return new NodesFactory($parser, $traverser);
}
}