1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
/** |
4
|
|
|
* @file |
5
|
|
|
* Grafizzi\Graph\Tests\IG09Test: a component of the Grafizzi library. |
6
|
|
|
* |
7
|
|
|
* (c) 2012 Frédéric G. MARAND <[email protected]> |
8
|
|
|
* |
9
|
|
|
* Grafizzi is free software: you can redistribute it and/or modify it under the |
10
|
|
|
* terms of the GNU Lesser General Public License as published by the Free |
11
|
|
|
* Software Foundation, either version 3 of the License, or (at your option) any |
12
|
|
|
* later version. |
13
|
|
|
* |
14
|
|
|
* Grafizzi is distributed in the hope that it will be useful, but WITHOUT ANY |
15
|
|
|
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR |
16
|
|
|
* A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
17
|
|
|
* details. |
18
|
|
|
* |
19
|
|
|
* You should have received a copy of the GNU Lesser General Public License |
20
|
|
|
* along with Grafizzi, in the COPYING.LESSER.txt file. If not, see |
21
|
|
|
* <http://www.gnu.org/licenses/> |
22
|
|
|
*/ |
23
|
|
|
|
24
|
|
|
namespace Grafizzi\Graph\Tests; |
25
|
|
|
|
26
|
|
|
use Grafizzi\Graph\Attribute; |
27
|
|
|
use Grafizzi\Graph\Edge; |
28
|
|
|
use Grafizzi\Graph\Node; |
29
|
|
|
use Grafizzi\Graph\Subgraph; |
30
|
|
|
|
31
|
|
|
require 'vendor/autoload.php'; |
32
|
|
|
|
33
|
|
|
/** |
34
|
|
|
* A recreation of Image_GraphViz test9.phpt |
35
|
|
|
* |
36
|
|
|
* Image_GraphViz version author: Philippe Jausions <[email protected]> |
37
|
|
|
* |
38
|
|
|
* Test 9: "Unit test for graph with constrained rank clusters" |
39
|
|
|
* |
40
|
|
|
* Note: Order of instructions differs from Image_GraphViz: Grafizzi orders the |
41
|
|
|
* generated source according to the sequence of addChild() calls, whereas |
42
|
|
|
* Image_GraphViz orders subgraphs before edges whatever their insertion order. |
43
|
|
|
*/ |
44
|
|
|
class IG09Test extends BaseGraphTest { |
45
|
|
|
|
46
|
|
|
public function setUp() : void { |
47
|
|
|
// not strict by default. |
48
|
|
|
parent::setUpExtended('asde91'); |
|
|
|
|
49
|
|
|
$g = $this->Graph; |
50
|
|
|
$dic = $this->dic; |
51
|
|
|
$g->setDirected(true); |
52
|
|
|
$g->setAttribute(new Attribute($dic, 'ranksep', .75)); |
53
|
|
|
|
54
|
|
|
$rankSame = new Attribute($dic, 'rank', 'same'); |
55
|
|
|
$sgAttrs = array( |
56
|
|
|
$rankSame, |
57
|
|
|
new Attribute($dic, 'title', null), |
58
|
|
|
); |
59
|
|
|
|
60
|
|
|
/* program types graph */ |
61
|
|
|
$g->addChild($sgType = new Subgraph($dic, 'type', $sgAttrs)); |
62
|
|
|
$sgType->addChild(new Node($dic, 'Software IS')); |
63
|
|
|
$sgType->addChild(new Node($dic, 'Configuration Mgt')); |
64
|
|
|
$sgType->addChild(new Node($dic, 'Architecture & Libraries')); |
65
|
|
|
$sgType->addChild(new Node($dic, 'Process')); |
66
|
|
|
|
67
|
|
|
/* time graphs */ |
68
|
|
|
$g->addChild($sgPast = new Subgraph($dic, 'past', $sgAttrs)); |
69
|
|
|
$g->addChild($sg1978 = new Subgraph($dic, 1978, $sgAttrs)); |
70
|
|
|
$g->addChild($sg1980 = new Subgraph($dic, 1980, $sgAttrs)); |
71
|
|
|
$g->addChild($sg1982 = new Subgraph($dic, 1982, $sgAttrs)); |
72
|
|
|
$g->addChild($sg1983 = new Subgraph($dic, 1983, $sgAttrs)); |
73
|
|
|
$g->addChild($sg1985 = new Subgraph($dic, 1985, $sgAttrs)); |
74
|
|
|
$g->addChild($sg1986 = new Subgraph($dic, 1986, $sgAttrs)); |
75
|
|
|
$g->addChild($sg1987 = new Subgraph($dic, 1987, $sgAttrs)); |
76
|
|
|
$g->addChild($sg1988 = new Subgraph($dic, 1988, $sgAttrs)); |
77
|
|
|
$g->addChild($sg1989 = new Subgraph($dic, 1989, $sgAttrs)); |
78
|
|
|
$g->addChild($sg1990 = new Subgraph($dic, 1990, $sgAttrs)); |
79
|
|
|
$g->addChild($sgFuture = new Subgraph($dic, 'future', $sgAttrs)); |
80
|
|
|
|
81
|
|
|
/* programs */ |
82
|
|
|
$sgPast->addChild($nBourneSh = new Node($dic, 'Bourne sh')); |
83
|
|
|
$sgPast->addChild($nMake = new Node($dic, 'make')); |
84
|
|
|
$sgPast->addChild($nSCCS = new Node($dic, 'SCCS')); |
85
|
|
|
$sgPast->addChild($nYacc = new Node($dic, 'yacc')); |
86
|
|
|
$sgPast->addChild($nCron = new Node($dic, 'cron')); |
87
|
|
|
|
88
|
|
|
$sg1978->addChild($nReiserCpp = new Node($dic, 'Reiser cpp')); |
89
|
|
|
$sg1978->addChild($nCshell = new Node($dic, 'Cshell')); |
90
|
|
|
|
91
|
|
|
$sg1980->addChild($nEmacs = new Node($dic, 'emacs')); |
92
|
|
|
$sg1980->addChild($nBuild = new Node($dic, 'build')); |
93
|
|
|
$sg1980->addChild($nVi = new Node($dic, 'vi')); |
94
|
|
|
|
95
|
|
|
$sg1982->addChild($nCurses = new Node($dic, '<curses>')); |
96
|
|
|
$sg1982->addChild($nRCS = new Node($dic, 'RCS')); |
97
|
|
|
$sg1982->addChild($nIMX = new Node($dic, 'IMX')); |
98
|
|
|
$sg1982->addChild($nSYNED = new Node($dic, 'SYNED')); |
99
|
|
|
|
100
|
|
|
$sg1983->addChild($nksh = new Node($dic, 'ksh')); |
101
|
|
|
$sg1983->addChild($nIFS = new Node($dic, 'IFS')); |
102
|
|
|
$sg1983->addChild($nTTU = new Node($dic, 'TTU')); |
103
|
|
|
|
104
|
|
|
$sg1985->addChild($nNmake = new Node($dic, 'nmake')); |
105
|
|
|
$sg1985->addChild($nPeggy = new Node($dic, 'Peggy')); |
106
|
|
|
|
107
|
|
|
$sg1986->addChild($nNcpp = new Node($dic, 'ncpp')); |
108
|
|
|
$sg1986->addChild($nKsh_i = new Node($dic, 'ksh-i')); |
109
|
|
|
$sg1986->addChild($nCurses_i = new Node($dic, '<curses-i>')); |
110
|
|
|
$sg1986->addChild($nPg2 = new Node($dic, 'PG2')); |
111
|
|
|
$sg1986->addChild($nCasterisk = new Node($dic, 'C*')); |
112
|
|
|
|
113
|
|
|
$sg1987->addChild($nAnsiCpp = new Node($dic, 'Ansi cpp')); |
114
|
|
|
$sg1987->addChild($nNmake20 = new Node($dic, 'nmake 2.0')); |
115
|
|
|
$sg1987->addChild($n3DFS = new Node($dic, '3D File System')); |
116
|
|
|
$sg1987->addChild($nFdelta = new Node($dic, 'fdelta')); |
117
|
|
|
$sg1987->addChild($nDAG = new Node($dic, 'DAG')); |
118
|
|
|
$sg1987->addChild($nCSAS = new Node($dic, 'CSAS')); |
119
|
|
|
|
120
|
|
|
$sg1988->addChild($nCia = new Node($dic, 'CIA')); |
121
|
|
|
$sg1988->addChild($nSBCS = new Node($dic, 'SBCS')); |
122
|
|
|
$sg1988->addChild($nKsh88 = new Node($dic, 'ksh-88')); |
123
|
|
|
$sg1988->addChild($nPegasusPml = new Node($dic, 'PEGASUS/PML')); |
124
|
|
|
$sg1988->addChild($nPAX = new Node($dic, 'PAX')); |
125
|
|
|
$sg1988->addChild($nBacktalk = new Node($dic, 'backtalk')); |
126
|
|
|
|
127
|
|
|
$sg1989->addChild($nCIApp = new Node($dic, 'CIA++')); |
128
|
|
|
$sg1989->addChild($nAPP = new Node($dic, 'APP')); |
129
|
|
|
$sg1989->addChild($nSHIP = new Node($dic, 'SHIP')); |
130
|
|
|
$sg1989->addChild($nDataShare = new Node($dic, 'DataShare')); |
131
|
|
|
$sg1989->addChild($nRyacc = new Node($dic, 'ryacc')); |
132
|
|
|
$sg1989->addChild($nMosaic = new Node($dic, 'Mosaic')); |
133
|
|
|
|
134
|
|
|
$sg1990->addChild($nLibft = new Node($dic, 'libft')); |
135
|
|
|
$sg1990->addChild($nCoShell = new Node($dic, 'CoShell')); |
136
|
|
|
$sg1990->addChild($nDIA = new Node($dic, 'DIA')); |
137
|
|
|
$sg1990->addChild($nIFS_i = new Node($dic, 'IFS-i')); |
138
|
|
|
$sg1990->addChild($nKyacc = new Node($dic, 'kyacc')); |
139
|
|
|
$sg1990->addChild($nSfio = new Node($dic, 'sfio')); |
140
|
|
|
$sg1990->addChild($nYeast = new Node($dic, 'yeast')); |
141
|
|
|
$sg1990->addChild($nML_X = new Node($dic, 'ML-X')); |
142
|
|
|
$sg1990->addChild($nDOT = new Node($dic, 'DOT')); |
143
|
|
|
|
144
|
|
|
$sgFuture->addChild($nAST = new Node($dic, 'Adv. Software Technology')); |
145
|
|
|
|
146
|
|
|
/* the time-line graph */ |
147
|
|
|
$g->addChild(new Edge($dic, $yPast = new Node($dic, 'past'), $y1978 = new Node($dic, 1978))); |
148
|
|
|
$g->addChild(new Edge($dic, $y1978, $y1980 = new Node($dic, 1980))); |
149
|
|
|
$g->addChild(new Edge($dic, $y1980, $y1982 = new Node($dic, 1982))); |
150
|
|
|
$g->addChild(new Edge($dic, $y1982, $y1983 = new Node($dic, 1983))); |
151
|
|
|
$g->addChild(new Edge($dic, $y1983, $y1985 = new Node($dic, 1985))); |
152
|
|
|
$g->addChild(new Edge($dic, $y1985, $y1986 = new Node($dic, 1986))); |
153
|
|
|
$g->addChild(new Edge($dic, $y1986, $y1987 = new Node($dic, 1987))); |
154
|
|
|
$g->addChild(new Edge($dic, $y1987, $y1988 = new Node($dic, 1988))); |
155
|
|
|
$g->addChild(new Edge($dic, $y1988, $y1989 = new Node($dic, 1989))); |
156
|
|
|
$g->addChild(new Edge($dic, $y1989, $y1990 = new Node($dic, 1990))); |
157
|
|
|
$g->addChild(new Edge($dic, $y1990, $yFuture = new Node($dic, 'future'))); |
158
|
|
|
|
159
|
|
|
/* hierarchy */ |
160
|
|
|
$g->addChild(new Edge($dic, $nSCCS, $nRCS)); |
161
|
|
|
$g->addChild(new Edge($dic, $nSCCS, $n3DFS)); |
162
|
|
|
$g->addChild(new Edge($dic, $nSCCS, $nNmake)); |
163
|
|
|
$g->addChild(new Edge($dic, $nMake, $nNmake)); |
164
|
|
|
$g->addChild(new Edge($dic, $nMake, $nBuild)); |
165
|
|
|
$g->addChild(new Edge($dic, $nBourneSh, $nCshell)); |
166
|
|
|
$g->addChild(new Edge($dic, $nBourneSh, $nksh)); |
167
|
|
|
$g->addChild(new Edge($dic, $nYacc, $nRyacc)); |
168
|
|
|
$g->addChild(new Edge($dic, $nCron, $nYeast)); |
169
|
|
|
|
170
|
|
|
$g->addChild(new Edge($dic, $nReiserCpp, $nNcpp)); |
171
|
|
|
$g->addChild(new Edge($dic, $nCshell, $nksh)); |
172
|
|
|
|
173
|
|
|
$g->addChild(new Edge($dic, $nBuild, $nNmake20)); |
174
|
|
|
$g->addChild(new Edge($dic, $nVi, $nksh)); |
175
|
|
|
$g->addChild(new Edge($dic, $nVi, $nCurses)); |
176
|
|
|
$g->addChild(new Edge($dic, $nEmacs, $nksh)); |
177
|
|
|
|
178
|
|
|
$g->addChild(new Edge($dic, $nRCS, $nSBCS)); |
179
|
|
|
$g->addChild(new Edge($dic, $nRCS, $nFdelta)); |
180
|
|
|
$g->addChild(new Edge($dic, $nCurses, $nCurses_i)); |
181
|
|
|
$g->addChild(new Edge($dic, $nSYNED, $nPeggy)); |
182
|
|
|
$g->addChild(new Edge($dic, $nIMX, $nTTU)); |
183
|
|
|
|
184
|
|
|
$g->addChild(new Edge($dic, $nksh, $nNmake)); |
185
|
|
|
$g->addChild(new Edge($dic, $nksh, $nKsh_i)); |
186
|
|
|
$g->addChild(new Edge($dic, $nksh, $nKsh88)); |
187
|
|
|
$g->addChild(new Edge($dic, $nIFS, $nCurses_i)); |
188
|
|
|
$g->addChild(new Edge($dic, $nIFS, $nSfio)); |
189
|
|
|
$g->addChild(new Edge($dic, $nIFS, $nIFS_i)); |
190
|
|
|
$g->addChild(new Edge($dic, $nTTU, $nPg2)); |
191
|
|
|
|
192
|
|
|
$g->addChild(new Edge($dic, $nNmake, $nksh)); |
193
|
|
|
$g->addChild(new Edge($dic, $nNmake, $nNcpp)); |
194
|
|
|
$g->addChild(new Edge($dic, $nNmake, $n3DFS)); |
195
|
|
|
$g->addChild(new Edge($dic, $nNmake, $nNmake20)); |
196
|
|
|
$g->addChild(new Edge($dic, $nPeggy, $nPegasusPml)); |
197
|
|
|
$g->addChild(new Edge($dic, $nPeggy, $nRyacc)); |
198
|
|
|
|
199
|
|
|
$g->addChild(new Edge($dic, $nCasterisk, $nCSAS)); |
200
|
|
|
$g->addChild(new Edge($dic, $nNcpp, $nAnsiCpp)); |
201
|
|
|
$g->addChild(new Edge($dic, $nCurses_i, $nFdelta)); |
202
|
|
|
$g->addChild(new Edge($dic, $nKsh_i, $nKsh88)); |
203
|
|
|
$g->addChild(new Edge($dic, $nPg2, $nBacktalk)); |
204
|
|
|
|
205
|
|
|
$g->addChild(new Edge($dic, $nDAG, $nSoftwareIs = new Node($dic, 'Software IS'))); |
206
|
|
|
$g->addChild(new Edge($dic, $nDAG, $nDOT)); |
207
|
|
|
$g->addChild(new Edge($dic, $nDAG, $nDIA)); |
208
|
|
|
$g->addChild(new Edge($dic, $nCSAS, $nCia)); |
209
|
|
|
$g->addChild(new Edge($dic, $nAnsiCpp, $nConfigMgt = new Node($dic, 'Configuration Mgt'))); |
210
|
|
|
$g->addChild(new Edge($dic, $nFdelta, $nSBCS)); |
211
|
|
|
$g->addChild(new Edge($dic, $nFdelta, $nPAX)); |
212
|
|
|
$g->addChild(new Edge($dic, $n3DFS, $nConfigMgt)); |
213
|
|
|
$g->addChild(new Edge($dic, $nNmake20, $nConfigMgt)); |
214
|
|
|
$g->addChild(new Edge($dic, $nNmake20, $nCoShell)); |
215
|
|
|
|
216
|
|
|
$g->addChild(new Edge($dic, $nCia, $nCIApp)); |
217
|
|
|
$g->addChild(new Edge($dic, $nCia, $nDIA)); |
218
|
|
|
$g->addChild(new Edge($dic, $nSBCS, $nConfigMgt)); |
219
|
|
|
$g->addChild(new Edge($dic, $nPAX, $nSHIP)); |
220
|
|
|
$g->addChild(new Edge($dic, $nKsh88, $nConfigMgt)); |
221
|
|
|
$g->addChild(new Edge($dic, $nKsh88, $nArchi = new Node($dic, 'Architecture & Libraries'))); |
222
|
|
|
$g->addChild(new Edge($dic, $nKsh88, $nSfio)); |
223
|
|
|
$g->addChild(new Edge($dic, $nPegasusPml, $nML_X)); |
224
|
|
|
$g->addChild(new Edge($dic, $nPegasusPml, $nArchi)); |
225
|
|
|
$g->addChild(new Edge($dic, $nBacktalk, $nDataShare)); |
226
|
|
|
|
227
|
|
|
$g->addChild(new Edge($dic, $nCIApp, $nSoftwareIs)); |
228
|
|
|
$g->addChild(new Edge($dic, $nAPP, $nDIA)); |
229
|
|
|
$g->addChild(new Edge($dic, $nAPP, $nSoftwareIs)); |
230
|
|
|
$g->addChild(new Edge($dic, $nSHIP, $nConfigMgt)); |
231
|
|
|
$g->addChild(new Edge($dic, $nDataShare, $nArchi)); |
232
|
|
|
$g->addChild(new Edge($dic, $nRyacc, $nKyacc)); |
233
|
|
|
$g->addChild(new Edge($dic, $nMosaic, $nProcess = new Node($dic, 'Process'))); |
234
|
|
|
|
235
|
|
|
$g->addChild(new Edge($dic, $nDOT, $nSoftwareIs)); |
236
|
|
|
$g->addChild(new Edge($dic, $nDIA, $nSoftwareIs)); |
237
|
|
|
$g->addChild(new Edge($dic, $nLibft, $nSoftwareIs)); |
238
|
|
|
$g->addChild(new Edge($dic, $nCoShell, $nConfigMgt)); |
239
|
|
|
$g->addChild(new Edge($dic, $nCoShell, $nArchi)); |
240
|
|
|
$g->addChild(new Edge($dic, $nSfio, $nArchi)); |
241
|
|
|
$g->addChild(new Edge($dic, $nIFS_i, $nArchi)); |
242
|
|
|
$g->addChild(new Edge($dic, $nML_X, $nArchi)); |
243
|
|
|
$g->addChild(new Edge($dic, $nKyacc, $nArchi)); |
244
|
|
|
$g->addChild(new Edge($dic, $nYeast, $nProcess)); |
245
|
|
|
|
246
|
|
|
$g->addChild(new Edge($dic, $nArchi, $nAST)); |
247
|
|
|
$g->addChild(new Edge($dic, $nSoftwareIs, $nAST)); |
248
|
|
|
$g->addChild(new Edge($dic, $nConfigMgt, $nAST)); |
249
|
|
|
$g->addChild(new Edge($dic, $nProcess, $nAST)); |
250
|
|
|
} |
251
|
|
|
|
252
|
|
|
/** |
253
|
|
|
* Tests Graph->build() |
254
|
|
|
*/ |
255
|
|
|
public function testBuild() { |
256
|
|
|
/* Test uses the alternate format for subgraphs: |
257
|
|
|
subgraph type { |
258
|
|
|
graph [ rank=same ]; |
259
|
|
|
<nodes> |
260
|
|
|
} |
261
|
|
|
instead of: |
262
|
|
|
subgraph type { |
263
|
|
|
rank = same; |
264
|
|
|
<nodes> |
265
|
|
|
} |
266
|
|
|
*/ |
267
|
|
|
$expected = <<<EOT |
268
|
|
|
digraph asde91 { |
269
|
|
|
ranksep=0.75; |
270
|
|
|
|
271
|
|
|
subgraph type { |
272
|
|
|
rank=same; |
273
|
|
|
|
274
|
|
|
"Software IS"; |
275
|
|
|
"Configuration Mgt"; |
276
|
|
|
"Architecture & Libraries"; |
277
|
|
|
Process; |
278
|
|
|
} /* /subgraph type */ |
279
|
|
|
subgraph past { |
280
|
|
|
rank=same; |
281
|
|
|
|
282
|
|
|
"Bourne sh"; |
283
|
|
|
make; |
284
|
|
|
SCCS; |
285
|
|
|
yacc; |
286
|
|
|
cron; |
287
|
|
|
} /* /subgraph past */ |
288
|
|
|
subgraph 1978 { |
289
|
|
|
rank=same; |
290
|
|
|
|
291
|
|
|
"Reiser cpp"; |
292
|
|
|
Cshell; |
293
|
|
|
} /* /subgraph 1978 */ |
294
|
|
|
subgraph 1980 { |
295
|
|
|
rank=same; |
296
|
|
|
|
297
|
|
|
emacs; |
298
|
|
|
build; |
299
|
|
|
vi; |
300
|
|
|
} /* /subgraph 1980 */ |
301
|
|
|
subgraph 1982 { |
302
|
|
|
rank=same; |
303
|
|
|
|
304
|
|
|
"<curses>"; |
305
|
|
|
RCS; |
306
|
|
|
IMX; |
307
|
|
|
SYNED; |
308
|
|
|
} /* /subgraph 1982 */ |
309
|
|
|
subgraph 1983 { |
310
|
|
|
rank=same; |
311
|
|
|
|
312
|
|
|
ksh; |
313
|
|
|
IFS; |
314
|
|
|
TTU; |
315
|
|
|
} /* /subgraph 1983 */ |
316
|
|
|
subgraph 1985 { |
317
|
|
|
rank=same; |
318
|
|
|
|
319
|
|
|
nmake; |
320
|
|
|
Peggy; |
321
|
|
|
} /* /subgraph 1985 */ |
322
|
|
|
subgraph 1986 { |
323
|
|
|
rank=same; |
324
|
|
|
|
325
|
|
|
ncpp; |
326
|
|
|
"ksh-i"; |
327
|
|
|
"<curses-i>"; |
328
|
|
|
PG2; |
329
|
|
|
"C*"; |
330
|
|
|
} /* /subgraph 1986 */ |
331
|
|
|
subgraph 1987 { |
332
|
|
|
rank=same; |
333
|
|
|
|
334
|
|
|
"Ansi cpp"; |
335
|
|
|
"nmake 2.0"; |
336
|
|
|
"3D File System"; |
337
|
|
|
fdelta; |
338
|
|
|
DAG; |
339
|
|
|
CSAS; |
340
|
|
|
} /* /subgraph 1987 */ |
341
|
|
|
subgraph 1988 { |
342
|
|
|
rank=same; |
343
|
|
|
|
344
|
|
|
CIA; |
345
|
|
|
SBCS; |
346
|
|
|
"ksh-88"; |
347
|
|
|
"PEGASUS/PML"; |
348
|
|
|
PAX; |
349
|
|
|
backtalk; |
350
|
|
|
} /* /subgraph 1988 */ |
351
|
|
|
subgraph 1989 { |
352
|
|
|
rank=same; |
353
|
|
|
|
354
|
|
|
"CIA++"; |
355
|
|
|
APP; |
356
|
|
|
SHIP; |
357
|
|
|
DataShare; |
358
|
|
|
ryacc; |
359
|
|
|
Mosaic; |
360
|
|
|
} /* /subgraph 1989 */ |
361
|
|
|
subgraph 1990 { |
362
|
|
|
rank=same; |
363
|
|
|
|
364
|
|
|
libft; |
365
|
|
|
CoShell; |
366
|
|
|
DIA; |
367
|
|
|
"IFS-i"; |
368
|
|
|
kyacc; |
369
|
|
|
sfio; |
370
|
|
|
yeast; |
371
|
|
|
"ML-X"; |
372
|
|
|
DOT; |
373
|
|
|
} /* /subgraph 1990 */ |
374
|
|
|
subgraph future { |
375
|
|
|
rank=same; |
376
|
|
|
|
377
|
|
|
"Adv. Software Technology"; |
378
|
|
|
} /* /subgraph future */ |
379
|
|
|
past -> 1978; |
380
|
|
|
1978 -> 1980; |
381
|
|
|
1980 -> 1982; |
382
|
|
|
1982 -> 1983; |
383
|
|
|
1983 -> 1985; |
384
|
|
|
1985 -> 1986; |
385
|
|
|
1986 -> 1987; |
386
|
|
|
1987 -> 1988; |
387
|
|
|
1988 -> 1989; |
388
|
|
|
1989 -> 1990; |
389
|
|
|
1990 -> future; |
390
|
|
|
SCCS -> RCS; |
391
|
|
|
SCCS -> "3D File System"; |
392
|
|
|
SCCS -> nmake; |
393
|
|
|
make -> nmake; |
394
|
|
|
make -> build; |
395
|
|
|
"Bourne sh" -> Cshell; |
396
|
|
|
"Bourne sh" -> ksh; |
397
|
|
|
yacc -> ryacc; |
398
|
|
|
cron -> yeast; |
399
|
|
|
"Reiser cpp" -> ncpp; |
400
|
|
|
Cshell -> ksh; |
401
|
|
|
build -> "nmake 2.0"; |
402
|
|
|
vi -> ksh; |
403
|
|
|
vi -> "<curses>"; |
404
|
|
|
emacs -> ksh; |
405
|
|
|
RCS -> SBCS; |
406
|
|
|
RCS -> fdelta; |
407
|
|
|
"<curses>" -> "<curses-i>"; |
408
|
|
|
SYNED -> Peggy; |
409
|
|
|
IMX -> TTU; |
410
|
|
|
ksh -> nmake; |
411
|
|
|
ksh -> "ksh-i"; |
412
|
|
|
ksh -> "ksh-88"; |
413
|
|
|
IFS -> "<curses-i>"; |
414
|
|
|
IFS -> sfio; |
415
|
|
|
IFS -> "IFS-i"; |
416
|
|
|
TTU -> PG2; |
417
|
|
|
nmake -> ksh; |
418
|
|
|
nmake -> ncpp; |
419
|
|
|
nmake -> "3D File System"; |
420
|
|
|
nmake -> "nmake 2.0"; |
421
|
|
|
Peggy -> "PEGASUS/PML"; |
422
|
|
|
Peggy -> ryacc; |
423
|
|
|
"C*" -> CSAS; |
424
|
|
|
ncpp -> "Ansi cpp"; |
425
|
|
|
"<curses-i>" -> fdelta; |
426
|
|
|
"ksh-i" -> "ksh-88"; |
427
|
|
|
PG2 -> backtalk; |
428
|
|
|
DAG -> "Software IS"; |
429
|
|
|
DAG -> DOT; |
430
|
|
|
DAG -> DIA; |
431
|
|
|
CSAS -> CIA; |
432
|
|
|
"Ansi cpp" -> "Configuration Mgt"; |
433
|
|
|
fdelta -> SBCS; |
434
|
|
|
fdelta -> PAX; |
435
|
|
|
"3D File System" -> "Configuration Mgt"; |
436
|
|
|
"nmake 2.0" -> "Configuration Mgt"; |
437
|
|
|
"nmake 2.0" -> CoShell; |
438
|
|
|
CIA -> "CIA++"; |
439
|
|
|
CIA -> DIA; |
440
|
|
|
SBCS -> "Configuration Mgt"; |
441
|
|
|
PAX -> SHIP; |
442
|
|
|
"ksh-88" -> "Configuration Mgt"; |
443
|
|
|
"ksh-88" -> "Architecture & Libraries"; |
444
|
|
|
"ksh-88" -> sfio; |
445
|
|
|
"PEGASUS/PML" -> "ML-X"; |
446
|
|
|
"PEGASUS/PML" -> "Architecture & Libraries"; |
447
|
|
|
backtalk -> DataShare; |
448
|
|
|
"CIA++" -> "Software IS"; |
449
|
|
|
APP -> DIA; |
450
|
|
|
APP -> "Software IS"; |
451
|
|
|
SHIP -> "Configuration Mgt"; |
452
|
|
|
DataShare -> "Architecture & Libraries"; |
453
|
|
|
ryacc -> kyacc; |
454
|
|
|
Mosaic -> Process; |
455
|
|
|
DOT -> "Software IS"; |
456
|
|
|
DIA -> "Software IS"; |
457
|
|
|
libft -> "Software IS"; |
458
|
|
|
CoShell -> "Configuration Mgt"; |
459
|
|
|
CoShell -> "Architecture & Libraries"; |
460
|
|
|
sfio -> "Architecture & Libraries"; |
461
|
|
|
"IFS-i" -> "Architecture & Libraries"; |
462
|
|
|
"ML-X" -> "Architecture & Libraries"; |
463
|
|
|
kyacc -> "Architecture & Libraries"; |
464
|
|
|
yeast -> Process; |
465
|
|
|
"Architecture & Libraries" -> "Adv. Software Technology"; |
466
|
|
|
"Software IS" -> "Adv. Software Technology"; |
467
|
|
|
"Configuration Mgt" -> "Adv. Software Technology"; |
468
|
|
|
Process -> "Adv. Software Technology"; |
469
|
|
|
} /* /digraph asde91 */ |
470
|
|
|
|
471
|
|
|
EOT; |
472
|
|
|
$this->check($expected, "Image_GraphViz test 9 passed."); |
473
|
|
|
} |
474
|
|
|
} |
475
|
|
|
|
This check looks for a call to a parent method whose name is different than the method from which it is called.
Consider the following code:
The
getFirstName()
method in theSon
calls the wrong method in the parent class.