annotate core/modules/simpletest/tests/src/Unit/SimpletestPhpunitRunCommandTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Tests\simpletest\Unit;
Chris@0 4
Chris@17 5 use Drupal\Core\Database\Database;
Chris@0 6 use Drupal\Core\DependencyInjection\ContainerBuilder;
Chris@0 7 use Drupal\Core\File\FileSystemInterface;
Chris@0 8 use PHPUnit\Framework\TestCase;
Chris@0 9
Chris@0 10 /**
Chris@0 11 * Tests simpletest_run_phpunit_tests() handles PHPunit fatals correctly.
Chris@0 12 *
Chris@0 13 * We don't extend Drupal\Tests\UnitTestCase here because its $root property is
Chris@0 14 * not static and we need it to be static here.
Chris@0 15 *
Chris@0 16 * @group simpletest
Chris@0 17 *
Chris@0 18 * @runTestsInSeparateProcesses
Chris@17 19 * @preserveGlobalState disabled
Chris@0 20 */
Chris@0 21 class SimpletestPhpunitRunCommandTest extends TestCase {
Chris@0 22
Chris@0 23 /**
Chris@0 24 * Path to the app root.
Chris@0 25 *
Chris@0 26 * @var string
Chris@0 27 */
Chris@0 28 protected static $root;
Chris@0 29
Chris@0 30 /**
Chris@0 31 * {@inheritdoc}
Chris@0 32 */
Chris@0 33 public static function setUpBeforeClass() {
Chris@0 34 parent::setUpBeforeClass();
Chris@0 35 // Figure out our app root.
Chris@0 36 self::$root = dirname(dirname(dirname(dirname(dirname(dirname(__DIR__))))));
Chris@0 37 // Include the files we need for tests. The stub test we will run is
Chris@0 38 // SimpletestPhpunitRunCommandTestWillDie which is located in
Chris@0 39 // simpletest_phpunit_run_command_test.php.
Chris@0 40 include_once self::$root . '/core/modules/simpletest/tests/fixtures/simpletest_phpunit_run_command_test.php';
Chris@0 41 // Since we're testing simpletest_run_phpunit_tests(), we need to include
Chris@0 42 // simpletest.module.
Chris@0 43 include_once self::$root . '/core/modules/simpletest/simpletest.module';
Chris@0 44 }
Chris@0 45
Chris@0 46 /**
Chris@0 47 * {@inheritdoc}
Chris@0 48 */
Chris@0 49 protected function setUp() {
Chris@0 50 parent::setUp();
Chris@0 51 // Organize our mock container.
Chris@0 52 $container = new ContainerBuilder();
Chris@0 53 $container->set('app.root', self::$root);
Chris@0 54 $file_system = $this->prophesize(FileSystemInterface::class);
Chris@0 55 // The simpletest directory wrapper will always point to /tmp.
Chris@0 56 $file_system->realpath('public://simpletest')->willReturn(sys_get_temp_dir());
Chris@0 57 $container->set('file_system', $file_system->reveal());
Chris@0 58 \Drupal::setContainer($container);
Chris@0 59 }
Chris@0 60
Chris@0 61 /**
Chris@0 62 * Data provider for testSimpletestPhpUnitRunCommand().
Chris@0 63 *
Chris@0 64 * @return array
Chris@0 65 * Arrays of status codes and the label they're expected to have.
Chris@0 66 */
Chris@0 67 public function provideStatusCodes() {
Chris@0 68 $data = [
Chris@0 69 [0, 'pass'],
Chris@0 70 [1, 'fail'],
Chris@0 71 [2, 'exception'],
Chris@0 72 ];
Chris@0 73 // All status codes 3 and above should be labeled 'error'.
Chris@0 74 // @todo: The valid values here would be 3 to 127. But since the test
Chris@0 75 // touches the file system a lot, we only have 3, 4, and 127 for speed.
Chris@0 76 foreach ([3, 4, 127] as $status) {
Chris@0 77 $data[] = [$status, 'error'];
Chris@0 78 }
Chris@0 79 return $data;
Chris@0 80 }
Chris@0 81
Chris@0 82 /**
Chris@0 83 * Test the round trip for PHPUnit execution status codes.
Chris@0 84 *
Chris@0 85 * @covers ::simpletest_run_phpunit_tests
Chris@0 86 *
Chris@0 87 * @dataProvider provideStatusCodes
Chris@0 88 */
Chris@0 89 public function testSimpletestPhpUnitRunCommand($status, $label) {
Chris@17 90 // Add a default database connection in order for
Chris@17 91 // Database::getConnectionInfoAsUrl() to return valid information.
Chris@17 92 Database::addConnectionInfo('default', 'default', [
Chris@17 93 'driver' => 'mysql',
Chris@17 94 'username' => 'test_user',
Chris@17 95 'password' => 'test_pass',
Chris@17 96 'host' => 'test_host',
Chris@17 97 'database' => 'test_database',
Chris@17 98 'port' => 3306,
Chris@17 99 'namespace' => 'Drupal\Core\Database\Driver\mysql',
Chris@17 100 ]
Chris@17 101 );
Chris@0 102 $test_id = basename(tempnam(sys_get_temp_dir(), 'xxx'));
Chris@0 103 putenv('SimpletestPhpunitRunCommandTestWillDie=' . $status);
Chris@0 104 $ret = simpletest_run_phpunit_tests($test_id, [SimpletestPhpunitRunCommandTestWillDie::class]);
Chris@0 105 $this->assertSame($ret[0]['status'], $label);
Chris@0 106 putenv('SimpletestPhpunitRunCommandTestWillDie');
Chris@0 107 unlink(simpletest_phpunit_xml_filepath($test_id));
Chris@0 108 }
Chris@0 109
Chris@0 110 /**
Chris@0 111 * {@inheritdoc}
Chris@0 112 */
Chris@0 113 protected function tearDown() {
Chris@0 114 // We unset the $base_url global, since the test code sets it as a
Chris@0 115 // side-effect.
Chris@0 116 unset($GLOBALS['base_url']);
Chris@0 117 parent::tearDown();
Chris@0 118 }
Chris@0 119
Chris@0 120 }