File: ModifyBackTraceSafeTest.php

package info (click to toggle)
php-phpdocumentor-reflection-docblock 5.6.5-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,424 kB
  • sloc: php: 9,041; xml: 67; makefile: 54
file content (75 lines) | stat: -rw-r--r-- 1,477 bytes parent folder | download
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
<?php

declare(strict_types=1);

namespace phpDocumentor\Reflection;

use PHPUnit\Framework\Attributes\CoversNothing;
use PHPUnit\Framework\Attributes\DoesNotPerformAssertions;
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;
    }
}