1--TEST--
2Unit test for graph with clusters
3--FILE--
4<?php
5
6/**
7 * Test 17: "Process diagram with clusters"
8 *
9 * Graph definition taken from GraphViz documentation
10 *
11 * @category Image
12 * @package  Image_GraphViz
13 * @author   Philippe Jausions <jausions@php.net>
14 */
15require_once 'Image/GraphViz.php';
16
17$graph = new Image_GraphViz(true, array(), 'G', false);
18
19// cluster0
20$graph->addCluster('cluster0', 'process #1',
21                   array('style' => 'filled', 'color' => 'lightgrey'));
22$graph->addNode('a0', null, 'cluster0');
23$graph->addNode('a1', null, 'cluster0');
24$graph->addNode('a2', null, 'cluster0');
25$graph->addNode('a3', null, 'cluster0');
26$graph->addEdge(array('a0' => 'a1'));
27$graph->addEdge(array('a1' => 'a2'));
28$graph->addEdge(array('a2' => 'a3'));
29
30// cluster1
31$graph->addCluster('cluster1', 'process #2',
32                   array('color' => 'blue'));
33$graph->addNode('b0', null, 'cluster1');
34$graph->addNode('b1', null, 'cluster1');
35$graph->addNode('b2', null, 'cluster1');
36$graph->addNode('b3', null, 'cluster1');
37$graph->addEdge(array('b0' => 'b1'));
38$graph->addEdge(array('b1' => 'b2'));
39$graph->addEdge(array('b2' => 'b3'));
40
41// Global
42$graph->addNode('start', array('shape' => 'Mdiamond'));
43$graph->addNode('end', array('shape' => 'Msquare'));
44
45$graph->addEdge(array('start' => 'a0'));
46$graph->addEdge(array('start' => 'b0'));
47
48$graph->addEdge(array('a1' => 'b3'));
49$graph->addEdge(array('b2' => 'a3'));
50$graph->addEdge(array('a3' => 'a0'));
51$graph->addEdge(array('a3' => 'end'));
52$graph->addEdge(array('b3' => 'end'));
53
54echo $graph->parse();
55
56?>
57--EXPECT--
58digraph G {
59    start [ shape=Mdiamond ];
60    end [ shape=Msquare ];
61    subgraph cluster0 {
62        graph [ style=filled,color=lightgrey,label="process #1" ];
63        a0;
64        a1;
65        a2;
66        a3;
67    }
68    subgraph cluster1 {
69        graph [ color=blue,label="process #2" ];
70        b0;
71        b1;
72        b2;
73        b3;
74    }
75    a0 -> a1;
76    a1 -> a2;
77    a1 -> b3;
78    a2 -> a3;
79    b0 -> b1;
80    b1 -> b2;
81    b2 -> b3;
82    b2 -> a3;
83    start -> a0;
84    start -> b0;
85    a3 -> a0;
86    a3 -> end;
87    b3 -> end;
88}