Issue #2282673 by stevepurkiss, ParisLiakos, mgifford: Add a PHPunit test for not using Drupal\Core code in Drupal\Component.

8.0.x
Alex Pott 2014-11-03 10:47:06 +00:00
parent f98cf1f60c
commit 914b78de24
8 changed files with 86 additions and 30 deletions

View File

@ -24,7 +24,7 @@ class PluginID extends AnnotationBase {
public $value; public $value;
/** /**
* Implements \Drupal\Core\Annotation\AnnotationInterface::get(). * {@inheritdoc}
*/ */
public function get() { public function get() {
return array( return array(

View File

@ -1,7 +1,7 @@
<?php <?php
/** /**
* @file * @file
* Definition of Drupal\Core\Plugin\Exception\InvalidDecoratedMethod. * Contains \Drupal\Component\Plugin\Exception\InvalidDecoratedMethod.
*/ */
namespace Drupal\Component\Plugin\Exception; namespace Drupal\Component\Plugin\Exception;

View File

@ -20,7 +20,7 @@ class SortArray {
* Note that the sorting is by the 'weight' array element, not by the render * Note that the sorting is by the 'weight' array element, not by the render
* element property '#weight'. * element property '#weight'.
* *
* Callback for uasort() used in various functions. * Callback for uasort().
* *
* @param array $a * @param array $a
* First item for comparison. The compared items should be associative * First item for comparison. The compared items should be associative
@ -39,7 +39,7 @@ class SortArray {
/** /**
* Sorts a structured array by '#weight' property. * Sorts a structured array by '#weight' property.
* *
* Callback for uasort() within \Drupal\Core\Render\Element::children(). * Callback for uasort().
* *
* @param array $a * @param array $a
* First item for comparison. The compared items should be associative * First item for comparison. The compared items should be associative
@ -57,7 +57,7 @@ class SortArray {
/** /**
* Sorts a structured array by 'title' key (no # prefix). * Sorts a structured array by 'title' key (no # prefix).
* *
* Callback for uasort() within system_admin_index(). * Callback for uasort().
* *
* @param array $a * @param array $a
* First item for comparison. The compared items should be associative arrays * First item for comparison. The compared items should be associative arrays
@ -75,9 +75,7 @@ class SortArray {
/** /**
* Sorts a structured array by '#title' property. * Sorts a structured array by '#title' property.
* *
* Callback for uasort() within: * Callback for uasort().
* - system_modules()
* - theme_simpletest_test_table()
* *
* @param array $a * @param array $a
* First item for comparison. The compared items should be associative arrays * First item for comparison. The compared items should be associative arrays

View File

@ -288,9 +288,8 @@ class UrlHelper {
* to being output to an HTML attribute value. It is often called as part of * to being output to an HTML attribute value. It is often called as part of
* check_url() or Drupal\Component\Utility\Xss::filter(), but those functions * check_url() or Drupal\Component\Utility\Xss::filter(), but those functions
* return an HTML-encoded string, so this function can be called independently * return an HTML-encoded string, so this function can be called independently
* when the output needs to be a plain-text string for passing to t(), _l(), * when the output needs to be a plain-text string for passing to functions
* Drupal\Core\Template\Attribute, or another function that will call * that will call \Drupal\Component\Utility\String::checkPlain() separately.
* \Drupal\Component\Utility\String::checkPlain() separately.
* *
* @param string $uri * @param string $uri
* A plain-text URI that might contain dangerous protocols. * A plain-text URI that might contain dangerous protocols.

View File

@ -0,0 +1,78 @@
<?php
/**
* @file
* Contains \Drupal\Tests\Component\DrupalComponentTest.
*/
namespace Drupal\Tests\Component;
use Drupal\Tests\UnitTestCase;
/**
* General tests for \Drupal\Component that can't go anywhere else.
*
* @group Component
*/
class DrupalComponentTest extends UnitTestCase {
/**
* Tests that classes in Component do not use any Core class.
*/
public function testNoCoreInComponent() {
$component_path = dirname(substr(__DIR__, 0, -strlen(__NAMESPACE__))) . '/lib/Drupal/Component';
foreach ($this->findPhpClasses($component_path) as $class) {
$this->assertNoCoreUsage($class);
}
}
/**
* Tests that classes in Component Tests do not use any Core class.
*/
public function testNoCoreInComponentTests() {
$component_path = dirname(substr(__DIR__, 0, -strlen(__NAMESPACE__))) . '/tests/Drupal/Tests/Component';
foreach ($this->findPhpClasses($component_path) as $class) {
$this->assertNoCoreUsage($class);
}
}
/**
* Searches a directory recursively for PHP classes.
*
* @param string $dir
* The full path to the directory that should be checked.
*
* @return array
* An array of class paths.
*/
protected function findPhpClasses($dir) {
$classes = array();
foreach (new \DirectoryIterator($dir) as $file) {
if ($file->isDir() && !$file->isDot()) {
$classes = array_merge($classes, $this->findPhpClasses($file->getPathname()));
}
elseif ($file->getExtension() == 'php') {
$classes[] = $file->getPathname();
}
}
return $classes;
}
/**
* Asserts that the given class is not using any class from Core namespace.
*
* @param string $class_path
* The full path to the class that should be checked.
*/
protected function assertNoCoreUsage($class_path) {
foreach (new \SplFileObject($class_path) as $line_number => $line) {
// Allow linking to Core files with @see docs. Its harmless and boosts DX
// because even outside projects can treat those links as examples.
if ($line && (strpos($line, '@see ') === FALSE)) {
$this->assertSame(FALSE, strpos($line, 'Drupal\\Core'), "Illegal reference to 'Drupal\\Core' namespace in $class_path at line $line_number");
}
}
}
}

View File

@ -8,29 +8,12 @@
namespace Drupal\Tests\Component\PhpStorage; namespace Drupal\Tests\Component\PhpStorage;
use Drupal\Tests\UnitTestCase; use Drupal\Tests\UnitTestCase;
use Drupal\Core\PhpStorage\PhpStorageFactory;
/** /**
* Base test for PHP storages. * Base test for PHP storages.
*/ */
abstract class PhpStorageTestBase extends UnitTestCase { abstract class PhpStorageTestBase extends UnitTestCase {
/**
* The storage factory object.
*
* @var \Drupal\Component\PhpStorage\PhpStorageFactory
*/
protected $storageFactory;
/**
* {@inheritdoc}
*/
protected function setUp() {
parent::setUp();
$this->storageFactory = new PhpStorageFactory();
}
/** /**
* Assert that a PHP storage's load/save/delete operations work. * Assert that a PHP storage's load/save/delete operations work.
*/ */

View File

@ -7,7 +7,6 @@
namespace Drupal\Tests\Component\Plugin; namespace Drupal\Tests\Component\Plugin;
use Drupal\Core\PhpStorage\PhpStorageFactory;
use Drupal\Tests\UnitTestCase; use Drupal\Tests\UnitTestCase;
/** /**

View File

@ -12,7 +12,6 @@ use Drupal\Component\Uuid\UuidInterface;
use Drupal\Component\Uuid\Com; use Drupal\Component\Uuid\Com;
use Drupal\Component\Uuid\Pecl; use Drupal\Component\Uuid\Pecl;
use Drupal\Component\Uuid\Php; use Drupal\Component\Uuid\Php;
use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Tests\UnitTestCase; use Drupal\Tests\UnitTestCase;
/** /**