php-parser/test/PhpParser/NodeVisitorForTesting.php
Nikita Popov 1bf073a76c Avoid most MockBuilder uses in NodeVisitor testing
This removes all the warnings about at() usage ... even though
it is still used. Apparently warnings don't get emitted if the
at() usage is inside a data provider?
2020-08-08 11:49:05 +02:00

48 lines
1.3 KiB
PHP

<?php
namespace PhpParser;
class NodeVisitorForTesting implements NodeVisitor {
public $trace = [];
private $returns;
private $returnsPos;
public function __construct(array $returns = []) {
$this->returns = $returns;
$this->returnsPos = 0;
}
public function beforeTraverse(array $nodes) {
return $this->traceEvent('beforeTraverse', $nodes);
}
public function enterNode(Node $node) {
return $this->traceEvent('enterNode', $node);
}
public function leaveNode(Node $node) {
return $this->traceEvent('leaveNode', $node);
}
public function afterTraverse(array $nodes) {
return $this->traceEvent('afterTraverse', $nodes);
}
private function traceEvent(string $method, $param) {
$this->trace[] = [$method, $param];
if ($this->returnsPos < count($this->returns)) {
$currentReturn = $this->returns[$this->returnsPos];
if ($currentReturn[0] === $method && $currentReturn[1] === $param) {
$this->returnsPos++;
return $currentReturn[2];
}
}
return null;
}
public function __destruct() {
if ($this->returnsPos !== count($this->returns)) {
throw new \Exception("Expected event did not occur");
}
}
}