Issue #2282673 by stevepurkiss, ParisLiakos, mgifford: Add a PHPunit test for not using Drupal\Core code in Drupal\Component.
parent
f98cf1f60c
commit
914b78de24
|
@ -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(
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue