IG09Test   A
last analyzed

Complexity

Total Complexity 2

Size/Duplication

Total Lines 431
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

Changes 0
Metric Value
wmc 2
lcom 1
cbo 6
dl 0
loc 431
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
B setUp() 0 205 1
B testBuild() 0 219 1
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