Suite.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. namespace Codeception;
  3. use Codeception\Test\Descriptor;
  4. use Codeception\Test\Interfaces\Dependent;
  5. class Suite extends \PHPUnit_Framework_TestSuite
  6. {
  7. protected $modules;
  8. protected $baseName;
  9. public function reorderDependencies()
  10. {
  11. $tests = [];
  12. foreach ($this->tests as $test) {
  13. $tests = array_merge($tests, $this->getDependencies($test));
  14. }
  15. $queue = [];
  16. $hashes = [];
  17. foreach ($tests as $test) {
  18. if (in_array(spl_object_hash($test), $hashes)) {
  19. continue;
  20. }
  21. $hashes[] = spl_object_hash($test);
  22. $queue[] = $test;
  23. }
  24. $this->tests = $queue;
  25. }
  26. protected function getDependencies($test)
  27. {
  28. if (!$test instanceof Dependent) {
  29. return [$test];
  30. }
  31. $tests = [];
  32. foreach ($test->getDependencies() as $requiredTestName) {
  33. $required = $this->findMatchedTest($requiredTestName);
  34. if (!$required) {
  35. continue;
  36. }
  37. $tests = array_merge($tests, $this->getDependencies($required));
  38. }
  39. $tests[] = $test;
  40. return $tests;
  41. }
  42. protected function findMatchedTest($testSignature)
  43. {
  44. foreach ($this->tests as $test) {
  45. $signature = Descriptor::getTestSignature($test);
  46. if ($signature === $testSignature) {
  47. return $test;
  48. }
  49. }
  50. if ($test instanceof TestInterface) {
  51. $test->getMetadata()->setSkip("Dependent test for $testSignature not found");
  52. }
  53. }
  54. /**
  55. * @return mixed
  56. */
  57. public function getModules()
  58. {
  59. return $this->modules;
  60. }
  61. /**
  62. * @param mixed $modules
  63. */
  64. public function setModules($modules)
  65. {
  66. $this->modules = $modules;
  67. }
  68. /**
  69. * @return mixed
  70. */
  71. public function getBaseName()
  72. {
  73. return $this->baseName;
  74. }
  75. /**
  76. * @param mixed $baseName
  77. */
  78. public function setBaseName($baseName)
  79. {
  80. $this->baseName = $baseName;
  81. }
  82. }