SuiteManagerTest.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <?php
  2. if (!defined('PHPUNIT_TESTSUITE')) {
  3. define('PHPUNIT_TESTSUITE', true);
  4. }
  5. /**
  6. * @group core
  7. * Class SuiteManagerTest
  8. */
  9. class SuiteManagerTest extends \PHPUnit\Framework\TestCase
  10. {
  11. /**
  12. * @var \Codeception\SuiteManager
  13. */
  14. protected $suiteman;
  15. /**
  16. * @var \Symfony\Component\EventDispatcher\EventDispatcher
  17. */
  18. protected $dispatcher;
  19. /**
  20. * @var \Codeception\PHPUnit\Runner
  21. */
  22. protected $runner;
  23. public function setUp()
  24. {
  25. $this->dispatcher = new Symfony\Component\EventDispatcher\EventDispatcher;
  26. $settings = \Codeception\Configuration::$defaultSuiteSettings;
  27. $settings['actor'] = 'CodeGuy';
  28. $this->suiteman = new \Codeception\SuiteManager($this->dispatcher, 'suite', $settings);
  29. $printer = \Codeception\Util\Stub::makeEmpty('PHPUnit\TextUI\ResultPrinter');
  30. $this->runner = new \Codeception\PHPUnit\Runner;
  31. $this->runner->setPrinter($printer);
  32. }
  33. /**
  34. * @group core
  35. */
  36. public function testRun()
  37. {
  38. $events = [];
  39. $eventListener = function ($event, $eventName) use (&$events) {
  40. $events[] = $eventName;
  41. };
  42. $this->dispatcher->addListener('suite.before', $eventListener);
  43. $this->dispatcher->addListener('suite.after', $eventListener);
  44. $this->suiteman->run(
  45. $this->runner,
  46. new \PHPUnit\Framework\TestResult,
  47. ['colors' => false, 'steps' => true, 'debug' => false, 'report_useless_tests' => false, 'disallow_test_output' => false]
  48. );
  49. $this->assertEquals($events, ['suite.before', 'suite.after']);
  50. }
  51. /**
  52. * @group core
  53. */
  54. public function testFewTests()
  55. {
  56. $file = \Codeception\Configuration::dataDir().'SimpleCest.php';
  57. $this->suiteman->loadTests($file);
  58. $this->assertEquals(2, $this->suiteman->getSuite()->count());
  59. $file = \Codeception\Configuration::dataDir().'SimpleWithNoClassCest.php';
  60. $this->suiteman->loadTests($file);
  61. $this->assertEquals(3, $this->suiteman->getSuite()->count());
  62. }
  63. /**
  64. * When running multiple environments, getClassesFromFile() method in SuiteManager is called once for each env.
  65. * See \Codeception\Codecept::runSuite() - for each env new SuiteManager is created and tests loaded.
  66. * Make sure that calling getClassesFromFile() multiple times will always return the same classes.
  67. *
  68. * @group core
  69. */
  70. public function testAddCestWithEnv()
  71. {
  72. $file = \Codeception\Configuration::dataDir().'SimpleNamespacedTest.php';
  73. $this->suiteman->loadTests($file);
  74. $this->assertEquals(3, $this->suiteman->getSuite()->count());
  75. $newSuiteMan = new \Codeception\SuiteManager(
  76. $this->dispatcher,
  77. 'suite',
  78. \Codeception\Configuration::$defaultSuiteSettings
  79. );
  80. $newSuiteMan->loadTests($file);
  81. $this->assertEquals(3, $newSuiteMan->getSuite()->count());
  82. }
  83. public function testDependencyResolution()
  84. {
  85. $this->suiteman->loadTests(codecept_data_dir().'SimpleWithDependencyInjectionCest.php');
  86. $this->assertEquals(3, $this->suiteman->getSuite()->count());
  87. }
  88. public function testGroupEventsAreFired()
  89. {
  90. $events = [];
  91. $eventListener = function ($event, $eventName) use (&$events) {
  92. $events[] = $eventName;
  93. };
  94. $this->dispatcher->addListener('test.before', $eventListener);
  95. $this->dispatcher->addListener('test.before.admin', $eventListener);
  96. $this->dispatcher->addListener('test.after', $eventListener);
  97. $this->dispatcher->addListener('test.after.admin', $eventListener);
  98. $this->suiteman->loadTests(codecept_data_dir().'SimpleAdminGroupCest.php');
  99. $result = new \PHPUnit\Framework\TestResult;
  100. $listener = new \Codeception\PHPUnit\Listener($this->dispatcher);
  101. $result->addListener($listener);
  102. $this->suiteman->run(
  103. $this->runner,
  104. $result,
  105. ['silent' => true, 'colors' => false, 'steps' => true, 'debug' => false, 'report_useless_tests' => false, 'disallow_test_output' => false]
  106. );
  107. $this->assertContains('test.before', $events);
  108. $this->assertContains('test.before.admin', $events);
  109. $this->assertContains('test.after', $events);
  110. $this->assertContains('test.after.admin', $events);
  111. }
  112. }