Issue #3076797 by Wim Leers, lauriii, alexpott: \Drupal\Core\Extension\Extension's absence of validation has allowed multiple incorrect tests to be added
parent
42962f7904
commit
afcdeee465
|
|
@ -63,6 +63,8 @@ class Extension {
|
||||||
* (optional) The filename of the main extension file; e.g., 'node.module'.
|
* (optional) The filename of the main extension file; e.g., 'node.module'.
|
||||||
*/
|
*/
|
||||||
public function __construct($root, $type, $pathname, $filename = NULL) {
|
public function __construct($root, $type, $pathname, $filename = NULL) {
|
||||||
|
// @see \Drupal\Core\Theme\ThemeInitialization::getActiveThemeByName()
|
||||||
|
assert($pathname === 'core/core.info.yml' || ($pathname[0] !== '/' && file_exists($root . '/' . $pathname)), sprintf('The file specified by the given app root, relative path and file name (%s) do not exist.', $root . '/' . $pathname));
|
||||||
$this->root = $root;
|
$this->root = $root;
|
||||||
$this->type = $type;
|
$this->type = $type;
|
||||||
$this->pathname = $pathname;
|
$this->pathname = $pathname;
|
||||||
|
|
@ -155,7 +157,7 @@ class Extension {
|
||||||
*/
|
*/
|
||||||
public function __call($method, array $args) {
|
public function __call($method, array $args) {
|
||||||
if (!isset($this->splFileInfo)) {
|
if (!isset($this->splFileInfo)) {
|
||||||
$this->splFileInfo = new \SplFileInfo($this->pathname);
|
$this->splFileInfo = new \SplFileInfo($this->root . '/' . $this->pathname);
|
||||||
}
|
}
|
||||||
return call_user_func_array([$this->splFileInfo, $method], $args);
|
return call_user_func_array([$this->splFileInfo, $method], $args);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,7 @@ EOF;
|
||||||
vfsStream::create([
|
vfsStream::create([
|
||||||
'modules' => [
|
'modules' => [
|
||||||
'test_module' => [
|
'test_module' => [
|
||||||
|
'test_module.info.yml' => $test_module_info,
|
||||||
'tests' => [
|
'tests' => [
|
||||||
'src' => [
|
'src' => [
|
||||||
'Functional' => [
|
'Functional' => [
|
||||||
|
|
@ -212,7 +213,7 @@ EOF;
|
||||||
|
|
||||||
$test_discovery = new TestDiscovery('vfs://drupal', $class_loader->reveal(), $module_handler->reveal());
|
$test_discovery = new TestDiscovery('vfs://drupal', $class_loader->reveal(), $module_handler->reveal());
|
||||||
|
|
||||||
$result = $test_discovery->getTestClasses(NULL, ['PHPUnit-Kernel']);
|
$result = $test_discovery->getTestClasses('test_profile_module', ['PHPUnit-Kernel']);
|
||||||
$expected = [
|
$expected = [
|
||||||
'example3' => [
|
'example3' => [
|
||||||
'Drupal\Tests\test_profile_module\Kernel\KernelExampleTest4' => [
|
'Drupal\Tests\test_profile_module\Kernel\KernelExampleTest4' => [
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ class SystemLocalTasksTest extends LocalTaskIntegrationTestBase {
|
||||||
|
|
||||||
$this->themeHandler = $this->createMock('Drupal\Core\Extension\ThemeHandlerInterface');
|
$this->themeHandler = $this->createMock('Drupal\Core\Extension\ThemeHandlerInterface');
|
||||||
|
|
||||||
$theme = new Extension($this->root, 'theme', '/core/themes/bartik', 'bartik.info.yml');
|
$theme = new Extension($this->root, 'theme', 'core/themes/bartik', 'bartik.info.yml');
|
||||||
$theme->status = 1;
|
$theme->status = 1;
|
||||||
$theme->info = ['name' => 'bartik'];
|
$theme->info = ['name' => 'bartik'];
|
||||||
$this->themeHandler->expects($this->any())
|
$this->themeHandler->expects($this->any())
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ class PermissionHandlerTest extends UnitTestCase {
|
||||||
* The extension object.
|
* The extension object.
|
||||||
*/
|
*/
|
||||||
protected function mockModuleExtension($module, $name) {
|
protected function mockModuleExtension($module, $name) {
|
||||||
$extension = new Extension($this->root, $module, "modules/$module");
|
$extension = new Extension('vfs:/', $module, "modules/$module");
|
||||||
$extension->info['name'] = $name;
|
$extension->info['name'] = $name;
|
||||||
return $extension;
|
return $extension;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ class ExtensionListTest extends UnitTestCase {
|
||||||
*/
|
*/
|
||||||
public function testGetNameWithNonExistingExtension() {
|
public function testGetNameWithNonExistingExtension() {
|
||||||
list($cache, $info_parser, $module_handler, $state) = $this->getMocks();
|
list($cache, $info_parser, $module_handler, $state) = $this->getMocks();
|
||||||
$test_extension_list = new TestExtension($this->root, 'test_extension', $cache->reveal(), $info_parser->reveal(), $module_handler->reveal(), $state->reveal(), 'testing');
|
$test_extension_list = new TestExtension($this->randomMachineName(), 'test_extension', $cache->reveal(), $info_parser->reveal(), $module_handler->reveal(), $state->reveal(), 'testing');
|
||||||
|
|
||||||
$extension_discovery = $this->prophesize(ExtensionDiscovery::class);
|
$extension_discovery = $this->prophesize(ExtensionDiscovery::class);
|
||||||
$extension_discovery->scan('test_extension')->willReturn([]);
|
$extension_discovery->scan('test_extension')->willReturn([]);
|
||||||
|
|
@ -50,7 +50,7 @@ class ExtensionListTest extends UnitTestCase {
|
||||||
*/
|
*/
|
||||||
public function testGetWithNonExistingExtension() {
|
public function testGetWithNonExistingExtension() {
|
||||||
list($cache, $info_parser, $module_handler, $state) = $this->getMocks();
|
list($cache, $info_parser, $module_handler, $state) = $this->getMocks();
|
||||||
$test_extension_list = new TestExtension($this->root, 'test_extension', $cache->reveal(), $info_parser->reveal(), $module_handler->reveal(), $state->reveal(), 'testing');
|
$test_extension_list = new TestExtension($this->randomMachineName(), 'test_extension', $cache->reveal(), $info_parser->reveal(), $module_handler->reveal(), $state->reveal(), 'testing');
|
||||||
|
|
||||||
$extension_discovery = $this->prophesize(ExtensionDiscovery::class);
|
$extension_discovery = $this->prophesize(ExtensionDiscovery::class);
|
||||||
$extension_discovery->scan('test_extension')->willReturn([]);
|
$extension_discovery->scan('test_extension')->willReturn([]);
|
||||||
|
|
@ -142,7 +142,7 @@ class ExtensionListTest extends UnitTestCase {
|
||||||
|
|
||||||
$filenames = $test_extension_list->getPathnames();
|
$filenames = $test_extension_list->getPathnames();
|
||||||
$this->assertEquals([
|
$this->assertEquals([
|
||||||
'test_name' => 'vfs://drupal_root/example/test_name/test_name.info.yml',
|
'test_name' => 'example/test_name/test_name.info.yml',
|
||||||
], $filenames);
|
], $filenames);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -153,7 +153,7 @@ class ExtensionListTest extends UnitTestCase {
|
||||||
$test_extension_list = $this->setupTestExtensionList();
|
$test_extension_list = $this->setupTestExtensionList();
|
||||||
|
|
||||||
$pathname = $test_extension_list->getPathname('test_name');
|
$pathname = $test_extension_list->getPathname('test_name');
|
||||||
$this->assertEquals('vfs://drupal_root/example/test_name/test_name.info.yml', $pathname);
|
$this->assertEquals('example/test_name/test_name.info.yml', $pathname);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -174,7 +174,7 @@ class ExtensionListTest extends UnitTestCase {
|
||||||
$test_extension_list = $this->setupTestExtensionList();
|
$test_extension_list = $this->setupTestExtensionList();
|
||||||
|
|
||||||
$path = $test_extension_list->getPath('test_name');
|
$path = $test_extension_list->getPath('test_name');
|
||||||
$this->assertEquals('vfs://drupal_root/example/test_name', $path);
|
$this->assertEquals('example/test_name', $path);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -184,24 +184,24 @@ class ExtensionListTest extends UnitTestCase {
|
||||||
$test_extension_list = $this->setupTestExtensionList();
|
$test_extension_list = $this->setupTestExtensionList();
|
||||||
|
|
||||||
$path = $test_extension_list->getPath('test_name');
|
$path = $test_extension_list->getPath('test_name');
|
||||||
$this->assertEquals('vfs://drupal_root/example/test_name', $path);
|
$this->assertEquals('example/test_name', $path);
|
||||||
$pathname = $test_extension_list->getPathname('test_name');
|
$pathname = $test_extension_list->getPathname('test_name');
|
||||||
$this->assertEquals('vfs://drupal_root/example/test_name/test_name.info.yml', $pathname);
|
$this->assertEquals('example/test_name/test_name.info.yml', $pathname);
|
||||||
$filenames = $test_extension_list->getPathnames();
|
$filenames = $test_extension_list->getPathnames();
|
||||||
$this->assertEquals([
|
$this->assertEquals([
|
||||||
'test_name' => 'vfs://drupal_root/example/test_name/test_name.info.yml',
|
'test_name' => 'example/test_name/test_name.info.yml',
|
||||||
], $filenames);
|
], $filenames);
|
||||||
|
|
||||||
$test_extension_list->reset();
|
$test_extension_list->reset();
|
||||||
|
|
||||||
// Ensure that everything is still usable after the resetting.
|
// Ensure that everything is still usable after the resetting.
|
||||||
$path = $test_extension_list->getPath('test_name');
|
$path = $test_extension_list->getPath('test_name');
|
||||||
$this->assertEquals('vfs://drupal_root/example/test_name', $path);
|
$this->assertEquals('example/test_name', $path);
|
||||||
$pathname = $test_extension_list->getPathname('test_name');
|
$pathname = $test_extension_list->getPathname('test_name');
|
||||||
$this->assertEquals('vfs://drupal_root/example/test_name/test_name.info.yml', $pathname);
|
$this->assertEquals('example/test_name/test_name.info.yml', $pathname);
|
||||||
$filenames = $test_extension_list->getPathnames();
|
$filenames = $test_extension_list->getPathnames();
|
||||||
$this->assertEquals([
|
$this->assertEquals([
|
||||||
'test_name' => 'vfs://drupal_root/example/test_name/test_name.info.yml',
|
'test_name' => 'example/test_name/test_name.info.yml',
|
||||||
], $filenames);
|
], $filenames);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -226,7 +226,7 @@ class ExtensionListTest extends UnitTestCase {
|
||||||
|
|
||||||
list($cache, $info_parser, $module_handler, $state) = $this->getMocks();
|
list($cache, $info_parser, $module_handler, $state) = $this->getMocks();
|
||||||
$info_parser->parse(Argument::any())->will(function ($args) {
|
$info_parser->parse(Argument::any())->will(function ($args) {
|
||||||
return Yaml::decode(file_get_contents($args[0]));
|
return Yaml::decode(file_get_contents('vfs://drupal_root/' . $args[0]));
|
||||||
});
|
});
|
||||||
|
|
||||||
$test_extension_list = new TestExtension('vfs://drupal_root', 'test_extension', $cache->reveal(), $info_parser->reveal(), $module_handler->reveal(), $state->reveal(), 'testing');
|
$test_extension_list = new TestExtension('vfs://drupal_root', 'test_extension', $cache->reveal(), $info_parser->reveal(), $module_handler->reveal(), $state->reveal(), 'testing');
|
||||||
|
|
@ -234,7 +234,7 @@ class ExtensionListTest extends UnitTestCase {
|
||||||
$extension_discovery = $this->prophesize(ExtensionDiscovery::class);
|
$extension_discovery = $this->prophesize(ExtensionDiscovery::class);
|
||||||
$extension_scan_result = [];
|
$extension_scan_result = [];
|
||||||
foreach ($extension_names as $extension_name) {
|
foreach ($extension_names as $extension_name) {
|
||||||
$extension_scan_result[$extension_name] = new Extension($this->root, 'test_extension', "vfs://drupal_root/example/$extension_name/$extension_name.info.yml");
|
$extension_scan_result[$extension_name] = new Extension('vfs://drupal_root', 'test_extension', "example/$extension_name/$extension_name.info.yml");
|
||||||
}
|
}
|
||||||
$extension_discovery->scan('test_extension')->willReturn($extension_scan_result);
|
$extension_discovery->scan('test_extension')->willReturn($extension_scan_result);
|
||||||
$test_extension_list->setExtensionDiscovery($extension_discovery->reveal());
|
$test_extension_list->setExtensionDiscovery($extension_discovery->reveal());
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ namespace Drupal\Tests\Core\Extension;
|
||||||
use Drupal\Tests\UnitTestCase;
|
use Drupal\Tests\UnitTestCase;
|
||||||
use Drupal\Core\Extension\Extension;
|
use Drupal\Core\Extension\Extension;
|
||||||
use Drupal\Core\DependencyInjection\ContainerBuilder;
|
use Drupal\Core\DependencyInjection\ContainerBuilder;
|
||||||
|
use org\bovigo\vfs\vfsStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests Extension serialization.
|
* Tests Extension serialization.
|
||||||
|
|
@ -14,6 +15,23 @@ use Drupal\Core\DependencyInjection\ContainerBuilder;
|
||||||
*/
|
*/
|
||||||
class ExtensionSerializationTest extends UnitTestCase {
|
class ExtensionSerializationTest extends UnitTestCase {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
protected function setUp() {
|
||||||
|
parent::setUp();
|
||||||
|
vfsStream::setup('dummy_app_root');
|
||||||
|
vfsStream::create([
|
||||||
|
'core' => [
|
||||||
|
'modules' => [
|
||||||
|
'system' => [
|
||||||
|
'system.info.yml' => file_get_contents($this->root . '/core/modules/system/system.info.yml'),
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests that the Extension class unserialize method uses the preferred root.
|
* Tests that the Extension class unserialize method uses the preferred root.
|
||||||
*
|
*
|
||||||
|
|
@ -30,12 +48,12 @@ class ExtensionSerializationTest extends UnitTestCase {
|
||||||
$this->assertFalse(defined('DRUPAL_ROOT'), 'Constant DRUPAL_ROOT is defined.');
|
$this->assertFalse(defined('DRUPAL_ROOT'), 'Constant DRUPAL_ROOT is defined.');
|
||||||
$container = new ContainerBuilder();
|
$container = new ContainerBuilder();
|
||||||
// Set a dummy container app.root to test against.
|
// Set a dummy container app.root to test against.
|
||||||
$container->set('app.root', '/dummy/app/root');
|
$container->set('app.root', 'vfs://dummy_app_root');
|
||||||
\Drupal::setContainer($container);
|
\Drupal::setContainer($container);
|
||||||
// Instantiate an Extension object for testing unserialization.
|
// Instantiate an Extension object for testing unserialization.
|
||||||
$extension = new Extension($container->get('app.root'), 'module', 'core/modules/system/system.info.yml', 'system.module');
|
$extension = new Extension($container->get('app.root'), 'module', 'core/modules/system/system.info.yml', 'system.module');
|
||||||
$extension = unserialize(serialize($extension));
|
$extension = unserialize(serialize($extension));
|
||||||
$this->assertEquals('/dummy/app/root', $this->readAttribute($extension, 'root'));
|
$this->assertEquals('vfs://dummy_app_root', $this->readAttribute($extension, 'root'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -47,7 +65,7 @@ class ExtensionSerializationTest extends UnitTestCase {
|
||||||
public function testPublicProperties() {
|
public function testPublicProperties() {
|
||||||
$container = new ContainerBuilder();
|
$container = new ContainerBuilder();
|
||||||
// Set a dummy container app.root to test against.
|
// Set a dummy container app.root to test against.
|
||||||
$container->set('app.root', '/dummy/app/root');
|
$container->set('app.root', 'vfs://dummy_app_root');
|
||||||
\Drupal::setContainer($container);
|
\Drupal::setContainer($container);
|
||||||
$extension = new Extension($container->get('app.root'), 'module', 'core/modules/system/system.info.yml', 'system.module');
|
$extension = new Extension($container->get('app.root'), 'module', 'core/modules/system/system.info.yml', 'system.module');
|
||||||
// Assign a public property dynamically.
|
// Assign a public property dynamically.
|
||||||
|
|
|
||||||
|
|
@ -318,7 +318,7 @@ class ModuleHandlerTest extends UnitTestCase {
|
||||||
$module_handler->addModule('module_handler_test_added', 'core/tests/Drupal/Tests/Core/Extension/modules/module_handler_test_added');
|
$module_handler->addModule('module_handler_test_added', 'core/tests/Drupal/Tests/Core/Extension/modules/module_handler_test_added');
|
||||||
$this->assertTrue($module_handler->implementsHook('module_handler_test_added', 'hook'), 'Runtime added module with implementation in include found.');
|
$this->assertTrue($module_handler->implementsHook('module_handler_test_added', 'hook'), 'Runtime added module with implementation in include found.');
|
||||||
|
|
||||||
$module_handler->addModule('module_handler_test_no_hook', 'core/tests/Drupal/Tests/Core/Extension/modules/module_handler_test_added');
|
$module_handler->addModule('module_handler_test_no_hook', 'core/tests/Drupal/Tests/Core/Extension/modules/module_handler_test_no_hook');
|
||||||
$this->assertFalse($module_handler->implementsHook('module_handler_test_no_hook', 'hook', [TRUE]), 'Missing implementation not found.');
|
$this->assertFalse($module_handler->implementsHook('module_handler_test_no_hook', 'hook', [TRUE]), 'Missing implementation not found.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -502,8 +502,8 @@ class ModuleHandlerTest extends UnitTestCase {
|
||||||
public function testGetModuleDirectories() {
|
public function testGetModuleDirectories() {
|
||||||
$module_handler = $this->getModuleHandler();
|
$module_handler = $this->getModuleHandler();
|
||||||
$module_handler->setModuleList([]);
|
$module_handler->setModuleList([]);
|
||||||
$module_handler->addModule('module', 'place');
|
$module_handler->addModule('node', 'core/modules/node');
|
||||||
$this->assertEquals(['module' => $this->root . '/place'], $module_handler->getModuleDirectories());
|
$this->assertEquals(['node' => $this->root . '/core/modules/node'], $module_handler->getModuleDirectories());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,29 +31,30 @@ class ThemeExtensionListTest extends UnitTestCase {
|
||||||
$extension_discovery
|
$extension_discovery
|
||||||
->scan('theme')
|
->scan('theme')
|
||||||
->willReturn([
|
->willReturn([
|
||||||
'test_subtheme' => new Extension($this->root, 'theme', $this->root . '/core/modules/system/tests/themes/test_subtheme/test_subtheme.info.yml', 'test_subtheme.info.yml'),
|
'test_subtheme' => new Extension($this->root, 'theme', 'core/modules/system/tests/themes/test_subtheme/test_subtheme.info.yml', 'test_subtheme.info.yml'),
|
||||||
'test_basetheme' => new Extension($this->root, 'theme', $this->root . '/core/modules/system/tests/themes/test_basetheme/test_basetheme.info.yml', 'test_basetheme.info.yml'),
|
'test_basetheme' => new Extension($this->root, 'theme', 'core/modules/system/tests/themes/test_basetheme/test_basetheme.info.yml', 'test_basetheme.info.yml'),
|
||||||
]);
|
]);
|
||||||
$extension_discovery
|
$extension_discovery
|
||||||
->scan('theme_engine')
|
->scan('theme_engine')
|
||||||
->willReturn([
|
->willReturn([
|
||||||
'twig' => new Extension($this->root, 'theme_engine', $this->root . '/core/themes/engines/twig/twig.info.yml', 'twig.engine'),
|
'twig' => new Extension($this->root, 'theme_engine', 'core/themes/engines/twig/twig.info.yml', 'twig.engine'),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Verify that info parser is called with the specified paths.
|
// Verify that info parser is called with the specified paths.
|
||||||
$argument_condition = function ($path) {
|
$argument_condition = function ($path) {
|
||||||
return in_array($path, [
|
return in_array($path, [
|
||||||
$this->root . '/core/modules/system/tests/themes/test_subtheme/test_subtheme.info.yml',
|
'core/modules/system/tests/themes/test_subtheme/test_subtheme.info.yml',
|
||||||
$this->root . '/core/modules/system/tests/themes/test_basetheme/test_basetheme.info.yml',
|
'core/modules/system/tests/themes/test_basetheme/test_basetheme.info.yml',
|
||||||
$this->root . '/core/themes/engines/twig/twig.info.yml',
|
'core/themes/engines/twig/twig.info.yml',
|
||||||
], TRUE);
|
], TRUE);
|
||||||
};
|
};
|
||||||
$info_parser = $this->prophesize(InfoParserInterface::class);
|
$info_parser = $this->prophesize(InfoParserInterface::class);
|
||||||
|
$root = $this->root;
|
||||||
$info_parser->parse(Argument::that($argument_condition))
|
$info_parser->parse(Argument::that($argument_condition))
|
||||||
->shouldBeCalled()
|
->shouldBeCalled()
|
||||||
->will(function ($file) {
|
->will(function ($file) use ($root) {
|
||||||
$info_parser = new InfoParser();
|
$info_parser = new InfoParser();
|
||||||
return $info_parser->parse($file[0]);
|
return $info_parser->parse($root . '/' . $file[0]);
|
||||||
});
|
});
|
||||||
|
|
||||||
$module_handler = $this->prophesize(ModuleHandlerInterface::class);
|
$module_handler = $this->prophesize(ModuleHandlerInterface::class);
|
||||||
|
|
@ -99,9 +100,9 @@ class ThemeExtensionListTest extends UnitTestCase {
|
||||||
$info_subtheme->info['base theme'] = 'test_basetheme';
|
$info_subtheme->info['base theme'] = 'test_basetheme';
|
||||||
$info_basetheme->sub_themes = ['test_subtheme'];
|
$info_basetheme->sub_themes = ['test_subtheme'];
|
||||||
|
|
||||||
$this->assertEquals($this->root . '/core/themes/engines/twig/twig.engine', $info_basetheme->owner);
|
$this->assertEquals('core/themes/engines/twig/twig.engine', $info_basetheme->owner);
|
||||||
$this->assertEquals('twig', $info_basetheme->prefix);
|
$this->assertEquals('twig', $info_basetheme->prefix);
|
||||||
$this->assertEquals($this->root . '/core/themes/engines/twig/twig.engine', $info_subtheme->owner);
|
$this->assertEquals('core/themes/engines/twig/twig.engine', $info_subtheme->owner);
|
||||||
$this->assertEquals('twig', $info_subtheme->prefix);
|
$this->assertEquals('twig', $info_subtheme->prefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,7 @@ class ThemeHandlerTest extends UnitTestCase {
|
||||||
$this->themeList->expects($this->at(1))
|
$this->themeList->expects($this->at(1))
|
||||||
->method('getList')
|
->method('getList')
|
||||||
->will($this->returnValue([
|
->will($this->returnValue([
|
||||||
'seven' => new Extension($this->root, 'theme', $this->root . '/core/themes/seven/seven.info.yml', 'seven.theme'),
|
'seven' => new Extension($this->root, 'theme', 'core/themes/seven/seven.info.yml', 'seven.theme'),
|
||||||
]));
|
]));
|
||||||
|
|
||||||
$theme_data = $this->themeHandler->rebuildThemeData();
|
$theme_data = $this->themeHandler->rebuildThemeData();
|
||||||
|
|
@ -90,8 +90,8 @@ class ThemeHandlerTest extends UnitTestCase {
|
||||||
// Ensure some basic properties.
|
// Ensure some basic properties.
|
||||||
$this->assertInstanceOf('Drupal\Core\Extension\Extension', $info);
|
$this->assertInstanceOf('Drupal\Core\Extension\Extension', $info);
|
||||||
$this->assertEquals('seven', $info->getName());
|
$this->assertEquals('seven', $info->getName());
|
||||||
$this->assertEquals($this->root . '/core/themes/seven/seven.info.yml', $info->getPathname());
|
$this->assertEquals('core/themes/seven/seven.info.yml', $info->getPathname());
|
||||||
$this->assertEquals($this->root . '/core/themes/seven/seven.theme', $info->getExtensionPathname());
|
$this->assertEquals('core/themes/seven/seven.theme', $info->getExtensionPathname());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -99,7 +99,7 @@ class ThemeHandlerTest extends UnitTestCase {
|
||||||
* Tests empty libraries in theme.info.yml file.
|
* Tests empty libraries in theme.info.yml file.
|
||||||
*/
|
*/
|
||||||
public function testThemeLibrariesEmpty() {
|
public function testThemeLibrariesEmpty() {
|
||||||
$theme = new Extension($this->root, 'theme', '/core/modules/system/tests/themes/test_theme_libraries_empty', 'test_theme_libraries_empty.info.yml');
|
$theme = new Extension($this->root, 'theme', 'core/modules/system/tests/themes/test_theme_libraries_empty', 'test_theme_libraries_empty.info.yml');
|
||||||
try {
|
try {
|
||||||
$this->themeHandler->addTheme($theme);
|
$this->themeHandler->addTheme($theme);
|
||||||
$this->assertTrue(TRUE, 'Empty libraries key in theme.info.yml does not cause PHP warning');
|
$this->assertTrue(TRUE, 'Empty libraries key in theme.info.yml does not cause PHP warning');
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ class LayoutPluginManagerTest extends UnitTestCase {
|
||||||
$this->moduleHandler->moduleExists('core')->willReturn(FALSE);
|
$this->moduleHandler->moduleExists('core')->willReturn(FALSE);
|
||||||
$this->moduleHandler->moduleExists('invalid_provider')->willReturn(FALSE);
|
$this->moduleHandler->moduleExists('invalid_provider')->willReturn(FALSE);
|
||||||
|
|
||||||
$module_a = new Extension('/', 'module', vfsStream::url('root/modules/module_a/module_a.layouts.yml'));
|
$module_a = new Extension('vfs://root', 'module', 'modules/module_a/module_a.layouts.yml');
|
||||||
$this->moduleHandler->getModule('module_a')->willReturn($module_a);
|
$this->moduleHandler->getModule('module_a')->willReturn($module_a);
|
||||||
$this->moduleHandler->getModuleDirectories()->willReturn(['module_a' => vfsStream::url('root/modules/module_a')]);
|
$this->moduleHandler->getModuleDirectories()->willReturn(['module_a' => vfsStream::url('root/modules/module_a')]);
|
||||||
$this->moduleHandler->alter('layout', Argument::type('array'))->shouldBeCalled();
|
$this->moduleHandler->alter('layout', Argument::type('array'))->shouldBeCalled();
|
||||||
|
|
@ -81,7 +81,7 @@ class LayoutPluginManagerTest extends UnitTestCase {
|
||||||
$this->themeHandler->themeExists('core')->willReturn(FALSE);
|
$this->themeHandler->themeExists('core')->willReturn(FALSE);
|
||||||
$this->themeHandler->themeExists('invalid_provider')->willReturn(FALSE);
|
$this->themeHandler->themeExists('invalid_provider')->willReturn(FALSE);
|
||||||
|
|
||||||
$theme_a = new Extension('/', 'theme', vfsStream::url('root/themes/theme_a/theme_a.layouts.yml'));
|
$theme_a = new Extension('vfs://root', 'theme', 'themes/theme_a/theme_a.layouts.yml');
|
||||||
$this->themeHandler->getTheme('theme_a')->willReturn($theme_a);
|
$this->themeHandler->getTheme('theme_a')->willReturn($theme_a);
|
||||||
$this->themeHandler->getThemeDirectories()->willReturn(['theme_a' => vfsStream::url('root/themes/theme_a')]);
|
$this->themeHandler->getThemeDirectories()->willReturn(['theme_a' => vfsStream::url('root/themes/theme_a')]);
|
||||||
|
|
||||||
|
|
@ -112,7 +112,6 @@ class LayoutPluginManagerTest extends UnitTestCase {
|
||||||
* @covers ::processDefinition
|
* @covers ::processDefinition
|
||||||
*/
|
*/
|
||||||
public function testGetDefinition() {
|
public function testGetDefinition() {
|
||||||
$theme_a_path = vfsStream::url('root/themes/theme_a');
|
|
||||||
$layout_definition = $this->layoutPluginManager->getDefinition('theme_a_provided_layout');
|
$layout_definition = $this->layoutPluginManager->getDefinition('theme_a_provided_layout');
|
||||||
$this->assertSame('theme_a_provided_layout', $layout_definition->id());
|
$this->assertSame('theme_a_provided_layout', $layout_definition->id());
|
||||||
$this->assertSame('2 column layout', (string) $layout_definition->getLabel());
|
$this->assertSame('2 column layout', (string) $layout_definition->getLabel());
|
||||||
|
|
@ -122,10 +121,10 @@ class LayoutPluginManagerTest extends UnitTestCase {
|
||||||
$this->assertTrue($layout_definition->getCategory() instanceof TranslatableMarkup);
|
$this->assertTrue($layout_definition->getCategory() instanceof TranslatableMarkup);
|
||||||
$this->assertTrue($layout_definition->getDescription() instanceof TranslatableMarkup);
|
$this->assertTrue($layout_definition->getDescription() instanceof TranslatableMarkup);
|
||||||
$this->assertSame('twocol', $layout_definition->getTemplate());
|
$this->assertSame('twocol', $layout_definition->getTemplate());
|
||||||
$this->assertSame("$theme_a_path/templates", $layout_definition->getPath());
|
$this->assertSame('themes/theme_a/templates', $layout_definition->getPath());
|
||||||
$this->assertSame('theme_a/twocol', $layout_definition->getLibrary());
|
$this->assertSame('theme_a/twocol', $layout_definition->getLibrary());
|
||||||
$this->assertSame('twocol', $layout_definition->getThemeHook());
|
$this->assertSame('twocol', $layout_definition->getThemeHook());
|
||||||
$this->assertSame("$theme_a_path/templates", $layout_definition->getTemplatePath());
|
$this->assertSame('themes/theme_a/templates', $layout_definition->getTemplatePath());
|
||||||
$this->assertSame('theme_a', $layout_definition->getProvider());
|
$this->assertSame('theme_a', $layout_definition->getProvider());
|
||||||
$this->assertSame('right', $layout_definition->getDefaultRegion());
|
$this->assertSame('right', $layout_definition->getDefaultRegion());
|
||||||
$this->assertSame(LayoutDefault::class, $layout_definition->getClass());
|
$this->assertSame(LayoutDefault::class, $layout_definition->getClass());
|
||||||
|
|
@ -142,7 +141,6 @@ class LayoutPluginManagerTest extends UnitTestCase {
|
||||||
$this->assertTrue($regions['left']['label'] instanceof TranslatableMarkup);
|
$this->assertTrue($regions['left']['label'] instanceof TranslatableMarkup);
|
||||||
$this->assertTrue($regions['right']['label'] instanceof TranslatableMarkup);
|
$this->assertTrue($regions['right']['label'] instanceof TranslatableMarkup);
|
||||||
|
|
||||||
$module_a_path = vfsStream::url('root/modules/module_a');
|
|
||||||
$layout_definition = $this->layoutPluginManager->getDefinition('module_a_provided_layout');
|
$layout_definition = $this->layoutPluginManager->getDefinition('module_a_provided_layout');
|
||||||
$this->assertSame('module_a_provided_layout', $layout_definition->id());
|
$this->assertSame('module_a_provided_layout', $layout_definition->id());
|
||||||
$this->assertSame('1 column layout', (string) $layout_definition->getLabel());
|
$this->assertSame('1 column layout', (string) $layout_definition->getLabel());
|
||||||
|
|
@ -152,7 +150,7 @@ class LayoutPluginManagerTest extends UnitTestCase {
|
||||||
$this->assertTrue($layout_definition->getCategory() instanceof TranslatableMarkup);
|
$this->assertTrue($layout_definition->getCategory() instanceof TranslatableMarkup);
|
||||||
$this->assertTrue($layout_definition->getDescription() instanceof TranslatableMarkup);
|
$this->assertTrue($layout_definition->getDescription() instanceof TranslatableMarkup);
|
||||||
$this->assertSame(NULL, $layout_definition->getTemplate());
|
$this->assertSame(NULL, $layout_definition->getTemplate());
|
||||||
$this->assertSame("$module_a_path/layouts", $layout_definition->getPath());
|
$this->assertSame('modules/module_a/layouts', $layout_definition->getPath());
|
||||||
$this->assertSame('module_a/onecol', $layout_definition->getLibrary());
|
$this->assertSame('module_a/onecol', $layout_definition->getLibrary());
|
||||||
$this->assertSame('onecol', $layout_definition->getThemeHook());
|
$this->assertSame('onecol', $layout_definition->getThemeHook());
|
||||||
$this->assertSame(NULL, $layout_definition->getTemplatePath());
|
$this->assertSame(NULL, $layout_definition->getTemplatePath());
|
||||||
|
|
@ -226,7 +224,6 @@ EOS;
|
||||||
*/
|
*/
|
||||||
public function testGetThemeImplementations() {
|
public function testGetThemeImplementations() {
|
||||||
$core_path = '/core/lib/Drupal/Core';
|
$core_path = '/core/lib/Drupal/Core';
|
||||||
$theme_a_path = vfsStream::url('root/themes/theme_a');
|
|
||||||
$expected = [
|
$expected = [
|
||||||
'layout' => [
|
'layout' => [
|
||||||
'render element' => 'content',
|
'render element' => 'content',
|
||||||
|
|
@ -235,7 +232,7 @@ EOS;
|
||||||
'render element' => 'content',
|
'render element' => 'content',
|
||||||
'base hook' => 'layout',
|
'base hook' => 'layout',
|
||||||
'template' => 'twocol',
|
'template' => 'twocol',
|
||||||
'path' => "$theme_a_path/templates",
|
'path' => 'themes/theme_a/templates',
|
||||||
],
|
],
|
||||||
'plugin_provided_layout' => [
|
'plugin_provided_layout' => [
|
||||||
'render element' => 'content',
|
'render element' => 'content',
|
||||||
|
|
|
||||||
|
|
@ -326,6 +326,7 @@ EOF;
|
||||||
vfsStream::create([
|
vfsStream::create([
|
||||||
'modules' => [
|
'modules' => [
|
||||||
'test_module' => [
|
'test_module' => [
|
||||||
|
'test_module.info.yml' => $test_module_info,
|
||||||
'tests' => [
|
'tests' => [
|
||||||
'src' => [
|
'src' => [
|
||||||
'Functional' => [
|
'Functional' => [
|
||||||
|
|
@ -491,7 +492,7 @@ EOF;
|
||||||
|
|
||||||
$test_discovery = new TestDiscovery('vfs://drupal', $class_loader->reveal(), $module_handler->reveal());
|
$test_discovery = new TestDiscovery('vfs://drupal', $class_loader->reveal(), $module_handler->reveal());
|
||||||
|
|
||||||
$result = $test_discovery->getTestClasses(NULL, ['PHPUnit-Kernel']);
|
$result = $test_discovery->getTestClasses('test_profile_module', ['PHPUnit-Kernel']);
|
||||||
$expected = [
|
$expected = [
|
||||||
'example3' => [
|
'example3' => [
|
||||||
'Drupal\Tests\test_profile_module\Kernel\KernelExampleTest4' => [
|
'Drupal\Tests\test_profile_module\Kernel\KernelExampleTest4' => [
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue