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}