TYPO3 CMS  TYPO3_6-2
DependencyResolverTest.php
Go to the documentation of this file.
1 <?php
3 
23 
31  public function buildDependencyGraphBuildsCorrectGraph(array $unsortedPackageStatesConfiguration, array $frameworkPackageKeys, array $expectedGraph) {
32  $dependencyResolver = $this->getAccessibleMock('TYPO3\\CMS\\Core\\Package\\DependencyResolver', array('findFrameworkPackages'));
33  $dependencyResolver->expects($this->any())->method('findFrameworkPackages')->willReturn($frameworkPackageKeys);
34  $dependencyGraph = $dependencyResolver->_call('buildDependencyGraph', $unsortedPackageStatesConfiguration);
35 
36  $this->assertEquals($expectedGraph, $dependencyGraph);
37  }
38 
43  public function sortPackageStatesConfigurationByDependencyMakesSureThatDependantPackagesAreStandingBeforeAPackageInTheInternalPackagesAndPackagesConfigurationArrays($unsortedPackageStatesConfiguration, $frameworkPackageKeys, $expectedSortedPackageStatesConfiguration) {
44  $dependencyResolver = $this->getAccessibleMock('TYPO3\\CMS\\Core\\Package\\DependencyResolver', array('findFrameworkPackages'));
45  $dependencyResolver->expects($this->any())->method('findFrameworkPackages')->willReturn($frameworkPackageKeys);
46  $sortedPackageStatesConfiguration = $dependencyResolver->_call('sortPackageStatesConfigurationByDependency', $unsortedPackageStatesConfiguration);
47 
48  $this->assertEquals($expectedSortedPackageStatesConfiguration, $sortedPackageStatesConfiguration, 'The package states configurations have not been ordered according to their dependencies!');
49  }
50 
55  public function buildDependencyGraphForPackagesBuildsCorrectGraph($packages, $expectedGraph) {
56  $dependencyResolver = $this->getAccessibleMock('TYPO3\\CMS\\Core\\Package\\DependencyResolver', array('findFrameworkPackages'));
57  $dependencyResolver->expects($this->any())->method('findFrameworkPackages')->willReturn(array());
58  $dependencyGraph = $dependencyResolver->_call('buildDependencyGraphForPackages', $packages, array_keys($packages));
59 
60  $this->assertEquals($expectedGraph, $dependencyGraph);
61  }
62 
68  $unsortedPackageStatesConfiguration = array(
69  'A' => array(
70  'state' => 'active',
71  'dependencies' => array('B'),
72  ),
73  'B' => array(
74  'state' => 'active',
75  'dependencies' => array('A')
76  ),
77  );
78 
79  $dependencyResolver = $this->getAccessibleMock('TYPO3\\CMS\\Core\\Package\\DependencyResolver', array('findFrameworkPackages'));
80  $dependencyResolver->expects($this->any())->method('findFrameworkPackages')->willReturn(array());
81  $dependencyResolver->_call('sortPackageStatesConfigurationByDependency', $unsortedPackageStatesConfiguration);
82  }
83 
89  $packages = array(
90  'A' => array(
91  'dependencies' => array('B'),
92  )
93  );
94  $dependencyResolver = $this->getAccessibleMock('\TYPO3\CMS\Core\Package\DependencyResolver', array('dummy'));
95  $dependencyResolver->_call('buildDependencyGraphForPackages', $packages, array_keys($packages));
96  }
97 
102  return array(
103  'TYPO3 Flow Packages' => array(
104  array(
105  'TYPO3.Flow' => array(
106  'state' => 'active',
107  'dependencies' => array('Symfony.Component.Yaml', 'Doctrine.Common', 'Doctrine.DBAL', 'Doctrine.ORM')
108  ),
109  'Doctrine.ORM' => array(
110  'state' => 'active',
111  'dependencies' => array('Doctrine.Common', 'Doctrine.DBAL')
112  ),
113  'Doctrine.Common' => array(
114  'state' => 'active',
115  'dependencies' => array()
116  ),
117  'Doctrine.DBAL' => array(
118  'state' => 'active',
119  'dependencies' => array('Doctrine.Common')
120  ),
121  'Symfony.Component.Yaml' => array(
122  'state' => 'active',
123  'dependencies' => array()
124  ),
125  ),
126  array(
127  'Doctrine.Common'
128  ),
129  array(
130  'TYPO3.Flow' => array(
131  'TYPO3.Flow' => FALSE,
132  'Doctrine.ORM' => TRUE,
133  'Doctrine.Common' => TRUE,
134  'Doctrine.DBAL' => TRUE,
135  'Symfony.Component.Yaml' => TRUE,
136  ),
137  'Doctrine.ORM' => array(
138  'TYPO3.Flow' => FALSE,
139  'Doctrine.ORM' => FALSE,
140  'Doctrine.Common' => TRUE,
141  'Doctrine.DBAL' => TRUE,
142  'Symfony.Component.Yaml' => FALSE,
143  ),
144  'Doctrine.Common' => array(
145  'TYPO3.Flow' => FALSE,
146  'Doctrine.ORM' => FALSE,
147  'Doctrine.Common' => FALSE,
148  'Doctrine.DBAL' => FALSE,
149  'Symfony.Component.Yaml' => FALSE,
150  ),
151  'Doctrine.DBAL' => array(
152  'TYPO3.Flow' => FALSE,
153  'Doctrine.ORM' => FALSE,
154  'Doctrine.Common' => TRUE,
155  'Doctrine.DBAL' => FALSE,
156  'Symfony.Component.Yaml' => FALSE,
157  ),
158  'Symfony.Component.Yaml' => array(
159  'TYPO3.Flow' => FALSE,
160  'Doctrine.ORM' => FALSE,
161  'Doctrine.Common' => TRUE,
162  'Doctrine.DBAL' => FALSE,
163  'Symfony.Component.Yaml' => FALSE,
164  ),
165  ),
166  ),
167  'TYPO3 CMS Extensions' => array(
168  array(
169  'core' => array(
170  'state' => 'active',
171  'dependencies' => array(),
172  ),
173  'setup' => array (
174  'state' => 'active',
175  'dependencies' => array('core'),
176  ),
177  'openid' => array(
178  'state' => 'active',
179  'dependencies' => array('core', 'setup')
180  ),
181  'news' => array (
182  'state' => 'active',
183  'dependencies' => array('extbase'),
184  ),
185  'extbase' => array (
186  'state' => 'active',
187  'dependencies' => array('core'),
188  ),
189  'pt_extbase' => array (
190  'state' => 'active',
191  'dependencies' => array('extbase'),
192  ),
193  'foo' => array (
194  'state' => 'active',
195  'dependencies' => array(),
196  ),
197  ),
198  array(
199  'core', 'setup', 'openid', 'extbase'
200  ),
201  array(
202  'core' => array(
203  'core' => FALSE,
204  'setup' => FALSE,
205  'openid' => FALSE,
206  'news' => FALSE,
207  'extbase' => FALSE,
208  'pt_extbase' => FALSE,
209  'foo' => FALSE
210  ),
211  'setup' => array(
212  'core' => TRUE,
213  'setup' => FALSE,
214  'openid' => FALSE,
215  'news' => FALSE,
216  'extbase' => FALSE,
217  'pt_extbase' => FALSE,
218  'foo' => FALSE
219  ),
220  'openid' => array (
221  'core' => TRUE,
222  'setup' => TRUE,
223  'openid' => FALSE,
224  'news' => FALSE,
225  'extbase' => FALSE,
226  'pt_extbase' => FALSE,
227  'foo' => FALSE
228  ),
229  'news' => array (
230  'core' => FALSE,
231  'setup' => FALSE,
232  'openid' => TRUE,
233  'news' => FALSE,
234  'extbase' => TRUE,
235  'pt_extbase' => FALSE,
236  'foo' => FALSE
237  ),
238  'extbase' => array (
239  'core' => TRUE,
240  'setup' => FALSE,
241  'openid' => FALSE,
242  'news' => FALSE,
243  'extbase' => FALSE,
244  'pt_extbase' => FALSE,
245  'foo' => FALSE
246  ),
247  'pt_extbase' => array(
248  'core' => FALSE,
249  'setup' => FALSE,
250  'openid' => TRUE,
251  'news' => FALSE,
252  'extbase' => TRUE,
253  'pt_extbase' => FALSE,
254  'foo' => FALSE
255  ),
256  'foo' => array(
257  'core' => FALSE,
258  'setup' => FALSE,
259  'openid' => TRUE,
260  'news' => FALSE,
261  'extbase' => TRUE,
262  'pt_extbase' => FALSE,
263  'foo' => FALSE
264  ),
265  ),
266  ),
267  'Dummy Packages' => array(
268  array(
269  'A' => array(
270  'state' => 'active',
271  'dependencies' => array('B', 'D', 'C'),
272  ),
273  'B' => array(
274  'state' => 'active',
275  'dependencies' => array()
276  ),
277  'C' => array(
278  'state' => 'active',
279  'dependencies' => array('E')
280  ),
281  'D' => array (
282  'state' => 'active',
283  'dependencies' => array('E'),
284  ),
285  'E' => array (
286  'state' => 'active',
287  'dependencies' => array(),
288  ),
289  'F' => array (
290  'state' => 'active',
291  'dependencies' => array(),
292  ),
293  ),
294  array(
295  'B', 'C', 'E'
296  ),
297  array(
298  'A' => array(
299  'A' => FALSE,
300  'B' => TRUE,
301  'C' => TRUE,
302  'D' => TRUE,
303  'E' => FALSE,
304  'F' => FALSE,
305  ),
306  'B' => array(
307  'A' => FALSE,
308  'B' => FALSE,
309  'C' => FALSE,
310  'D' => FALSE,
311  'E' => FALSE,
312  'F' => FALSE,
313  ),
314  'C' => array(
315  'A' => FALSE,
316  'B' => FALSE,
317  'C' => FALSE,
318  'D' => FALSE,
319  'E' => TRUE,
320  'F' => FALSE,
321  ),
322  'D' => array (
323  'A' => FALSE,
324  'B' => TRUE,
325  'C' => TRUE,
326  'D' => FALSE,
327  'E' => FALSE,
328  'F' => FALSE,
329  ),
330  'E' => array (
331  'A' => FALSE,
332  'B' => FALSE,
333  'C' => FALSE,
334  'D' => FALSE,
335  'E' => FALSE,
336  'F' => FALSE,
337  ),
338  'F' => array (
339  'A' => FALSE,
340  'B' => TRUE,
341  'C' => TRUE,
342  'D' => FALSE,
343  'E' => FALSE,
344  'F' => FALSE,
345  ),
346  ),
347  ),
348  );
349  }
350 
354  public function packageSortingDataProvider() {
355  return array(
356  'TYPO3 Flow Packages' => array(
357  array(
358  'TYPO3.Flow' => array(
359  'state' => 'active',
360  'dependencies' => array('Symfony.Component.Yaml', 'Doctrine.Common', 'Doctrine.DBAL', 'Doctrine.ORM')
361  ),
362  'Doctrine.ORM' => array(
363  'state' => 'active',
364  'dependencies' => array('Doctrine.Common', 'Doctrine.DBAL')
365  ),
366  'Doctrine.Common' => array(
367  'state' => 'active',
368  'dependencies' => array()
369  ),
370  'Doctrine.DBAL' => array(
371  'state' => 'active',
372  'dependencies' => array('Doctrine.Common')
373  ),
374  'Symfony.Component.Yaml' => array(
375  'state' => 'active',
376  'dependencies' => array()
377  ),
378  ),
379  array(
380  'Doctrine.Common'
381  ),
382  array(
383  'Doctrine.Common' => array(
384  'state' => 'active',
385  'dependencies' => array()
386  ),
387  'Doctrine.DBAL' => array(
388  'state' => 'active',
389  'dependencies' => array('Doctrine.Common')
390  ),
391  'Doctrine.ORM' => array(
392  'state' => 'active',
393  'dependencies' => array('Doctrine.Common', 'Doctrine.DBAL')
394  ),
395  'Symfony.Component.Yaml' => array(
396  'state' => 'active',
397  'dependencies' => array()
398  ),
399  'TYPO3.Flow' => array(
400  'state' => 'active',
401  'dependencies' => array('Symfony.Component.Yaml', 'Doctrine.Common', 'Doctrine.DBAL', 'Doctrine.ORM')
402  ),
403  ),
404  ),
405  'TYPO3 CMS Extensions' => array(
406  array(
407  'core' => array(
408  'state' => 'active',
409  'dependencies' => array(),
410  ),
411  'setup' => array (
412  'state' => 'active',
413  'dependencies' => array('core'),
414  ),
415  'openid' => array(
416  'state' => 'active',
417  'dependencies' => array('core', 'setup')
418  ),
419  'news' => array (
420  'state' => 'active',
421  'dependencies' => array('extbase'),
422  ),
423  'extbase' => array (
424  'state' => 'active',
425  'dependencies' => array('core'),
426  ),
427  'pt_extbase' => array (
428  'state' => 'active',
429  'dependencies' => array('extbase'),
430  ),
431  'foo' => array (
432  'state' => 'active',
433  'dependencies' => array(),
434  ),
435  ),
436  array(
437  'core', 'setup', 'openid', 'extbase'
438  ),
439  array(
440  'core' => array(
441  'state' => 'active',
442  'dependencies' => array(),
443  ),
444  'setup' => array (
445  'state' => 'active',
446  'dependencies' => array('core'),
447  ),
448  'openid' => array(
449  'state' => 'active',
450  'dependencies' => array('core', 'setup')
451  ),
452  'extbase' => array (
453  'state' => 'active',
454  'dependencies' => array('core'),
455  ),
456  'foo' => array (
457  'state' => 'active',
458  'dependencies' => array(),
459  ),
460  'pt_extbase' => array (
461  'state' => 'active',
462  'dependencies' => array('extbase'),
463  ),
464  'news' => array (
465  'state' => 'active',
466  'dependencies' => array('extbase'),
467  ),
468  ),
469  ),
470  'Dummy Packages' => array(
471  array(
472  'A' => array(
473  'state' => 'active',
474  'dependencies' => array('B', 'D', 'C'),
475  ),
476  'B' => array(
477  'state' => 'active',
478  'dependencies' => array()
479  ),
480  'C' => array(
481  'state' => 'active',
482  'dependencies' => array('E')
483  ),
484  'D' => array (
485  'state' => 'active',
486  'dependencies' => array('E'),
487  ),
488  'E' => array (
489  'state' => 'active',
490  'dependencies' => array(),
491  ),
492  'F' => array (
493  'state' => 'active',
494  'dependencies' => array(),
495  ),
496  ),
497  array(
498  'B', 'C', 'E'
499  ),
500  array(
501  'B' => array(
502  'state' => 'active',
503  'dependencies' => array(),
504  ),
505  'E' => array (
506  'state' => 'active',
507  'dependencies' => array(),
508  ),
509  'C' => array (
510  'state' => 'active',
511  'dependencies' => array('E'),
512  ),
513  'F' => array (
514  'state' => 'active',
515  'dependencies' => array(),
516  ),
517  'D' => array(
518  'state' => 'active',
519  'dependencies' => array('E'),
520  ),
521  'A' => array(
522  'state' => 'active',
523  'dependencies' => array('B', 'D', 'C'),
524  ),
525  ),
526  ),
527  );
528  }
529 
534  return array(
535  'TYPO3 Flow Packages' => array(
536  array(
537  'TYPO3.Flow' => array(
538  'state' => 'active',
539  'dependencies' => array('Symfony.Component.Yaml', 'Doctrine.Common', 'Doctrine.DBAL', 'Doctrine.ORM')
540  ),
541  'Doctrine.ORM' => array(
542  'state' => 'active',
543  'dependencies' => array('Doctrine.Common', 'Doctrine.DBAL')
544  ),
545  'Doctrine.Common' => array(
546  'state' => 'active',
547  'dependencies' => array()
548  ),
549  'Doctrine.DBAL' => array(
550  'state' => 'active',
551  'dependencies' => array('Doctrine.Common')
552  ),
553  'Symfony.Component.Yaml' => array(
554  'state' => 'active',
555  'dependencies' => array()
556  ),
557  ),
558  array(
559  'TYPO3.Flow' => array(
560  'TYPO3.Flow' => FALSE,
561  'Doctrine.ORM' => TRUE,
562  'Doctrine.Common' => TRUE,
563  'Doctrine.DBAL' => TRUE,
564  'Symfony.Component.Yaml' => TRUE,
565  ),
566  'Doctrine.ORM' => array(
567  'TYPO3.Flow' => FALSE,
568  'Doctrine.ORM' => FALSE,
569  'Doctrine.Common' => TRUE,
570  'Doctrine.DBAL' => TRUE,
571  'Symfony.Component.Yaml' => FALSE,
572  ),
573  'Doctrine.Common' => array(
574  'TYPO3.Flow' => FALSE,
575  'Doctrine.ORM' => FALSE,
576  'Doctrine.Common' => FALSE,
577  'Doctrine.DBAL' => FALSE,
578  'Symfony.Component.Yaml' => FALSE,
579  ),
580  'Doctrine.DBAL' => array(
581  'TYPO3.Flow' => FALSE,
582  'Doctrine.ORM' => FALSE,
583  'Doctrine.Common' => TRUE,
584  'Doctrine.DBAL' => FALSE,
585  'Symfony.Component.Yaml' => FALSE,
586  ),
587  'Symfony.Component.Yaml' => array(
588  'TYPO3.Flow' => FALSE,
589  'Doctrine.ORM' => FALSE,
590  'Doctrine.Common' => FALSE,
591  'Doctrine.DBAL' => FALSE,
592  'Symfony.Component.Yaml' => FALSE,
593  ),
594  ),
595  ),
596  'TYPO3 CMS Extensions' => array(
597  array(
598  'core' => array(
599  'state' => 'active',
600  'dependencies' => array(),
601  ),
602  'openid' => array(
603  'state' => 'active',
604  'dependencies' => array('core', 'setup')
605  ),
606  'scheduler' => array (
607  'state' => 'active',
608  'dependencies' => array('core'),
609  ),
610  'setup' => array (
611  'state' => 'active',
612  'dependencies' => array('core'),
613  ),
614  'sv' => array (
615  'state' => 'active',
616  'dependencies' => array('core'),
617  ),
618  ),
619  array(
620  'core' => array(
621  'core' => FALSE,
622  'setup' => FALSE,
623  'sv' => FALSE,
624  'scheduler' => FALSE,
625  'openid' => FALSE,
626  ),
627  'openid' => array(
628  'core' => TRUE,
629  'setup' => TRUE,
630  'sv' => FALSE,
631  'scheduler' => FALSE,
632  'openid' => FALSE,
633  ),
634  'scheduler' => array (
635  'core' => TRUE,
636  'setup' => FALSE,
637  'sv' => FALSE,
638  'scheduler' => FALSE,
639  'openid' => FALSE,
640  ),
641  'setup' => array (
642  'core' => TRUE,
643  'setup' => FALSE,
644  'sv' => FALSE,
645  'scheduler' => FALSE,
646  'openid' => FALSE,
647  ),
648  'sv' => array (
649  'core' => TRUE,
650  'setup' => FALSE,
651  'sv' => FALSE,
652  'scheduler' => FALSE,
653  'openid' => FALSE,
654  ),
655  ),
656  ),
657  'Dummy Packages' => array(
658  array(
659  'A' => array(
660  'state' => 'active',
661  'dependencies' => array('B', 'D', 'C'),
662  ),
663  'B' => array(
664  'state' => 'active',
665  'dependencies' => array()
666  ),
667  'C' => array(
668  'state' => 'active',
669  'dependencies' => array('E')
670  ),
671  'D' => array (
672  'state' => 'active',
673  'dependencies' => array('E'),
674  ),
675  'E' => array (
676  'state' => 'active',
677  'dependencies' => array(),
678  ),
679  'F' => array (
680  'state' => 'active',
681  'dependencies' => array(),
682  ),
683  ),
684  array(
685  'A' => array(
686  'A' => FALSE,
687  'B' => TRUE,
688  'C' => TRUE,
689  'D' => TRUE,
690  'E' => FALSE,
691  'F' => FALSE,
692  ),
693  'B' => array(
694  'A' => FALSE,
695  'B' => FALSE,
696  'C' => FALSE,
697  'D' => FALSE,
698  'E' => FALSE,
699  'F' => FALSE,
700  ),
701  'C' => array(
702  'A' => FALSE,
703  'B' => FALSE,
704  'C' => FALSE,
705  'D' => FALSE,
706  'E' => TRUE,
707  'F' => FALSE,
708  ),
709  'D' => array (
710  'A' => FALSE,
711  'B' => FALSE,
712  'C' => FALSE,
713  'D' => FALSE,
714  'E' => TRUE,
715  'F' => FALSE,
716  ),
717  'E' => array (
718  'A' => FALSE,
719  'B' => FALSE,
720  'C' => FALSE,
721  'D' => FALSE,
722  'E' => FALSE,
723  'F' => FALSE,
724  ),
725  'F' => array (
726  'A' => FALSE,
727  'B' => FALSE,
728  'C' => FALSE,
729  'D' => FALSE,
730  'E' => FALSE,
731  'F' => FALSE,
732  ),
733  ),
734  ),
735  'Suggestions without reverse dependency' => array(
736  array(
737  'A' => array(
738  'state' => 'active',
739  'suggestions' => array('B'),
740  ),
741  'B' => array(
742  'state' => 'active',
743  ),
744  'C' => array(
745  'state' => 'active',
746  'dependencies' => array('A')
747  ),
748  ),
749  array(
750  'A' => array(
751  'A' => FALSE,
752  'B' => TRUE,
753  'C' => FALSE,
754  ),
755  'B' => array(
756  'A' => FALSE,
757  'B' => FALSE,
758  'C' => FALSE,
759  ),
760  'C' => array(
761  'A' => TRUE,
762  'B' => FALSE,
763  'C' => FALSE,
764  ),
765  ),
766  ),
767  'Suggestions with reverse dependency' => array(
768  array(
769  'A' => array(
770  'state' => 'active',
771  'suggestions' => array('B'),
772  ),
773  'B' => array(
774  'state' => 'active',
775  'dependencies' => array('A')
776  ),
777  'C' => array(
778  'state' => 'active',
779  'dependencies' => array('A')
780  ),
781  ),
782  array(
783  'A' => array(
784  'A' => FALSE,
785  'B' => FALSE,
786  'C' => FALSE,
787  ),
788  'B' => array(
789  'A' => TRUE,
790  'B' => FALSE,
791  'C' => FALSE,
792  ),
793  'C' => array(
794  'A' => TRUE,
795  'B' => FALSE,
796  'C' => FALSE,
797  ),
798  ),
799  ),
800  );
801  }
802 
807  return array(
808  'Simple path' => array(
809  array(
810  'A' => array('A' => FALSE, 'B' => FALSE, 'C' => FALSE, 'Z' => TRUE),
811  'B' => array('A' => FALSE, 'B' => FALSE, 'C' => FALSE, 'Z' => FALSE),
812  'C' => array('A' => FALSE, 'B' => FALSE, 'C' => FALSE, 'Z' => FALSE),
813  'Z' => array('A' => FALSE, 'B' => FALSE, 'C' => FALSE, 'Z' => FALSE)
814  ),
815  'A', 'Z',
816  array('A', 'Z')
817  ),
818  'No path' => array(
819  array(
820  'A' => array('A' => FALSE, 'B' => TRUE, 'C' => FALSE, 'Z' => FALSE),
821  'B' => array('A' => FALSE, 'B' => FALSE, 'C' => FALSE, 'Z' => FALSE),
822  'C' => array('A' => FALSE, 'B' => TRUE, 'C' => FALSE, 'Z' => FALSE),
823  'Z' => array('A' => FALSE, 'B' => TRUE, 'C' => FALSE, 'Z' => FALSE)
824  ),
825  'A', 'C',
826  array()
827  ),
828  'Longer path' => array(
829  array(
830  'A' => array('A' => FALSE, 'B' => TRUE, 'C' => TRUE, 'Z' => TRUE),
831  'B' => array('A' => FALSE, 'B' => FALSE, 'C' => FALSE, 'Z' => FALSE),
832  'C' => array('A' => FALSE, 'B' => FALSE, 'C' => FALSE, 'Z' => TRUE),
833  'Z' => array('A' => FALSE, 'B' => FALSE, 'C' => FALSE, 'Z' => FALSE)
834  ),
835  'A', 'Z',
836  array('A', 'C', 'Z')
837  ),
838  );
839  }
840 
849  public function findPathInGraphReturnsCorrectPath(array $graph, $from, $to, array $expected) {
850  $dependencyResolver = $this->getAccessibleMock('TYPO3\\CMS\\Core\\Package\\DependencyResolver', array('dummy'));
851  $path = $dependencyResolver->_call('findPathInGraph', $graph, $from, $to);
852 
853  $this->assertSame($expected, $path);
854  }
855 
856 }
buildDependencyGraphBuildsCorrectGraph(array $unsortedPackageStatesConfiguration, array $frameworkPackageKeys, array $expectedGraph)
sortPackageStatesConfigurationByDependencyMakesSureThatDependantPackagesAreStandingBeforeAPackageInTheInternalPackagesAndPackagesConfigurationArrays($unsortedPackageStatesConfiguration, $frameworkPackageKeys, $expectedSortedPackageStatesConfiguration)
getAccessibleMock( $originalClassName, array $methods=array(), array $arguments=array(), $mockClassName='', $callOriginalConstructor=TRUE, $callOriginalClone=TRUE, $callAutoload=TRUE)
findPathInGraphReturnsCorrectPath(array $graph, $from, $to, array $expected)