class TestFileParser

Same name in other branches
  1. 9 core/lib/Drupal/Core/Test/RunTests/TestFileParser.php \Drupal\Core\Test\RunTests\TestFileParser
  2. 10 core/lib/Drupal/Core/Test/RunTests/TestFileParser.php \Drupal\Core\Test\RunTests\TestFileParser
  3. 11.x core/lib/Drupal/Core/Test/RunTests/TestFileParser.php \Drupal\Core\Test\RunTests\TestFileParser

Parses class names from PHP files without loading them.

@internal

Hierarchy

Expanded class hierarchy of TestFileParser

1 file declares its use of TestFileParser
TestFileParserTest.php in core/tests/Drupal/Tests/Core/Test/RunTests/TestFileParserTest.php

File

core/lib/Drupal/Core/Test/RunTests/TestFileParser.php, line 13

Namespace

Drupal\Core\Test\RunTests
View source
class TestFileParser {
    
    /**
     * Gets the classes from a PHP file.
     *
     * @param string $file
     *   The path to the file to parse.
     *
     * @return string[]
     *   Array of fully qualified class names within the PHP file.
     */
    public function getTestListFromFile($file) {
        $test_list = $this->parseContents(file_get_contents($file));
        return array_filter($test_list, function ($class) {
            return is_subclass_of($class, TestCase::class) || is_subclass_of($class, TestBase::class);
        });
    }
    
    /**
     * Parse class names out of PHP file contents.
     *
     * @param string $contents
     *   The contents of a PHP file.
     *
     * @return string[]
     *   Array of fully qualified class names within the PHP file contents.
     */
    protected function parseContents($contents) {
        // Extract a potential namespace.
        $namespace = FALSE;
        if (preg_match('@^\\s*namespace ([^ ;]+)@m', $contents, $matches)) {
            $namespace = $matches[1];
        }
        $test_list = [];
        // Extract all class names. Abstract classes are excluded on purpose.
        preg_match_all('@^\\s*(?!abstract\\s+)(?:final\\s+|\\s*)class ([^ ]+)@m', $contents, $matches);
        if (!$namespace) {
            $test_list = $matches[1];
        }
        else {
            foreach ($matches[1] as $class_name) {
                $namespace_class = $namespace . '\\' . $class_name;
                $test_list[] = $namespace_class;
            }
        }
        return $test_list;
    }

}

Members

Title Sort descending Modifiers Object type Summary
TestFileParser::getTestListFromFile public function Gets the classes from a PHP file.
TestFileParser::parseContents protected function Parse class names out of PHP file contents.

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