Update to Drupal 8.1.8. For more information, see https://www.drupal.org/project/drupal/releases/8.1.8
This commit is contained in:
parent
e9f047ccf8
commit
f9f23cdf38
312 changed files with 6751 additions and 1546 deletions
|
@ -8,7 +8,7 @@ use Drupal\Core\Queue\QueueWorkerBase;
|
|||
* @QueueWorker(
|
||||
* id = "cron_queue_test_exception",
|
||||
* title = @Translation("Exception test"),
|
||||
* cron = {"time" = 60}
|
||||
* cron = {"time" = 1}
|
||||
* )
|
||||
*/
|
||||
class CronQueueTestException extends QueueWorkerBase {
|
||||
|
@ -17,7 +17,14 @@ class CronQueueTestException extends QueueWorkerBase {
|
|||
* {@inheritdoc}
|
||||
*/
|
||||
public function processItem($data) {
|
||||
throw new \Exception('That is not supposed to happen.');
|
||||
$state = \Drupal::state();
|
||||
if (!$state->get('cron_queue_test_exception')) {
|
||||
$state->set('cron_queue_test_exception', 1);
|
||||
throw new \Exception('That is not supposed to happen.');
|
||||
}
|
||||
else {
|
||||
$state->set('cron_queue_test_exception', 2);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -114,6 +114,11 @@ function entity_test_entity_base_field_info(EntityTypeInterface $entity_type) {
|
|||
->setRevisionable(TRUE)
|
||||
->setTranslatable(TRUE);
|
||||
}
|
||||
if ($entity_type->id() == 'entity_test_mulrev' && \Drupal::state()->get('entity_test.multi_column')) {
|
||||
$fields['description'] = BaseFieldDefinition::create('shape')
|
||||
->setLabel(t('Some custom description'))
|
||||
->setTranslatable(TRUE);
|
||||
}
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
@ -665,6 +670,17 @@ function entity_test_entity_prepare_view($entity_type, array $entities, array $d
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_entity_display_build_alter().
|
||||
*/
|
||||
function entity_test_entity_display_build_alter(&$build, $context) {
|
||||
/** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
|
||||
$entity = $context['entity'];
|
||||
if ($entity->getEntityTypeId() == 'entity_test' && $entity->bundle() == 'display_build_alter_bundle') {
|
||||
$build['entity_display_build_alter']['#markup'] = 'Content added in hook_entity_display_build_alter for entity id ' . $entity->id();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_entity_access().
|
||||
*/
|
||||
|
|
|
@ -68,6 +68,19 @@ entity.entity_test_rev.revision:
|
|||
requirements:
|
||||
_access: 'TRUE'
|
||||
|
||||
entity.entity_test_mulrev.revision:
|
||||
path: '/entity_test_mulrev/{entity_test_mulrev}/revision/{entity_test_mulrev_revision}/view'
|
||||
defaults:
|
||||
_controller: '\Drupal\Core\Entity\Controller\EntityViewController::viewRevision'
|
||||
options:
|
||||
parameters:
|
||||
entity_test_mulrev:
|
||||
type: entity:entity_test_mulrev
|
||||
entity_test_mulrev_revision:
|
||||
type: entity_revision:entity_test_mulrev
|
||||
requirements:
|
||||
_access: 'TRUE'
|
||||
|
||||
entity.block.test_operation:
|
||||
path: '/admin/structure/block/manage/{block}/test_operation'
|
||||
defaults:
|
||||
|
|
|
@ -15,7 +15,7 @@ namespace Drupal\entity_test\Entity;
|
|||
* },
|
||||
* "translation" = "Drupal\content_translation\ContentTranslationHandler"
|
||||
* },
|
||||
* base_table = "entity_test",
|
||||
* base_table = "entity_test_cache",
|
||||
* entity_keys = {
|
||||
* "id" = "id",
|
||||
* "uuid" = "uuid",
|
||||
|
|
|
@ -15,7 +15,7 @@ use Drupal\Core\Entity\EntityTypeInterface;
|
|||
* "default" = "Drupal\entity_test\EntityTestForm"
|
||||
* }
|
||||
* },
|
||||
* base_table = "entity_test",
|
||||
* base_table = "entity_test_constraint_violation",
|
||||
* persistent_cache = FALSE,
|
||||
* entity_keys = {
|
||||
* "id" = "id",
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace Drupal\entity_test\Entity;
|
|||
* @ContentEntityType(
|
||||
* id = "entity_test_default_access",
|
||||
* label = @Translation("Test entity with default access"),
|
||||
* base_table = "entity_test",
|
||||
* base_table = "entity_test_default_access",
|
||||
* entity_keys = {
|
||||
* "id" = "id",
|
||||
* "bundle" = "type"
|
||||
|
|
|
@ -12,7 +12,7 @@ namespace Drupal\entity_test\Entity;
|
|||
* "access" = "Drupal\entity_test\EntityTestAccessControlHandler",
|
||||
* "view_builder" = "Drupal\entity_test\EntityTestViewBuilder"
|
||||
* },
|
||||
* base_table = "entity_test",
|
||||
* base_table = "entity_test_label",
|
||||
* render_cache = FALSE,
|
||||
* entity_keys = {
|
||||
* "uuid" = "uuid",
|
||||
|
|
|
@ -9,7 +9,7 @@ namespace Drupal\entity_test\Entity;
|
|||
* id = "entity_test_label_callback",
|
||||
* label = @Translation("Entity test label callback"),
|
||||
* persistent_cache = FALSE,
|
||||
* base_table = "entity_test",
|
||||
* base_table = "entity_test_label_callback",
|
||||
* label_callback = "entity_test_label_callback",
|
||||
* entity_keys = {
|
||||
* "id" = "id",
|
||||
|
|
|
@ -9,7 +9,7 @@ namespace Drupal\entity_test\Entity;
|
|||
* id = "entity_test_no_label",
|
||||
* label = @Translation("Entity Test without label"),
|
||||
* persistent_cache = FALSE,
|
||||
* base_table = "entity_test",
|
||||
* base_table = "entity_test_no_label",
|
||||
* entity_keys = {
|
||||
* "id" = "id",
|
||||
* "bundle" = "type"
|
||||
|
|
|
@ -12,7 +12,7 @@ namespace Drupal\entity_test\Entity;
|
|||
* "access" = "Drupal\entity_test\EntityTestAccessControlHandler",
|
||||
* "view_builder" = "Drupal\entity_test\EntityTestViewBuilderOverriddenView",
|
||||
* },
|
||||
* base_table = "entity_test",
|
||||
* base_table = "entity_test_view_builder",
|
||||
* render_cache = FALSE,
|
||||
* entity_keys = {
|
||||
* "id" = "id",
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
pager_test.multiple_pagers:
|
||||
path: '/pager-test/multiple-pagers'
|
||||
defaults:
|
||||
_title: 'Page using multiple pagers for testing'
|
||||
_controller: '\Drupal\pager_test\Controller\PagerTestController::multiplePagers'
|
||||
requirements:
|
||||
_access: 'TRUE'
|
||||
|
||||
pager_test.query_parameters:
|
||||
path: '/pager-test/query-parameters'
|
||||
defaults:
|
||||
|
|
|
@ -9,6 +9,41 @@ use Drupal\Core\Controller\ControllerBase;
|
|||
*/
|
||||
class PagerTestController extends ControllerBase {
|
||||
|
||||
/**
|
||||
* Builds a render array for a pageable test table.
|
||||
*
|
||||
* @param int $element
|
||||
* The pager element to be used for paging.
|
||||
* @param int $limit
|
||||
* The limit of rows per page for the specified element.
|
||||
*
|
||||
* @return array
|
||||
* A render array.
|
||||
*/
|
||||
protected function buildTestTable($element, $limit) {
|
||||
$header = [
|
||||
['data' => 'wid'],
|
||||
['data' => 'type'],
|
||||
['data' => 'timestamp'],
|
||||
];
|
||||
$query = db_select('watchdog', 'd')->extend('Drupal\Core\Database\Query\PagerSelectExtender')->element($element);
|
||||
$result = $query
|
||||
->fields('d', array('wid', 'type', 'timestamp'))
|
||||
->limit($limit)
|
||||
->orderBy('d.wid')
|
||||
->execute();
|
||||
$rows = [];
|
||||
foreach ($result as $row) {
|
||||
$rows[] = ['data' => (array) $row];
|
||||
}
|
||||
return [
|
||||
'#theme' => 'table',
|
||||
'#header' => $header,
|
||||
'#rows' => $rows,
|
||||
'#empty' => $this->t("There are no watchdog records found in the db"),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a pager with 'parameters' variable.
|
||||
*
|
||||
|
@ -18,27 +53,7 @@ class PagerTestController extends ControllerBase {
|
|||
public function queryParameters() {
|
||||
|
||||
// Example query.
|
||||
$header_0 = array(
|
||||
array('data' => 'wid'),
|
||||
array('data' => 'type'),
|
||||
array('data' => 'timestamp'),
|
||||
);
|
||||
$query_0 = db_select('watchdog', 'd')->extend('Drupal\Core\Database\Query\PagerSelectExtender')->element(0);
|
||||
$query_0->fields('d', array('wid', 'type', 'timestamp'));
|
||||
$result_0 = $query_0
|
||||
->limit(5)
|
||||
->orderBy('d.wid')
|
||||
->execute();
|
||||
$rows_0 = array();
|
||||
foreach ($result_0 as $row) {
|
||||
$rows_0[] = array('data' => (array) $row);
|
||||
}
|
||||
$build['pager_table_0'] = array(
|
||||
'#theme' => 'table',
|
||||
'#header' => $header_0,
|
||||
'#rows' => $rows_0,
|
||||
'#empty' => $this->t("There are no watchdog records found in the db"),
|
||||
);
|
||||
$build['pager_table_0'] = $this->buildTestTable(0, 5);
|
||||
|
||||
// Counter of calls to the current pager.
|
||||
$query_params = pager_get_query_parameters();
|
||||
|
@ -60,6 +75,45 @@ class PagerTestController extends ControllerBase {
|
|||
return $build;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a page with multiple pagers.
|
||||
*/
|
||||
public function multiplePagers() {
|
||||
|
||||
// Build three tables with same query and different pagers.
|
||||
$build['pager_table_0'] = $this->buildTestTable(0, 20);
|
||||
$build['pager_pager_0'] = array(
|
||||
'#type' => 'container',
|
||||
'#attributes' => ['class' => ['test-pager-0']],
|
||||
'pager' => [
|
||||
'#type' => 'pager',
|
||||
'#element' => 0,
|
||||
],
|
||||
);
|
||||
|
||||
$build['pager_table_1'] = $this->buildTestTable(1, 20);
|
||||
$build['pager_pager_1'] = array(
|
||||
'#type' => 'container',
|
||||
'#attributes' => ['class' => ['test-pager-1']],
|
||||
'pager' => [
|
||||
'#type' => 'pager',
|
||||
'#element' => 1,
|
||||
],
|
||||
);
|
||||
|
||||
$build['pager_table_4'] = $this->buildTestTable(4, 20);
|
||||
$build['pager_pager_4'] = array(
|
||||
'#type' => 'container',
|
||||
'#attributes' => ['class' => ['test-pager-4']],
|
||||
'pager' => [
|
||||
'#type' => 'pager',
|
||||
'#element' => 4,
|
||||
],
|
||||
);
|
||||
|
||||
return $build;
|
||||
}
|
||||
|
||||
/**
|
||||
* #pre_render callback for #type => pager that shows the pager cache context.
|
||||
*/
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
name: 'Placeholder setting a message test'
|
||||
type: module
|
||||
description: 'Support module for PlaceholderMessageTest.'
|
||||
package: Testing
|
||||
version: VERSION
|
||||
core: 8.x
|
|
@ -0,0 +1,24 @@
|
|||
render_placeholder_message_test.first:
|
||||
path: '/render_placeholder_message_test/first'
|
||||
defaults:
|
||||
_controller: '\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::messagesPlaceholderFirst'
|
||||
requirements:
|
||||
_access: 'TRUE'
|
||||
render_placeholder_message_test.middle:
|
||||
path: '/render_placeholder_message_test/middle'
|
||||
defaults:
|
||||
_controller: '\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::messagesPlaceholderMiddle'
|
||||
requirements:
|
||||
_access: 'TRUE'
|
||||
render_placeholder_message_test.last:
|
||||
path: '/render_placeholder_message_test/last'
|
||||
defaults:
|
||||
_controller: '\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::messagesPlaceholderLast'
|
||||
requirements:
|
||||
_access: 'TRUE'
|
||||
render_placeholder_message_test.queued:
|
||||
path: '/render_placeholder_message_test/queued'
|
||||
defaults:
|
||||
_controller: '\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::queuedMessages'
|
||||
requirements:
|
||||
_access: 'TRUE'
|
|
@ -0,0 +1,99 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\render_placeholder_message_test;
|
||||
use Drupal\Core\Render\RenderContext;
|
||||
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerAwareTrait;
|
||||
|
||||
class RenderPlaceholderMessageTestController implements ContainerAwareInterface {
|
||||
|
||||
use ContainerAwareTrait;
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function messagesPlaceholderFirst() {
|
||||
return $this->build([
|
||||
'<drupal-render-placeholder callback="Drupal\Core\Render\Element\StatusMessages::renderMessages" arguments="0" token="a8c34b5e"></drupal-render-placeholder>',
|
||||
'<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P1" token="0546ada3"></drupal-render-placeholder>',
|
||||
'<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P2" token="83d2df0d"></drupal-render-placeholder>',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function messagesPlaceholderMiddle() {
|
||||
return $this->build([
|
||||
'<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P1" token="0546ada3"></drupal-render-placeholder>',
|
||||
'<drupal-render-placeholder callback="Drupal\Core\Render\Element\StatusMessages::renderMessages" arguments="0" token="a8c34b5e"></drupal-render-placeholder>',
|
||||
'<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P2" token="83d2df0d"></drupal-render-placeholder>',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function messagesPlaceholderLast() {
|
||||
return $this->build([
|
||||
'<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P1" token="0546ada3"></drupal-render-placeholder>',
|
||||
'<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P2" token="83d2df0d"></drupal-render-placeholder>',
|
||||
'<drupal-render-placeholder callback="Drupal\Core\Render\Element\StatusMessages::renderMessages" arguments="0" token="a8c34b5e"></drupal-render-placeholder>',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function queuedMessages() {
|
||||
return ['#type' => 'status_messages'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function build(array $placeholder_order) {
|
||||
$build = [];
|
||||
$build['messages'] = ['#type' => 'status_messages'];
|
||||
$build['p1'] = [
|
||||
'#lazy_builder' => ['\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage', ['P1']],
|
||||
'#create_placeholder' => TRUE,
|
||||
];
|
||||
$build['p2'] = [
|
||||
'#lazy_builder' => ['\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage', ['P2']],
|
||||
'#create_placeholder' => TRUE,
|
||||
];
|
||||
|
||||
/** @var \Drupal\Core\Render\RendererInterface $renderer */
|
||||
$renderer = $this->container->get('renderer');
|
||||
$renderer->executeInRenderContext(new RenderContext(), function () use (&$build, $renderer) {
|
||||
return $renderer->render($build, FALSE);
|
||||
});
|
||||
|
||||
$reordered = [];
|
||||
foreach ($placeholder_order as $placeholder) {
|
||||
$reordered[$placeholder] = $build['#attached']['placeholders'][$placeholder];
|
||||
}
|
||||
$build['#attached']['placeholders'] = $reordered;
|
||||
|
||||
return $build;
|
||||
}
|
||||
|
||||
/**
|
||||
* #lazy_builder callback; sets and prints a message.
|
||||
*
|
||||
* @param string $message
|
||||
* The message to send.
|
||||
*
|
||||
* @return array
|
||||
* A renderable array containing the message.
|
||||
*/
|
||||
public static function setAndLogMessage($message) {
|
||||
// Set message.
|
||||
drupal_set_message($message);
|
||||
|
||||
// Print which message is expected.
|
||||
return ['#markup' => '<p class="logged-message">Message: ' . $message . '</p>'];
|
||||
}
|
||||
|
||||
}
|
|
@ -114,3 +114,10 @@ function _test_theme_twig_php_values() {
|
|||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements template_preprocess_status_messages().
|
||||
*/
|
||||
function twig_theme_test_preprocess_status_messages(&$variables) {
|
||||
$variables['attributes']['class'][] = 'custom-test-messages-class';
|
||||
}
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\Tests\system\Functional\Render;
|
||||
|
||||
use Drupal\Core\Url;
|
||||
use Drupal\Tests\BrowserTestBase;
|
||||
|
||||
/**
|
||||
* Functional test verifying that messages set in placeholders always appear.
|
||||
*
|
||||
* @group Render
|
||||
*/
|
||||
class PlaceholderMessageTest extends BrowserTestBase {
|
||||
|
||||
/**
|
||||
* Modules to enable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $modules = ['render_placeholder_message_test'];
|
||||
|
||||
/**
|
||||
* Test rendering of message placeholder.
|
||||
*/
|
||||
public function testMessagePlaceholder() {
|
||||
$messages_markup = '<div role="contentinfo" aria-label="Status message"';
|
||||
|
||||
$test_routes = [
|
||||
// Messages placeholder rendered first.
|
||||
'render_placeholder_message_test.first',
|
||||
// Messages placeholder rendered after one, before another.
|
||||
'render_placeholder_message_test.middle',
|
||||
// Messages placeholder rendered last.
|
||||
'render_placeholder_message_test.last',
|
||||
];
|
||||
|
||||
$assert = $this->assertSession();
|
||||
foreach ($test_routes as $route) {
|
||||
// Verify that we start off with zero messages queued.
|
||||
$this->drupalGet(Url::fromRoute('render_placeholder_message_test.queued'));
|
||||
$assert->responseNotContains($messages_markup);
|
||||
|
||||
// Verify the test case at this route behaves as expected.
|
||||
$this->drupalGet(Url::fromRoute($route));
|
||||
$assert->elementContains('css', 'p.logged-message:nth-of-type(1)', 'Message: P1');
|
||||
$assert->elementContains('css', 'p.logged-message:nth-of-type(2)', 'Message: P2');
|
||||
$assert->responseContains($messages_markup);
|
||||
$assert->elementExists('css', 'div[aria-label="Status message"] ul');
|
||||
$assert->elementContains('css', 'div[aria-label="Status message"] ul li:nth-of-type(1)', 'P1');
|
||||
$assert->elementContains('css', 'div[aria-label="Status message"] ul li:nth-of-type(2)', 'P2');
|
||||
|
||||
// Verify that we end with all messages printed, hence again zero queued.
|
||||
$this->drupalGet(Url::fromRoute('render_placeholder_message_test.queued'));
|
||||
$assert->responseNotContains($messages_markup);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -126,7 +126,7 @@ class ModuleHandlerTest extends KernelTestBase {
|
|||
$this->pass(t('ModuleInstaller::install() throws an exception if dependencies are missing.'));
|
||||
}
|
||||
|
||||
$this->assertFalse($this->moduleHandler()->moduleExists('color'), 'ModuleHandler::install() aborts if dependencies are missing.');
|
||||
$this->assertFalse($this->moduleHandler()->moduleExists('color'), 'ModuleInstaller::install() aborts if dependencies are missing.');
|
||||
|
||||
// Fix the missing dependency.
|
||||
// Color module depends on Config. Config depends on Help module.
|
||||
|
@ -134,7 +134,7 @@ class ModuleHandlerTest extends KernelTestBase {
|
|||
drupal_static_reset('system_rebuild_module_data');
|
||||
|
||||
$result = $this->moduleInstaller()->install(array('color'));
|
||||
$this->assertTrue($result, 'ModuleHandler::install() returns the correct value.');
|
||||
$this->assertTrue($result, 'ModuleInstaller::install() returns the correct value.');
|
||||
|
||||
// Verify that the fake dependency chain was installed.
|
||||
$this->assertTrue($this->moduleHandler()->moduleExists('config') && $this->moduleHandler()->moduleExists('help'), 'Dependency chain was installed.');
|
||||
|
@ -147,10 +147,10 @@ class ModuleHandlerTest extends KernelTestBase {
|
|||
$this->assertEqual($module_order, array('help', 'config', 'color'));
|
||||
|
||||
// Uninstall all three modules explicitly, but in the incorrect order,
|
||||
// and make sure that ModuleHandler::uninstall() uninstalled them in the
|
||||
// and make sure that ModuleInstaller::uninstall() uninstalled them in the
|
||||
// correct sequence.
|
||||
$result = $this->moduleInstaller()->uninstall(array('config', 'help', 'color'));
|
||||
$this->assertTrue($result, 'ModuleHandler::uninstall() returned TRUE.');
|
||||
$this->assertTrue($result, 'ModuleInstaller::uninstall() returned TRUE.');
|
||||
|
||||
foreach (array('color', 'config', 'help') as $module) {
|
||||
$this->assertEqual(drupal_get_installed_schema_version($module), SCHEMA_UNINSTALLED, "$module module was uninstalled.");
|
||||
|
@ -161,12 +161,12 @@ class ModuleHandlerTest extends KernelTestBase {
|
|||
// Enable Color module again, which should enable both the Config module and
|
||||
// Help module. But, this time do it with Config module declaring a
|
||||
// dependency on a specific version of Help module in its info file. Make
|
||||
// sure that Drupal\Core\Extension\ModuleHandler::install() still works.
|
||||
// sure that Drupal\Core\Extension\ModuleInstaller::install() still works.
|
||||
\Drupal::state()->set('module_test.dependency', 'version dependency');
|
||||
drupal_static_reset('system_rebuild_module_data');
|
||||
|
||||
$result = $this->moduleInstaller()->install(array('color'));
|
||||
$this->assertTrue($result, 'ModuleHandler::install() returns the correct value.');
|
||||
$this->assertTrue($result, 'ModuleInstaller::install() returns the correct value.');
|
||||
|
||||
// Verify that the fake dependency chain was installed.
|
||||
$this->assertTrue($this->moduleHandler()->moduleExists('config') && $this->moduleHandler()->moduleExists('help'), 'Dependency chain was installed.');
|
||||
|
@ -202,7 +202,7 @@ class ModuleHandlerTest extends KernelTestBase {
|
|||
|
||||
// Uninstall the profile module "dependency".
|
||||
$result = $this->moduleInstaller()->uninstall(array($dependency));
|
||||
$this->assertTrue($result, 'ModuleHandler::uninstall() returns TRUE.');
|
||||
$this->assertTrue($result, 'ModuleInstaller::uninstall() returns TRUE.');
|
||||
$this->assertFalse($this->moduleHandler()->moduleExists($dependency));
|
||||
$this->assertEqual(drupal_get_installed_schema_version($dependency), SCHEMA_UNINSTALLED, "$dependency module was uninstalled.");
|
||||
|
||||
|
@ -240,7 +240,7 @@ class ModuleHandlerTest extends KernelTestBase {
|
|||
|
||||
// Uninstalling entity_test is not possible when there is content.
|
||||
try {
|
||||
$message = 'ModuleHandler::uninstall() throws ModuleUninstallValidatorException upon uninstalling a module which does not pass validation.';
|
||||
$message = 'ModuleInstaller::uninstall() throws ModuleUninstallValidatorException upon uninstalling a module which does not pass validation.';
|
||||
$this->moduleInstaller()->uninstall(array('entity_test'));
|
||||
$this->fail($message);
|
||||
}
|
||||
|
@ -250,7 +250,7 @@ class ModuleHandlerTest extends KernelTestBase {
|
|||
|
||||
// Uninstalling help needs entity_test to be un-installable.
|
||||
try {
|
||||
$message = 'ModuleHandler::uninstall() throws ModuleUninstallValidatorException upon uninstalling a module which does not pass validation.';
|
||||
$message = 'ModuleInstaller::uninstall() throws ModuleUninstallValidatorException upon uninstalling a module which does not pass validation.';
|
||||
$this->moduleInstaller()->uninstall(array('help'));
|
||||
$this->fail($message);
|
||||
}
|
||||
|
@ -262,7 +262,7 @@ class ModuleHandlerTest extends KernelTestBase {
|
|||
$entity->delete();
|
||||
|
||||
$result = $this->moduleInstaller()->uninstall(array('help'));
|
||||
$this->assertTrue($result, 'ModuleHandler::uninstall() returns TRUE.');
|
||||
$this->assertTrue($result, 'ModuleInstaller::uninstall() returns TRUE.');
|
||||
$this->assertEqual(drupal_get_installed_schema_version('entity_test'), SCHEMA_UNINSTALLED, "entity_test module was uninstalled.");
|
||||
}
|
||||
|
||||
|
|
49
core/modules/system/tests/src/Kernel/Render/ClassyTest.php
Normal file
49
core/modules/system/tests/src/Kernel/Render/ClassyTest.php
Normal file
|
@ -0,0 +1,49 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\Tests\system\Kernel\Render;
|
||||
|
||||
use Drupal\KernelTests\KernelTestBase;
|
||||
|
||||
/**
|
||||
* Tests the Classy theme.
|
||||
*
|
||||
* @group Theme
|
||||
*/
|
||||
class ClassyTest extends KernelTestBase {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static $modules = array('system', 'twig_theme_test');
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
// Use the classy theme.
|
||||
$this->container->get('theme_installer')->install(['classy']);
|
||||
$this->container->get('config.factory')
|
||||
->getEditable('system.theme')
|
||||
->set('default', 'classy')
|
||||
->save();
|
||||
// Clear the theme registry.
|
||||
$this->container->set('theme.registry', NULL);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the classy theme.
|
||||
*/
|
||||
function testClassyTheme() {
|
||||
drupal_set_message('An error occurred', 'error');
|
||||
drupal_set_message('But then something nice happened');
|
||||
$messages = array(
|
||||
'#type' => 'status_messages',
|
||||
);
|
||||
$this->render($messages);
|
||||
$this->assertNoText('custom-test-messages-class', 'The custom class attribute value added in the status messages preprocess function is not displayed as page content.');
|
||||
}
|
||||
|
||||
}
|
112
core/modules/system/tests/src/Kernel/System/CronQueueTest.php
Normal file
112
core/modules/system/tests/src/Kernel/System/CronQueueTest.php
Normal file
|
@ -0,0 +1,112 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\Tests\system\Kernel\System;
|
||||
|
||||
use Drupal\Core\Database\Database;
|
||||
use Drupal\KernelTests\KernelTestBase;
|
||||
|
||||
/**
|
||||
* Tests the Cron Queue runner.
|
||||
*
|
||||
* @group system
|
||||
*/
|
||||
class CronQueueTest extends KernelTestBase {
|
||||
|
||||
/**
|
||||
* The modules to enable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $modules = ['system', 'cron_queue_test'];
|
||||
|
||||
/**
|
||||
* The database connection.
|
||||
*
|
||||
* @var \Drupal\Core\Database\Connection
|
||||
*/
|
||||
protected $connection;
|
||||
|
||||
/**
|
||||
* The cron service.
|
||||
*
|
||||
* @var \Drupal\Core\Cron
|
||||
*/
|
||||
protected $cron;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
// These additional tables are necessary because $this->cron->run() calls
|
||||
// system_cron().
|
||||
$this->installSchema('system', ['key_value_expire']);
|
||||
|
||||
$this->connection = Database::getConnection();
|
||||
$this->cron = \Drupal::service('cron');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that exceptions thrown by workers are handled properly.
|
||||
*/
|
||||
public function testExceptions() {
|
||||
// Get the queue to test the normal Exception.
|
||||
$queue = $this->container->get('queue')->get('cron_queue_test_exception');
|
||||
|
||||
// Enqueue an item for processing.
|
||||
$queue->createItem(array($this->randomMachineName() => $this->randomMachineName()));
|
||||
|
||||
// Run cron; the worker for this queue should throw an exception and handle
|
||||
// it.
|
||||
$this->cron->run();
|
||||
$this->assertEqual(\Drupal::state()->get('cron_queue_test_exception'), 1);
|
||||
|
||||
// The item should be left in the queue.
|
||||
$this->assertEqual($queue->numberOfItems(), 1, 'Failing item still in the queue after throwing an exception.');
|
||||
|
||||
// Expire the queue item manually. system_cron() relies in REQUEST_TIME to
|
||||
// find queue items whose expire field needs to be reset to 0. This is a
|
||||
// Kernel test, so REQUEST_TIME won't change when cron runs.
|
||||
// @see system_cron()
|
||||
// @see \Drupal\Core\Cron::processQueues()
|
||||
$this->connection->update('queue')
|
||||
->condition('name', 'cron_queue_test_exception')
|
||||
->fields(['expire' => REQUEST_TIME - 1])
|
||||
->execute();
|
||||
$this->cron->run();
|
||||
$this->assertEqual(\Drupal::state()->get('cron_queue_test_exception'), 2);
|
||||
$this->assertEqual($queue->numberOfItems(), 0, 'Item was processed and removed from the queue.');
|
||||
|
||||
// Get the queue to test the specific SuspendQueueException.
|
||||
$queue = $this->container->get('queue')->get('cron_queue_test_broken_queue');
|
||||
|
||||
// Enqueue several item for processing.
|
||||
$queue->createItem('process');
|
||||
$queue->createItem('crash');
|
||||
$queue->createItem('ignored');
|
||||
|
||||
// Run cron; the worker for this queue should process as far as the crashing
|
||||
// item.
|
||||
$this->cron->run();
|
||||
|
||||
// Only one item should have been processed.
|
||||
$this->assertEqual($queue->numberOfItems(), 2, 'Failing queue stopped processing at the failing item.');
|
||||
|
||||
// Check the items remaining in the queue. The item that throws the
|
||||
// exception gets released by cron, so we can claim it again to check it.
|
||||
$item = $queue->claimItem();
|
||||
$this->assertEqual($item->data, 'crash', 'Failing item remains in the queue.');
|
||||
$item = $queue->claimItem();
|
||||
$this->assertEqual($item->data, 'ignored', 'Item beyond the failing item remains in the queue.');
|
||||
|
||||
// Test the requeueing functionality.
|
||||
$queue = $this->container->get('queue')->get('cron_queue_test_requeue_exception');
|
||||
$queue->createItem([]);
|
||||
$this->cron->run();
|
||||
|
||||
$this->assertEqual(\Drupal::state()->get('cron_queue_test_requeue_exception'), 2);
|
||||
$this->assertFalse($queue->numberOfItems());
|
||||
}
|
||||
|
||||
}
|
Reference in a new issue