function PhpUnitTestDiscoveryTest::testPhpUnitTestDiscoveryEqualsInternal

Tests equality of test discovery between run-tests.sh and PHPUnit CLI.

File

core/tests/Drupal/KernelTests/Core/Test/PhpUnitTestDiscoveryTest.php, line 63

Class

PhpUnitTestDiscoveryTest
Tests equality of test discovery between run-tests.sh and PHPUnit CLI.

Namespace

Drupal\KernelTests\Core\Test

Code

public function testPhpUnitTestDiscoveryEqualsInternal() : void {
    // Drupal's test discovery, used by run-tests.sh.
    $testDiscovery = new TestDiscovery($this->container
        ->getParameter('app.root'), $this->container
        ->get('class_loader'));
    $internalList = [];
    foreach ($testDiscovery->getTestClasses() as $group) {
        foreach (array_keys($group) as $class) {
            $internalList[] = $class;
        }
    }
    $internalList = array_unique($internalList);
    asort($internalList);
    // PHPUnit's test discovery - via CLI execution.
    $process = new Process([
        'vendor/bin/phpunit',
        '--configuration',
        'core',
        '--list-tests-xml',
        $this->xmlOutputFile,
    ], $this->root);
    $process->setTimeout(300)
        ->setIdleTimeout(300)
        ->run();
    $this->assertEquals(0, $process->getExitCode(), 'COMMAND: ' . $process->getCommandLine() . "\n" . 'OUTPUT: ' . $process->getOutput() . "\n" . 'ERROR: ' . $process->getErrorOutput() . "\n");
    $phpUnitXmlList = new \DOMDocument();
    $phpUnitXmlList->loadXML(file_get_contents($this->xmlOutputFile));
    $phpUnitClientList = [];
    foreach ($phpUnitXmlList->getElementsByTagName('testCaseClass') as $node) {
        $phpUnitClientList[] = $node->getAttribute('name');
    }
    asort($phpUnitClientList);
    // Check against Drupal's discovery.
    $this->assertEquals(implode("\n", $phpUnitClientList), implode("\n", $internalList), self::TEST_LIST_MISMATCH_MESSAGE);
    // PHPUnit's test discovery - via API.
    $phpUnitConfiguration = (new Builder())->build([
        '--configuration',
        'core',
    ]);
    $phpUnitTestSuite = (new TestSuiteBuilder())->build($phpUnitConfiguration);
    $phpUnitApiList = [];
    foreach ($phpUnitTestSuite->tests() as $testSuite) {
        foreach ($testSuite->tests() as $test) {
            $phpUnitApiList[] = $test->name();
        }
    }
    asort($phpUnitApiList);
    // Check against Drupal's discovery.
    $this->assertEquals(implode("\n", $phpUnitApiList), implode("\n", $internalList), self::TEST_LIST_MISMATCH_MESSAGE);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.