|
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 theSoncalls the wrong method in the parent class.