/** * Create document from Process * * @param Process $process * * @return Document */ public static function fromProcess(Process $process) : Document { $document = new Document($process->name()); foreach ($process->states() as $state) { $document->addNode(new Node($state->name())); foreach ($state->events() as $event) { $transitions = array_filter(['target' => $event->targetState(), 'error' => $event->errorState()]); foreach ($transitions as $type => $target) { switch ($type) { case 'target': $document->addEdge(Edge::targetTransition($state->name(), $target, $event->name())); break; case 'error': $document->addEdge(Edge::errorTransition($state->name(), $target, $event->name())); break; default: $document->addEdge(new Edge($state->name(), $target, $event->name())); } } } } return $document; }
public function testCreateFromProcess() { $process = new Process('test', 'fromNode', [new State('fromNode', [new Event('eventName', 'targetNode', 'errorNode')]), new State('targetNode'), new State('errorNode')]); $document = Document::fromProcess($process); $this->assertEquals('digraph test {dpi="75";pad="1";fontname="Courier";nodesep="1";rankdir="TD";ranksep="0.5";node[label="fromNode"]{ node_fromNode };node[label="targetNode"]{ node_targetNode };node[label="errorNode"]{ node_errorNode };edge[label=" eventName",color="#66FF00"] node_fromNode -> node_targetNode;edge[label=" eventName",color="#FF2200"] node_fromNode -> node_errorNode;}', (string) $document); }