diff --git a/core/modules/action/src/Tests/ConfigurationTest.php b/core/modules/action/src/Tests/ConfigurationTest.php index 97448ae..cfd35a5 100644 --- a/core/modules/action/src/Tests/ConfigurationTest.php +++ b/core/modules/action/src/Tests/ConfigurationTest.php @@ -11,7 +11,12 @@ use Drupal\simpletest\WebTestBase; /** - * Actions configuration. + * Tests UI CRUD configuration for complex actions. + * + * @group Action + * @requires module action + * + * @todo Remove the above @requires tag. Added for demo purposes only. */ class ConfigurationTest extends WebTestBase { @@ -22,14 +27,6 @@ class ConfigurationTest extends WebTestBase { */ public static $modules = array('action'); - public static function getInfo() { - return array( - 'name' => 'Actions configuration', - 'description' => 'Tests complex actions configuration by adding, editing, and deleting a complex action.', - 'group' => 'Action', - ); - } - /** * Tests configuration of advanced actions through administration interface. */ diff --git a/core/modules/aggregator/src/ItemStorageInterface.php b/core/modules/aggregator/src/ItemStorageInterface.php index 4f21a05..44501d3 100644 --- a/core/modules/aggregator/src/ItemStorageInterface.php +++ b/core/modules/aggregator/src/ItemStorageInterface.php @@ -8,7 +8,7 @@ namespace Drupal\aggregator; use Drupal\aggregator\Entity\Item; -use Drupal\core\Entity\EntityStorageInterface; +use Drupal\Core\Entity\EntityStorageInterface; /** * Defines a common interface for aggregator item entity controller classes. diff --git a/core/modules/serialization/tests/src/EntityResolver/UuidResolverTest.php b/core/modules/serialization/tests/src/EntityResolver/UuidResolverTest.php index c41eea8..9d49dce 100644 --- a/core/modules/serialization/tests/src/EntityResolver/UuidResolverTest.php +++ b/core/modules/serialization/tests/src/EntityResolver/UuidResolverTest.php @@ -2,10 +2,10 @@ /** * @file - * Contains \Drupal\serialization\Tests\Normalizer\ListNormalizerTest. + * Contains \Drupal\serialization\Tests\EntityResolver\UuidResolverTest. */ -namespace Drupal\serialization\Tests\Normalizer; +namespace Drupal\serialization\Tests\EntityResolver; use Drupal\Tests\UnitTestCase; use Drupal\serialization\EntityResolver\UuidResolver; diff --git a/core/modules/simpletest/css/simpletest.module.css b/core/modules/simpletest/css/simpletest.module.css index 611cc4a..71f7eea 100644 --- a/core/modules/simpletest/css/simpletest.module.css +++ b/core/modules/simpletest/css/simpletest.module.css @@ -4,7 +4,7 @@ width: 1em; } th.simpletest-test-label { - width: 16em; + width: 40%; } .simpletest-image { diff --git a/core/modules/simpletest/simpletest.module b/core/modules/simpletest/simpletest.module index bec96c4..1d70f35 100644 --- a/core/modules/simpletest/simpletest.module +++ b/core/modules/simpletest/simpletest.module @@ -435,159 +435,14 @@ function simpletest_log_read($test_id, $database_prefix, $test_class) { * @endcode */ function simpletest_test_get_all($module = NULL) { - static $all_groups = array(); - $cid = "simpletest:$module"; - - if (!isset($all_groups[$cid])) { - $all_groups[$cid] = array(); - $groups = &$all_groups[$cid]; - // Register namespaces (extensions are not necessarily enabled). - simpletest_classloader_register(); - - // Load test information from cache if available, otherwise retrieve the - // information from each tests getInfo() method. - if ($cache = \Drupal::cache()->get($cid)) { - $groups = $cache->data; - } - else { - // Select all PSR-0 classes in the Tests namespace of all modules. - $listing = new ExtensionDiscovery(); - // Ensure that tests in all profiles are discovered. - $listing->setProfileDirectories(array()); - $all_data = $listing->scan('module', TRUE); - // If module is set then we keep only that one module. - if (isset($module)) { - $all_data = array( - $module => $all_data[$module], - ); - } - else { - $all_data += $listing->scan('profile', TRUE); - $all_data += $listing->scan('theme', TRUE); - } - - // Scan all extension folders for class files. - $classes = array(); - foreach ($all_data as $name => $data) { - - // Build the directory in which simpletest test classes would reside. - $tests_dir = DRUPAL_ROOT . '/' . $data->getPath() . '/src/Tests'; - - // Check if the directory exists. - if (!is_dir($tests_dir)) { - // This extension has no directory for simpletest cases. - continue; - } - - // Scan the directory for class files. - $files = file_scan_directory($tests_dir, '/\.php$/'); - if (empty($files)) { - // No class files found. - continue; - } - - // Convert the file names into the namespaced class names. - $strlen = strlen($tests_dir) + 1; - $namespace = 'Drupal\\' . $name . '\Tests\\'; - foreach ($files as $file) { - $classes[] = $namespace . str_replace('/', '\\', substr($file->uri, $strlen, -4)); - } - } - - // Check that each class has a getInfo() method and store the information - // in an array keyed with the group specified in the test information. - $groups = array(); - foreach ($classes as $class) { - // Test classes need to implement getInfo() to be valid. - if (class_exists($class) && method_exists($class, 'getInfo')) { - $reflectionClass = new ReflectionClass($class); - // Skip abstract classes and interfaces. - if ($reflectionClass->isInstantiable()) { - $reflectionMethod = new ReflectionMethod($class, 'getInfo'); - $declaringClass = $reflectionMethod->getDeclaringClass()->getName(); - // Avoid testing intermediate classes which do not implement the - // method. - if ($class == $declaringClass) { - $info = call_user_func(array($class, 'getInfo')); - } - else { - continue; - } - } - else { - continue; - } - // If this test class requires a non-existing module, skip it. - if (!empty($info['dependencies'])) { - foreach ($info['dependencies'] as $dependency) { - if (!isset($dependency_data[$dependency])) { - continue 2; - } - } - } - - $groups[$info['group']][$class] = $info; - } - } - - // Sort the groups and tests within the groups by name. - uksort($groups, 'strnatcasecmp'); - foreach ($groups as &$tests) { - uksort($tests, 'strnatcasecmp'); - } - - // Allow modules extending core tests to disable originals. - \Drupal::moduleHandler()->alter('simpletest', $groups); - \Drupal::cache()->set($cid, $groups); - } - } - return $all_groups[$cid]; + return \Drupal::service('test_discovery')->getTestClasses(); } /** * Registers namespaces for disabled modules. */ function simpletest_classloader_register() { - // Use the same cache prefix as simpletest_test_get_all(). - $cid = "simpletest::all"; - $types = array( - 'theme_engine', - 'module', - 'theme', - 'profile', - ); - - if ($cache = \Drupal::cache()->get($cid)) { - $extensions = $cache->data; - } - else { - $listing = new ExtensionDiscovery(); - // Ensure that tests in all profiles are discovered. - $listing->setProfileDirectories(array()); - $extensions = array(); - foreach ($types as $type) { - foreach ($listing->scan($type, TRUE) as $name => $file) { - $extensions[$type][$name] = $file->getPathname(); - } - } - \Drupal::cache()->set($cid, $extensions); - } - - $classloader = drupal_classloader(); - foreach ($types as $type) { - foreach ($extensions[$type] as $name => $uri) { - drupal_classloader_register($name, dirname($uri)); - $classloader->addPsr4('Drupal\\' . $name . '\\Tests\\', array( - DRUPAL_ROOT . '/' . dirname($uri) . '/tests/Drupal/' . $name . '/Tests', - DRUPAL_ROOT . '/' . dirname($uri) . '/tests/src', - )); - // While being there, prime drupal_get_filename(). - drupal_get_filename($type, $name, $uri); - } - } - - // Register the core test directory so we can find \Drupal\UnitTestCase. - $classloader->add('Drupal\\Tests', DRUPAL_ROOT . '/core/tests'); + \Drupal::service('test_discovery')->registerTestNamespaces(); } /** diff --git a/core/modules/simpletest/simpletest.services.yml b/core/modules/simpletest/simpletest.services.yml new file mode 100644 index 0000000..b6c75e2 --- /dev/null +++ b/core/modules/simpletest/simpletest.services.yml @@ -0,0 +1,3 @@ +services: + test_discovery: + class: Drupal\simpletest\TestDiscovery diff --git a/core/modules/simpletest/src/Form/SimpletestTestForm.php b/core/modules/simpletest/src/Form/SimpletestTestForm.php index e3876a5..ca84a43 100644 --- a/core/modules/simpletest/src/Form/SimpletestTestForm.php +++ b/core/modules/simpletest/src/Form/SimpletestTestForm.php @@ -96,7 +96,6 @@ public function buildForm(array $form, array &$form_state) { // Generate the list of tests arranged by group. $groups = simpletest_test_get_all(); - $groups['PHPUnit'] = simpletest_phpunit_get_available_tests(); $form_state['storage']['PHPUnit'] = $groups['PHPUnit']; foreach ($groups as $group => $tests) { @@ -150,10 +149,7 @@ public function buildForm(array $form, array &$form_state) { ); $form['tests'][$class]['description'] = array( '#prefix' => '
', - '#markup' => String::format('@description (@class)', array( - '@description' => $info['description'], - '@class' => $class, - )), + '#markup' => String::checkPlain($info['description']), '#suffix' => '
', '#wrapper_attributes' => array( 'class' => array('simpletest-test-description', 'table-filter-text-source'), @@ -192,14 +188,14 @@ public function buildForm(array $form, array &$form_state) { public function submitForm(array &$form, array &$form_state) { simpletest_classloader_register(); - $phpunit_all = array_keys($form_state['storage']['PHPUnit']); + $phpunit_all = $form_state['storage']['PHPUnit']; $tests_list = array(); foreach ($form_state['values']['tests'] as $class_name => $value) { // Since class_exists() will likely trigger an autoload lookup, // we do the fast check first. if ($value === $class_name && class_exists($class_name)) { - $test_type = in_array($class_name, $phpunit_all) ? 'UnitTest' : 'WebTest'; + $test_type = isset($phpunit_all[$class_name]) ? 'UnitTest' : 'WebTest'; $tests_list[$test_type][] = $class_name; } } diff --git a/core/modules/simpletest/src/TestBase.php b/core/modules/simpletest/src/TestBase.php index 023cf8e..133e931 100644 --- a/core/modules/simpletest/src/TestBase.php +++ b/core/modules/simpletest/src/TestBase.php @@ -200,27 +200,6 @@ public function __construct($test_id = NULL) { } /** - * Provides meta information about this test case, such as test name. - * - * @return array - * An array of untranslated strings with the following keys: - * - name: An overview of what is tested by the class; for example, "User - * access rules". - * - description: One sentence describing the test, starting with a verb. - * - group: The human-readable name of the module ("Node", "Statistics"), or - * the human-readable name of the Drupal facility tested (e.g. "Form API" - * or "XML-RPC"). - */ - public static function getInfo() { - // PHP does not allow us to declare this method as abstract public static, - // so we simply throw an exception here if this has not been implemented by - // a child class. - throw new \RuntimeException(String::format('@class must implement \Drupal\simpletest\TestBase::getInfo().', array( - '@class' => get_called_class(), - ))); - } - - /** * Performs setup tasks before each individual test method is run. */ abstract protected function setUp(); diff --git a/core/modules/simpletest/src/TestDiscovery.php b/core/modules/simpletest/src/TestDiscovery.php new file mode 100644 index 0000000..f3f7fa9 --- /dev/null +++ b/core/modules/simpletest/src/TestDiscovery.php @@ -0,0 +1,367 @@ +testNamespaces)) { + return $this->testNamespaces; + } + $this->testNamespaces = array(); + + $loader = drupal_classloader(); + $existing = $loader->getPrefixes(); + $old = array(); + $new = array(); + + // Add PHPUnit test namespace of Drupal core. + $new['Drupal\\Tests\\'] = DRUPAL_ROOT . '/core/tests/Drupal/Tests'; + + $this->availableExtensions = array(); + foreach ($this->getExtensions() as $name => $extension) { + $this->availableExtensions[$extension->getType()][$name] = $name; + + $base_namespace = "Drupal\\$name\\"; + $base_path = DRUPAL_ROOT . '/' . $extension->getPath(); + + // Add namespace of disabled/uninstalled extensions. + if (!isset($existing[$base_namespace])) { + $new[$base_namespace] = "$base_path/src"; + } + else { + $old[$base_namespace] = reset($existing[$base_namespace]); + } + // Add PHPUnit test namespace. + // @todo Move PHPUnit namespace of extensions into Drupal\Tests\$name. + // @see https://drupal.org/node/2260121 + $new[$base_namespace . 'Tests\\'] = "$base_path/tests/src"; + + // While being there, prime drupal_get_filename(). + // @todo Remove this. + drupal_get_filename($extension->getType(), $name, $extension->getPathname()); + } + + foreach ($new as $prefix => $path) { + $loader->addPsr4($prefix, $path); + } + + $this->testNamespaces = $new + $old; + return $this->testNamespaces; + } + + /** + * Discovers all available tests in all extensions. + * + * @return array + * An array of tests keyed by the @group specified in each of test's + * phpDoc comment block, and then keyed by class names. For example: + * @code + * $groups['Block'] => array( + * 'Drupal\block\Tests\BlockTest' => array( + * 'name' => 'Drupal\block\Tests\BlockTest', + * 'description' => 'Tests block UI CRUD functionality.', + * 'group' => 'Block', + * ), + * ); + * @endcode + */ + public function getTestClasses() { + if (isset($this->testClasses)) { + return $this->testClasses; + } + $this->testClasses = array(); + foreach ($this->findTestClasses() as $classname => $pathname) { + try { + $class = new \ReflectionClass($classname); + } + catch (\ReflectionException $e) { + // Re-throw with expected pathname. + $message = $e->getMessage() . " in expected $pathname"; + throw new \ReflectionException($message, $e->getCode(), $e); + } + // Skip abstract classes and interfaces. + if (!$class->isInstantiable()) { + continue; + } + // Skip non-test classes. + if (!$class->isSubclassOf('Drupal\simpletest\TestBase') && !$class->isSubclassOf('PHPUnit_Framework_TestCase')) { + continue; + } + $info = static::getTestInfo($class); + + // Skip this test class if it requires unavailable modules. + if (!empty($info['requires']['module'])) { + if (array_diff($info['requires']['module'], $this->availableExtensions['module'])) { + continue; + } + } + // @todo If this is a PHPUnit test class, construct a new + // PHPUnit_Framework_TestSuite($class) and ignore/hide/remove it if that + // throws a PHPUnit_Framework_Warning exception. + // @see simpletest_phpunit_get_available_tests() + + $this->testClasses[$info['group']][$classname] = $info; + } + + // Sort the groups and tests within the groups by name. + uksort($this->testClasses, 'strnatcasecmp'); + foreach ($this->testClasses as &$tests) { + uksort($tests, 'strnatcasecmp'); + } + + // Allow modules extending core tests to disable originals. + \Drupal::moduleHandler()->alter('simpletest', $this->testClasses); + + return $this->testClasses; + } + + /** + * Discovers all test classes in all available extensions. + * + * @return array + * A classmap containing all discovered test classes. + */ + protected function findTestClasses() { + $classmap = array(); + foreach ($this->registerTestNamespaces() as $namespace => $path) { + if (!is_dir($path)) { + continue; + } + $classmap += static::scanDirectory($namespace, $path); + } + return $classmap; + } + + /** + * Scans a given directory for class files. + * + * @param string $namespace_prefix + * The namespace prefix to use for discovered classes. Must contain a + * trailing namespace separator (backslash). + * For example: 'Drupal\\node\\Tests\\' + * @param string $path + * The directory path to scan. + * For example: '/path/to/drupal/core/modules/node/tests/src' + * + * @return array + * An associative array whose keys are fully-qualified class names and whose + * values are corresponding filesystem pathnames. + */ + public static function scanDirectory($namespace_prefix, $path) { + if (substr($namespace_prefix, -1) !== '\\') { + throw new \InvalidArgumentException("Namespace prefix for $path must contain a trailing namespace separator."); + } + $flags = \FilesystemIterator::UNIX_PATHS; + $flags |= \FilesystemIterator::SKIP_DOTS; + $flags |= \FilesystemIterator::FOLLOW_SYMLINKS; + $flags |= \FilesystemIterator::CURRENT_AS_SELF; + + $iterator = new \RecursiveDirectoryIterator($path, $flags); + $filter = new \RecursiveCallbackFilterIterator($iterator, function ($current, $key, $iterator) { + if ($iterator->hasChildren()) { + return TRUE; + } + return $current->isFile() && $current->getExtension() === 'php'; + }); + $files = new \RecursiveIteratorIterator($filter); + $classes = array(); + foreach ($files as $fileinfo) { + $class = $namespace_prefix; + if ('' !== $subpath = $fileinfo->getSubPath()) { + $class .= strtr($subpath, '/', '\\') . '\\'; + } + $class .= $fileinfo->getBasename('.php'); + $classes[$class] = $fileinfo->getPathname(); + } + return $classes; + } + + /** + * Retrieves information about a test class for UI purposes. + * + * @param \ReflectionClass $class + * The reflected test class. + * + * @return array + * An associative array containing: + * - name: The test class name. + * - description: The test (phpDoc) summary. + * - group: A human-readable group name parsed from a @group class phpDoc + * annotation. (Only one at this point.) + * - requires: An associative array containing requirements: + * - module: A list of Drupal module extension names that the test depends + * on. + */ + public static function getTestInfo(\ReflectionClass $class) { + $classname = $class->getName(); + $info = array( + 'name' => $classname, + 'description' => static::parseTestClassSummary($class), + ); + // For now, only @group and @requires are supported. + $annotations = static::parseTestClassAnnotations($class); + $info += array_intersect_key($annotations, array('group' => 1, 'requires' => 1)); + + // Automatically convert @coversDefaultClass into description. + if (isset($annotations['coversDefaultClass'][0])) { + $info['description'] = 'Tests ' . $annotations['coversDefaultClass'][0] . '.'; + } + + // @todo Remove support for legacy getInfo() methods. + if ($class->hasMethod('getInfo')) { + $legacy_info = $classname::getInfo(); + if (isset($legacy_info['group'])) { + $info['group'][] = $legacy_info['group']; + } + if (isset($legacy_info['dependencies'])) { + $info += array('requires' => array()); + $info['requires'] += array('module' => array()); + $info['requires']['module'] = array_merge($info['requires']['module'], $legacy_info['dependencies']); + } + } + + // For now, all PHPUnit tests are forced into a single PHPUnit group. + if ($class->isSubclassOf('PHPUnit_Framework_TestCase')) { + $info['group'] = 'PHPUnit'; + } + // For now, only one @group is supported. + // @todo Support multiple @groups + change UI to expose a group select + // dropdown to filter tests by group instead of collapsible table groups. + elseif (empty($info['group'])) { + throw new \LogicException("Missing @group for $classname."); + } + else { + $info['group'] = reset($info['group']); + } + + return $info; + } + + /** + * Parses the phpDoc summary line of a test class. + * + * @param \ReflectionClass $class + * The reflected test class. + * + * @return string + * The parsed phpDoc summary line. + * + * @todo Rethink this implementation; a single preg_match_all() may be faster. + */ + public static function parseTestClassSummary(\ReflectionClass $class) { + $phpDoc = $class->getDocComment(); + // Normalize line endings. + $phpDoc = preg_replace('/\r\n|\r/', '\n', $phpDoc); + // Strip leading and trailing doc block lines. + //$phpDoc = trim($phpDoc, "* /\n"); + $phpDoc = substr($phpDoc, 4, -4); + + // Extract actual phpDoc content. + $phpDoc = explode("\n", $phpDoc); + array_walk($phpDoc, function (&$value) { + $value = trim($value, "* /\n"); + }); + + // Extract summary; allowed to it wrap and continue on next line. + list($summary) = explode("\n\n", implode("\n", $phpDoc)); + if ($summary === '') { + throw new \LogicException(sprintf('Missing phpDoc on %s.', $class->getName())); + } + return $summary; + } + + /** + * Parses annotations in the phpDoc of a test class. + * + * @param \ReflectionClass $class + * The reflected test class. + * + * @return array + * An associative array that contains all annotations on the test class; + * typically including: + * - group: A list of @group values. + * - requires: An associative array of @requires values; e.g.: + * - module: A list of Drupal module dependencies that are required to + * exist. + * + * @see PHPUnit_Util_Test::parseTestMethodAnnotations() + * @see http://phpunit.de/manual/current/en/incomplete-and-skipped-tests.html#incomplete-and-skipped-tests.skipping-tests-using-requires + */ + public static function parseTestClassAnnotations(\ReflectionClass $class) { + $annotations = PHPUnit_Util_Test::parseTestMethodAnnotations($class->getName()); + + // @todo Enhance PHPUnit upstream to allow for custom @requires identifiers. + // @see PHPUnit_Util_Test::getRequirements() + // @todo Add support for 'PHP', 'OS', 'function', 'extension'. + if (isset($annotations['class']['requires'])) { + foreach ($annotations['class']['requires'] as $i => $value) { + list($type, $value) = explode(' ', $value, 2); + if ($type == 'module') { + $annotations['class']['requires']['module'][$value] = $value; + } + unset($annotations['class']['requires'][$i]); + } + } + return $annotations['class']; + } + + /** + * Returns all available extensions. + * + * @return \Drupal\Core\Extension\Extension[] + * An array of Extension objects, keyed by extension name. + */ + protected function getExtensions() { + $listing = new ExtensionDiscovery(); + // Ensure that tests in all profiles are discovered. + $listing->setProfileDirectories(array()); + $extensions = $listing->scan('module', TRUE); + $extensions += $listing->scan('profile', TRUE); + $extensions += $listing->scan('theme', TRUE); + return $extensions; + } + +} diff --git a/core/modules/system/src/Tests/Page/DefaultMetatagsTest.php b/core/modules/system/src/Tests/Page/DefaultMetatagsTest.php index baae991..3b2afdf 100644 --- a/core/modules/system/src/Tests/Page/DefaultMetatagsTest.php +++ b/core/modules/system/src/Tests/Page/DefaultMetatagsTest.php @@ -9,6 +9,9 @@ use Drupal\simpletest\WebTestBase; +/** + * Tests default HTML metatags on a page. + */ class DefaultMetatagsTest extends WebTestBase { /** diff --git a/core/scripts/run-tests.sh b/core/scripts/run-tests.sh index 8eff2a2..b99ef44 100755 --- a/core/scripts/run-tests.sh +++ b/core/scripts/run-tests.sh @@ -58,7 +58,7 @@ foreach ($groups as $group => $tests) { echo $group . "\n"; foreach ($tests as $class => $info) { - echo " - " . $info['name'] . ' (' . $class . ')' . "\n"; + echo " - $class\n"; } } exit; @@ -561,7 +561,6 @@ function simpletest_script_setup_database($new = FALSE) { */ function simpletest_script_get_all_tests($module = NULL) { $tests = simpletest_test_get_all($module); - $tests['PHPUnit'] = simpletest_phpunit_get_available_tests($module); return $tests; } diff --git a/core/tests/Drupal/Tests/Component/PhpStorage/FileStorageReadOnlyTest.php b/core/tests/Drupal/Tests/Component/PhpStorage/FileStorageReadOnlyTest.php index 4d4bc0f..a907a07 100644 --- a/core/tests/Drupal/Tests/Component/PhpStorage/FileStorageReadOnlyTest.php +++ b/core/tests/Drupal/Tests/Component/PhpStorage/FileStorageReadOnlyTest.php @@ -2,7 +2,7 @@ /** * @file - * Contains \Drupal\Tests\Component\PhpStorage\FileStorageTest. + * Contains \Drupal\Tests\Component\PhpStorage\FileStorageReadOnlyTest. */ namespace Drupal\Tests\Component\PhpStorage; @@ -18,7 +18,7 @@ * * @coversDefaultClass \Drupal\Component\PhpStorage\FileReadOnlyStorage */ -class FileStorageReadyOnlyTest extends PhpStorageTestBase { +class FileStorageReadOnlyTest extends PhpStorageTestBase { /** * Standard test settings to pass to storage instances. diff --git a/core/tests/Drupal/Tests/Core/Logger/LogMessageParserTest.php b/core/tests/Drupal/Tests/Core/Logger/LogMessageParserTest.php index e30f551..2fa198e 100644 --- a/core/tests/Drupal/Tests/Core/Logger/LogMessageParserTest.php +++ b/core/tests/Drupal/Tests/Core/Logger/LogMessageParserTest.php @@ -2,7 +2,7 @@ /** * @file - * Contains \Drupal\Tests\Core\Logger\LogMessageParserTraitTest + * Contains \Drupal\Tests\Core\Logger\LogMessageParserTest. */ namespace Drupal\Tests\Core\Logger; diff --git a/core/tests/Drupal/Tests/Core/Logger/LoggerChannelFactoryTest.php b/core/tests/Drupal/Tests/Core/Logger/LoggerChannelFactoryTest.php index 82e20b2..8bbe4ab 100644 --- a/core/tests/Drupal/Tests/Core/Logger/LoggerChannelFactoryTest.php +++ b/core/tests/Drupal/Tests/Core/Logger/LoggerChannelFactoryTest.php @@ -2,10 +2,10 @@ /** * @file - * Contains \Drupal\Tests\Core\Logger\LoggerChannelFactoryTest + * Contains \Drupal\Tests\Core\Logger\LoggerChannelFactoryTest. */ -namespace Drupal\Tests\Logger; +namespace Drupal\Tests\Core\Logger; use Drupal\Core\Logger\LoggerChannelFactory; use Drupal\Core\Session\AccountInterface; diff --git a/core/tests/Drupal/Tests/Core/Logger/LoggerChannelTest.php b/core/tests/Drupal/Tests/Core/Logger/LoggerChannelTest.php index 2cc0a50..51c7e86 100644 --- a/core/tests/Drupal/Tests/Core/Logger/LoggerChannelTest.php +++ b/core/tests/Drupal/Tests/Core/Logger/LoggerChannelTest.php @@ -2,10 +2,10 @@ /** * @file - * Contains \Drupal\Tests\Core\Logger\LoggerChannelTest + * Contains \Drupal\Tests\Core\Logger\LoggerChannelTest. */ -namespace Drupal\Tests\Logger; +namespace Drupal\Tests\Core\Logger; use Drupal\Core\Logger\LoggerChannel; use Drupal\Core\Session\AccountInterface; diff --git a/core/tests/Drupal/Tests/Core/Path/AliasManagerTest.php b/core/tests/Drupal/Tests/Core/Path/AliasManagerTest.php index f8d5c0e..bffc88d 100644 --- a/core/tests/Drupal/Tests/Core/Path/AliasManagerTest.php +++ b/core/tests/Drupal/Tests/Core/Path/AliasManagerTest.php @@ -2,10 +2,10 @@ /** * @file - * Contains \Drupal\Tests\Core\ExternalUrlTest. + * Contains \Drupal\Tests\Core\Path\AliasManagerTest. */ -namespace Drupal\Tests\Core; +namespace Drupal\Tests\Core\Path; use Drupal\Core\DependencyInjection\ContainerBuilder; use Drupal\Core\Language\Language;