Issues (57)

Security Analysis    no request data  

This project does not seem to handle request data directly as such no vulnerable execution paths were found.

  Cross-Site Scripting
Cross-Site Scripting enables an attacker to inject code into the response of a web-request that is viewed by other users. It can for example be used to bypass access controls, or even to take over other users' accounts.
  File Exposure
File Exposure allows an attacker to gain access to local files that he should not be able to access. These files can for example include database credentials, or other configuration files.
  File Manipulation
File Manipulation enables an attacker to write custom data to files. This potentially leads to injection of arbitrary code on the server.
  Object Injection
Object Injection enables an attacker to inject an object into PHP code, and can lead to arbitrary code execution, file exposure, or file manipulation attacks.
  Code Injection
Code Injection enables an attacker to execute arbitrary code on the server.
  Response Splitting
Response Splitting can be used to send arbitrary responses.
  File Inclusion
File Inclusion enables an attacker to inject custom files into PHP's file loading mechanism, either explicitly passed to include, or for example via PHP's auto-loading mechanism.
  Command Injection
Command Injection enables an attacker to inject a shell command that is execute with the privileges of the web-server. This can be used to expose sensitive data, or gain access of your server.
  SQL Injection
SQL Injection enables an attacker to execute arbitrary SQL code on your database server gaining access to user data, or manipulating user data.
  XPath Injection
XPath Injection enables an attacker to modify the parts of XML document that are read. If that XML document is for example used for authentication, this can lead to further vulnerabilities similar to SQL Injection.
  LDAP Injection
LDAP Injection enables an attacker to inject LDAP statements potentially granting permission to run unauthorized queries, or modify content inside the LDAP tree.
  Header Injection
  Other Vulnerability
This category comprises other attack vectors such as manipulating the PHP runtime, loading custom extensions, freezing the runtime, or similar.
  Regex Injection
Regex Injection enables an attacker to execute arbitrary code in your PHP process.
  XML Injection
XML Injection enables an attacker to read files on your local filesystem including configuration files, or can be abused to freeze your web-server process.
  Variable Injection
Variable Injection enables an attacker to overwrite program variables with custom data, and can lead to further vulnerabilities.
Unfortunately, the security analysis is currently not available for your project. If you are a non-commercial open-source project, please contact support to gain access.

Grafizzi/Graph/Tests/IG09Test.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

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');
0 ignored issues
show
Comprehensibility Bug introduced by
It seems like you call parent on a different method (setUpExtended() instead of setUp()). Are you sure this is correct? If so, you might want to change this to $this->setUpExtended().

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:

class Daddy
{
    protected function getFirstName()
    {
        return "Eidur";
    }

    protected function getSurName()
    {
        return "Gudjohnsen";
    }
}

class Son
{
    public function getFirstName()
    {
        return parent::getSurname();
    }
}

The getFirstName() method in the Son calls the wrong method in the parent class.

Loading history...
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