From e7836c2df46ede15927d1afa7cd5007e5d52defd Mon Sep 17 00:00:00 2001 From: Dries <dries@buytaert.net> Date: Mon, 21 Oct 2013 16:07:49 -0400 Subject: [PATCH] Issue #338403 by klausi, jhodgdon, grisendo, YesCT, drewish: Use {@inheritdoc} on all class methods (including tests). --- .../lib/Drupal/simpletest/TestBase.php | 26 +++++++++++++++++++ core/modules/simpletest/simpletest.module | 19 ++++++++++++-- core/tests/Drupal/Tests/UnitTestCase.php | 23 ++++++++-------- 3 files changed, 54 insertions(+), 14 deletions(-) diff --git a/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php b/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php index c2d4b44cd6d8..3c0ea2cc87db 100644 --- a/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php +++ b/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php @@ -195,6 +195,30 @@ public function __construct($test_id = NULL) { $this->testId = $test_id; } + /** + * 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("Sub-class must implement the getInfo method!"); + } + + /** + * Performs setup tasks before each individual test method is run. + */ + abstract protected function setUp(); + /** * Checks the matching requirements for Test. * @@ -1018,6 +1042,8 @@ protected function rebuildContainer() { } /** + * Performs cleanup tasks after each individual test method has been run. + * * Deletes created files, database tables, and reverts environment changes. * * This method needs to be invoked for both unit and integration tests. diff --git a/core/modules/simpletest/simpletest.module b/core/modules/simpletest/simpletest.module index d04012eb4083..da7c265f972c 100644 --- a/core/modules/simpletest/simpletest.module +++ b/core/modules/simpletest/simpletest.module @@ -480,8 +480,23 @@ function simpletest_test_get_all() { foreach ($classes as $class) { // Test classes need to implement getInfo() to be valid. if (class_exists($class) && method_exists($class, 'getInfo')) { - $info = call_user_func(array($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 $module) { diff --git a/core/tests/Drupal/Tests/UnitTestCase.php b/core/tests/Drupal/Tests/UnitTestCase.php index 2917318d11b2..1535c779dd5c 100644 --- a/core/tests/Drupal/Tests/UnitTestCase.php +++ b/core/tests/Drupal/Tests/UnitTestCase.php @@ -22,22 +22,21 @@ abstract class UnitTestCase extends \PHPUnit_Framework_TestCase { protected $randomGenerator; /** - * This method exists to support the simpletest UI runner. - * - * It should eventually be replaced with something native to phpunit. - * - * Also, this method is empty because you can't have an abstract static - * method. Sub-classes should always override it. + * Provides meta information about this test case, such as test name. * * @return array - * An array describing the test like so: - * array( - * 'name' => 'Something Test', - * 'description' => 'Tests Something', - * 'group' => 'Something', - * ) + * 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("Sub-class must implement the getInfo method!"); } -- GitLab