1--TEST--
2Unit test for call graph with labeled clusters
3--FILE--
4<?php
5
6/**
7 * Test 17: "Call graph with labeled 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('size' => 8.6, 'ratio' => 'fill'),
18                            'G', false);
19
20$graph->addCluster('cluster_error.h', 'error.h');
21$graph->addNode('interp_err', null, 'cluster_error.h');
22
23$graph->addCluster('cluster_sfio.h', 'sfio.h');
24$graph->addNode('sfprintf', null, 'cluster_sfio.h');
25
26$graph->addCluster('cluster_ciafan.c', 'ciafan.c');
27$graph->addNode('ciafan', null, 'cluster_ciafan.c');
28$graph->addNode('computefan', null, 'cluster_ciafan.c');
29$graph->addNode('increment', null, 'cluster_ciafan.c');
30
31$graph->addCluster('cluster_util.c', 'util.c');
32$graph->addNode('stringdup', null, 'cluster_util.c');
33$graph->addNode('fatal', null, 'cluster_util.c');
34$graph->addNode('debug', null, 'cluster_util.c');
35
36$graph->addCluster('cluster_query.h', 'query.h');
37$graph->addNode('ref', null, 'cluster_query.h');
38$graph->addNode('def', null, 'cluster_query.h');
39
40$graph->addCluster('cluster_field.h', '');
41$graph->addNode('get_sym_fields', null, 'cluster_field.h');
42
43$graph->addCluster('cluster_stdio.h', 'stdio.h');
44$graph->addNode('stdprintf', null, 'cluster_stdio.h');
45$graph->addNode('stdsprintf', null, 'cluster_stdio.h');
46
47$graph->addCluster('cluster_<libc.a>', '');
48$graph->addNode('getopt', null, 'cluster_<libc.a>');
49
50$graph->addCluster('cluster_stdlib.h', 'stdlib.h');
51$graph->addNode('exit', null, 'cluster_stdlib.h');
52$graph->addNode('malloc', null, 'cluster_stdlib.h');
53$graph->addNode('free', null, 'cluster_stdlib.h');
54$graph->addNode('realloc', null, 'cluster_stdlib.h');
55
56$graph->addCluster('cluster_main.c', '');
57$graph->addNode('main', null, 'cluster_main.c');
58
59$graph->addCluster('cluster_index.h', '');
60$graph->addNode('init_index', null, 'cluster_index.h');
61
62$graph->addCluster('cluster_string.h', 'string.h');
63$graph->addNode('strcpy', null, 'cluster_string.h');
64$graph->addNode('strlen', null, 'cluster_string.h');
65$graph->addNode('strcmp', null, 'cluster_string.h');
66$graph->addNode('strcat', null, 'cluster_string.h');
67
68$graph->addEdge(array('ciafan' => 'computefan'));
69$graph->addEdge(array('fan' => 'increment'));
70$graph->addEdge(array('computefan' => 'fan'));
71$graph->addEdge(array('stringdup' => 'fatal'));
72$graph->addEdge(array('main' => 'exit'));
73$graph->addEdge(array('main' => 'interp_err'));
74$graph->addEdge(array('main' => 'ciafan'));
75$graph->addEdge(array('main' => 'fatal'));
76$graph->addEdge(array('main' => 'malloc'));
77$graph->addEdge(array('main' => 'strcpy'));
78$graph->addEdge(array('main' => 'getopt'));
79$graph->addEdge(array('main' => 'init_index'));
80$graph->addEdge(array('main' => 'strlen'));
81$graph->addEdge(array('fan' => 'fatal'));
82$graph->addEdge(array('fan' => 'ref'));
83$graph->addEdge(array('fan' => 'interp_err'));
84$graph->addEdge(array('ciafan' => 'def'));
85$graph->addEdge(array('fan' => 'free'));
86$graph->addEdge(array('computefan' => 'stdprintf'));
87$graph->addEdge(array('computefan' => 'get_sym_fields'));
88$graph->addEdge(array('fan' => 'exit'));
89$graph->addEdge(array('fan' => 'malloc'));
90$graph->addEdge(array('increment' => 'strcmp'));
91$graph->addEdge(array('computefan' => 'malloc'));
92$graph->addEdge(array('fan' => 'stdsprintf'));
93$graph->addEdge(array('fan' => 'strlen'));
94$graph->addEdge(array('computefan' => 'strcmp'));
95$graph->addEdge(array('computefan' => 'realloc'));
96$graph->addEdge(array('computefan' => 'strlen'));
97$graph->addEdge(array('debug' => 'sfprintf'));
98$graph->addEdge(array('debug' => 'strcat'));
99$graph->addEdge(array('stringdup' => 'malloc'));
100$graph->addEdge(array('fatal' => 'sfprintf'));
101$graph->addEdge(array('stringdup' => 'strcpy'));
102$graph->addEdge(array('stringdup' => 'strlen'));
103$graph->addEdge(array('fatal' => 'exit'));
104
105echo $graph->parse();
106
107?>
108--EXPECT--
109digraph G {
110    size=8.6;
111    ratio=fill;
112    subgraph "cluster_error.h" {
113        graph [ label="error.h" ];
114        interp_err;
115    }
116    subgraph "cluster_sfio.h" {
117        graph [ label="sfio.h" ];
118        sfprintf;
119    }
120    subgraph "cluster_ciafan.c" {
121        graph [ label="ciafan.c" ];
122        ciafan;
123        computefan;
124        increment;
125    }
126    subgraph "cluster_util.c" {
127        graph [ label="util.c" ];
128        stringdup;
129        fatal;
130        debug;
131    }
132    subgraph "cluster_query.h" {
133        graph [ label="query.h" ];
134        ref;
135        def;
136    }
137    subgraph "cluster_field.h" {
138        get_sym_fields;
139    }
140    subgraph "cluster_stdio.h" {
141        graph [ label="stdio.h" ];
142        stdprintf;
143        stdsprintf;
144    }
145    subgraph "cluster_<libc.a>" {
146        getopt;
147    }
148    subgraph "cluster_stdlib.h" {
149        graph [ label="stdlib.h" ];
150        exit;
151        malloc;
152        free;
153        realloc;
154    }
155    subgraph "cluster_main.c" {
156        main;
157    }
158    subgraph "cluster_index.h" {
159        init_index;
160    }
161    subgraph "cluster_string.h" {
162        graph [ label="string.h" ];
163        strcpy;
164        strlen;
165        strcmp;
166        strcat;
167    }
168    ciafan -> computefan;
169    ciafan -> def;
170    fan -> increment;
171    fan -> fatal;
172    fan -> ref;
173    fan -> interp_err;
174    fan -> free;
175    fan -> exit;
176    fan -> malloc;
177    fan -> stdsprintf;
178    fan -> strlen;
179    computefan -> fan;
180    computefan -> stdprintf;
181    computefan -> get_sym_fields;
182    computefan -> malloc;
183    computefan -> strcmp;
184    computefan -> realloc;
185    computefan -> strlen;
186    stringdup -> fatal;
187    stringdup -> malloc;
188    stringdup -> strcpy;
189    stringdup -> strlen;
190    main -> exit;
191    main -> interp_err;
192    main -> ciafan;
193    main -> fatal;
194    main -> malloc;
195    main -> strcpy;
196    main -> getopt;
197    main -> init_index;
198    main -> strlen;
199    increment -> strcmp;
200    debug -> sfprintf;
201    debug -> strcat;
202    fatal -> sfprintf;
203    fatal -> exit;
204}