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
|
<?php
declare(strict_types=1);
namespace phpDocumentor\Reflection;
use PHPUnit\Framework\TestCase;
/**
* @coversNothing
*/
class ModifyBackTraceSafeTest extends TestCase
{
/**
* @doesNotPerformAssertions
*/
public function testBackTraceModificationDoesNotImpactFunctionArguments()
{
$traverser = new Traverser();
$node1 = new Node();
$node1->children[] = new Node();
$node1->children[] = new Node();
$traverser->traverse([new Node(), $node1]);
}
}
class Node {
public $children = [];
}
class Traverser
{
public function traverse(array $nodes)
{
$this->traverseArray($nodes);
}
public function traverseArray(array $nodes): array
{
$doNodes = [];
foreach ($nodes as &$node) {
$node = $this->callback($node);
$node = $this->traverseNode($node);
$doNodes[] = $node;
}
return $doNodes;
}
public function callback(Node $class) : Node
{
$docblock = <<<DOCBLOCK
/**
* @see sql.php
*/
DOCBLOCK;
$factor = DocBlockFactory::createInstance();
$factor->create($docblock);
return $class;
}
private function traverseNode(Node $node) : Node
{
if ($node->children) {
$this->traverseArray($node->children);
}
return $node;
}
}
|