updated core and modules

This commit is contained in:
Bachir Soussi Chiadmi
2017-09-09 16:27:51 +02:00
parent 027aa99b32
commit 41863f872c
7810 changed files with 318922 additions and 83631 deletions
@@ -0,0 +1,28 @@
uuid: 1a6c0f14-78dc-4ede-bade-b8ce83881453
langcode: en
status: true
dependencies:
module:
- block_test
- system
theme:
- bartik
id: missing_schema
theme: bartik
region: sidebar_first
weight: 0
provider: null
plugin: system_branding_block
settings:
id: system_branding_block
label: 'Test missing schema on conditions'
provider: system
label_display: visible
use_site_logo: true
use_site_name: true
use_site_slogan: true
visibility:
missing_schema:
id: missing_schema
negate: 0
context_mapping: { }
@@ -0,0 +1,49 @@
<?php
/**
* @file
* Partial database to mimic the installation of the block_test module.
*/
use Drupal\Core\Database\Database;
use Symfony\Component\Yaml\Yaml;
$connection = Database::getConnection();
// Set the schema version.
$connection->insert('key_value')
->fields([
'collection' => 'system.schema',
'name' => 'block_test',
'value' => 'i:8000;',
])
->execute();
// Update core.extension.
$extensions = $connection->select('config')
->fields('config', ['data'])
->condition('collection', '')
->condition('name', 'core.extension')
->execute()
->fetchField();
$extensions = unserialize($extensions);
$extensions['module']['block_test'] = 8000;
$connection->update('config')
->fields([
'data' => serialize($extensions),
])
->condition('collection', '')
->condition('name', 'core.extension')
->execute();
// Install the block configuration.
$config = file_get_contents(__DIR__ . '/block.block.missing_schema.yml');
$config = Yaml::parse($config);
$connection->insert('config')
->fields(['data', 'name', 'collection'])
->values([
'name' => 'block.block.missing_schema',
'data' => serialize($config),
'collection' => '',
])
->execute();
@@ -7,8 +7,8 @@ package: Testing
dependencies:
- block
# Information added by Drupal.org packaging script on 2016-08-03
version: '8.1.8'
# Information added by Drupal.org packaging script on 2017-08-16
version: '8.3.7'
core: '8.x'
project: 'drupal'
datestamp: 1470233790
datestamp: 1502903957
@@ -47,9 +47,9 @@ class MultipleStaticContext implements ContextProviderInterface {
public function getRuntimeContexts(array $unqualified_context_ids) {
$current_user = $this->userStorage->load($this->account->id());
$context1 = new Context(new ContextDefinition('entity:user', 'User 1'), $current_user);
$context1 = new Context(new ContextDefinition('entity:user', 'User A'), $current_user);
$context2 = new Context(new ContextDefinition('entity:user', 'User 2'), $current_user);
$context2 = new Context(new ContextDefinition('entity:user', 'User B'), $current_user);
$cacheability = new CacheableMetadata();
$cacheability->setCacheContexts(['user']);
@@ -58,8 +58,8 @@ class MultipleStaticContext implements ContextProviderInterface {
$context2->addCacheableDependency($cacheability);
return [
'user1' => $context1,
'user2' => $context2,
'userA' => $context1,
'userB' => $context2,
];
}
@@ -21,9 +21,9 @@ class TestBlockInstantiation extends BlockBase {
* {@inheritdoc}
*/
public function defaultConfiguration() {
return array(
return [
'display_message' => 'no message set',
);
];
}
/**
@@ -37,11 +37,11 @@ class TestBlockInstantiation extends BlockBase {
* {@inheritdoc}
*/
public function blockForm($form, FormStateInterface $form_state) {
$form['display_message'] = array(
$form['display_message'] = [
'#type' => 'textfield',
'#title' => $this->t('Display message'),
'#default_value' => $this->configuration['display_message'],
);
];
return $form;
}
@@ -56,9 +56,9 @@ class TestBlockInstantiation extends BlockBase {
* {@inheritdoc}
*/
public function build() {
return array(
return [
'#children' => $this->configuration['display_message'],
);
];
}
}
@@ -20,7 +20,7 @@ class TestCacheBlock extends BlockBase {
public function build() {
$content = \Drupal::state()->get('block_test.content');
$build = array();
$build = [];
if (!empty($content)) {
$build['#markup'] = $content;
}
@@ -25,11 +25,11 @@ class TestContextAwareBlock extends BlockBase {
public function build() {
/** @var $user \Drupal\user\UserInterface */
$user = $this->getContextValue('user');
return array(
return [
'#prefix' => '<div id="' . $this->getPluginId() . '--username">',
'#suffix' => '</div>',
'#markup' => $user ? $user->getUsername() : 'No context mapping selected.' ,
);
];
}
/**
@@ -18,10 +18,10 @@ class TestHtmlBlock extends BlockBase {
* {@inheritdoc}
*/
public function build() {
return array(
return [
'#attributes' => \Drupal::state()->get('block_test.attributes'),
'#children' => \Drupal::state()->get('block_test.content'),
);
];
}
}
@@ -0,0 +1,27 @@
<?php
namespace Drupal\block_test\Plugin\Block;
use Drupal\Core\Block\BlockBase;
/**
* Provides a block with multiple forms.
*
* @Block(
* id = "test_multiple_forms_block",
* forms = {
* "secondary" = "\Drupal\block_test\PluginForm\EmptyBlockForm"
* },
* admin_label = @Translation("Multiple forms test block")
* )
*/
class TestMultipleFormsBlock extends BlockBase {
/**
* {@inheritdoc}
*/
public function build() {
return [];
}
}
@@ -0,0 +1,41 @@
<?php
namespace Drupal\block_test\Plugin\Block;
use Drupal\Core\Block\BlockBase;
use Drupal\Core\Form\FormStateInterface;
/**
* Provides a test settings validation block.
*
* @Block(
* id = "test_settings_validation",
* admin_label = @Translation("Test settings validation block"),
* )
*/
class TestSettingsValidationBlock extends BlockBase {
/**
* {@inheritdoc}
*/
public function blockForm($form, FormStateInterface $form_state) {
return ['digits' => ['#type' => 'textfield']] + $form;
}
/**
* {@inheritdoc}
*/
public function blockValidate($form, FormStateInterface $form_state) {
if (!ctype_digit($form_state->getValue('digits'))) {
$form_state->setErrorByName('digits', $this->t('Only digits are allowed'));
}
}
/**
* {@inheritdoc}
*/
public function build() {
return ['#markup' => 'foo'];
}
}
@@ -0,0 +1,31 @@
<?php
namespace Drupal\block_test\Plugin\Condition;
use Drupal\Core\Condition\ConditionPluginBase;
/**
* Provides a 'missing_schema' condition.
*
* @Condition(
* id = "missing_schema",
* label = @Translation("Missing schema"),
* )
*/
class MissingSchema extends ConditionPluginBase {
/**
* {@inheritdoc}
*/
public function evaluate() {
return FALSE;
}
/**
* {@inheritdoc}
*/
public function summary() {
return 'Summary';
}
}
@@ -0,0 +1,27 @@
<?php
namespace Drupal\block_test\PluginForm;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Plugin\PluginFormBase;
/**
* Provides a form for a block that is empty.
*/
class EmptyBlockForm extends PluginFormBase {
/**
* {@inheritdoc}
*/
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
return $form;
}
/**
* {@inheritdoc}
*/
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
// Intentionally empty.
}
}
@@ -6,8 +6,8 @@ regions:
content: Content
help: Help
# Information added by Drupal.org packaging script on 2016-08-03
version: '8.1.8'
# Information added by Drupal.org packaging script on 2017-08-16
version: '8.3.7'
core: '8.x'
project: 'drupal'
datestamp: 1470233790
datestamp: 1502903957
@@ -15,8 +15,8 @@ regions_hidden:
- sidebar_first
- sidebar_second
# Information added by Drupal.org packaging script on 2016-08-03
version: '8.1.8'
# Information added by Drupal.org packaging script on 2017-08-16
version: '8.3.7'
core: '8.x'
project: 'drupal'
datestamp: 1470233790
datestamp: 1502903957
@@ -8,8 +8,8 @@ dependencies:
- block
- views
# Information added by Drupal.org packaging script on 2016-08-03
version: '8.1.8'
# Information added by Drupal.org packaging script on 2017-08-16
version: '8.3.7'
core: '8.x'
project: 'drupal'
datestamp: 1470233790
datestamp: 1502903957
@@ -0,0 +1,433 @@
langcode: en
status: true
dependencies:
module:
- node
- user
id: test_view_block_with_context
label: test_view_block_with_context
module: views
description: ''
tag: ''
base_table: node_field_data
base_field: nid
core: 8.x
display:
default:
display_plugin: default
id: default
display_title: Master
position: 0
display_options:
access:
type: perm
options:
perm: 'access content'
cache:
type: tag
options: { }
query:
type: views_query
options:
disable_sql_rewrite: false
distinct: false
replica: false
query_comment: ''
query_tags: { }
exposed_form:
type: basic
options:
submit_button: Apply
reset_button: false
reset_button_label: Reset
exposed_sorts_label: 'Sort by'
expose_sort_order: true
sort_asc_label: Asc
sort_desc_label: Desc
pager:
type: some
options:
items_per_page: 5
offset: 0
style:
type: default
row:
type: fields
fields:
title:
id: title
table: node_field_data
field: title
relationship: none
group_type: group
admin_label: ''
label: ''
exclude: false
alter:
alter_text: true
text: 'Test view row: {{ title }}'
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: 0
word_boundary: true
ellipsis: true
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: false
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
click_sort_column: value
type: string
settings:
link_to_entity: true
group_column: value
group_columns: { }
group_rows: true
delta_limit: 0
delta_offset: 0
delta_reversed: false
delta_first_last: false
multi_type: separator
separator: ', '
field_api_classes: false
plugin_id: field
filters:
status:
value: '1'
table: node_field_data
field: status
plugin_id: boolean
entity_type: node
entity_field: status
id: status
expose:
operator: ''
group: 1
sorts:
created:
id: created
table: node_field_data
field: created
order: DESC
entity_type: node
entity_field: created
plugin_id: date
relationship: none
group_type: group
admin_label: ''
exposed: false
expose:
label: ''
granularity: second
title: test_view_block_with_context
header: { }
footer: { }
empty:
area_text_custom:
id: area_text_custom
table: views
field: area_text_custom
relationship: none
group_type: group
admin_label: ''
empty: true
tokenize: false
content: 'Test view: No results found.'
plugin_id: text_custom
relationships: { }
arguments:
'null':
id: 'null'
table: views
field: 'null'
relationship: none
group_type: group
admin_label: ''
default_action: default
exception:
value: all
title_enable: false
title: All
title_enable: false
title: ''
default_argument_type: fixed
default_argument_options:
argument: foo
default_argument_skip_url: false
summary_options:
base_path: ''
count: true
items_per_page: 25
override: false
summary:
sort_order: asc
number_of_records: 0
format: default_summary
specify_validation: false
validate:
type: none
fail: 'not found'
validate_options: { }
must_not_be: false
plugin_id: 'null'
null_1:
id: null_1
table: views
field: 'null'
relationship: none
group_type: group
admin_label: ''
default_action: ignore
exception:
value: all
title_enable: false
title: All
title_enable: false
title: ''
default_argument_type: fixed
default_argument_options:
argument: ''
default_argument_skip_url: false
summary_options:
base_path: ''
count: true
items_per_page: 25
override: false
summary:
sort_order: asc
number_of_records: 0
format: default_summary
specify_validation: false
validate:
type: none
fail: 'not found'
validate_options: { }
must_not_be: false
plugin_id: 'null'
nid:
id: nid
table: node_field_data
field: nid
relationship: none
group_type: group
admin_label: ''
default_action: empty
exception:
value: all
title_enable: false
title: All
title_enable: false
title: ''
default_argument_type: fixed
default_argument_options:
argument: ''
default_argument_skip_url: false
summary_options:
base_path: ''
count: true
items_per_page: 25
override: false
summary:
sort_order: asc
number_of_records: 0
format: default_summary
specify_validation: true
validate:
type: 'entity:node'
fail: 'not found'
validate_options:
operation: view
multiple: 0
bundles: { }
access: false
break_phrase: false
not: false
entity_type: node
entity_field: nid
plugin_id: node_nid
display_extenders: { }
cache_metadata:
contexts:
- 'languages:language_content'
- 'languages:language_interface'
- url
- 'user.node_grants:view'
- user.permissions
cacheable: false
max-age: -1
tags: { }
block_1:
display_plugin: block
id: block_1
display_title: Block
position: 1
display_options:
display_extenders: { }
cache_metadata:
contexts:
- 'languages:language_content'
- 'languages:language_interface'
- url
- 'user.node_grants:view'
- user.permissions
cacheable: false
max-age: -1
tags: { }
block_2:
display_plugin: block
id: block_2
display_title: 'Block 2'
position: 2
display_options:
display_extenders: { }
arguments:
created:
id: created
table: node_field_data
field: created
relationship: none
group_type: group
admin_label: ''
default_action: ignore
exception:
value: all
title_enable: false
title: All
title_enable: false
title: ''
default_argument_type: fixed
default_argument_options:
argument: ''
default_argument_skip_url: false
summary_options:
base_path: ''
count: true
items_per_page: 25
override: false
summary:
sort_order: asc
number_of_records: 0
format: default_summary
specify_validation: true
validate:
type: numeric
fail: 'not found'
validate_options: { }
entity_type: node
entity_field: created
plugin_id: date
vid:
id: vid
table: node_field_data
field: vid
relationship: none
group_type: group
admin_label: ''
default_action: ignore
exception:
value: all
title_enable: false
title: All
title_enable: false
title: ''
default_argument_type: fixed
default_argument_options:
argument: ''
default_argument_skip_url: false
summary_options:
base_path: ''
count: true
items_per_page: 25
override: false
summary:
sort_order: asc
number_of_records: 0
format: default_summary
specify_validation: false
validate:
type: none
fail: 'not found'
validate_options: { }
break_phrase: false
not: false
entity_type: node
entity_field: vid
plugin_id: numeric
title:
id: title
table: node_field_data
field: title
relationship: none
group_type: group
admin_label: ''
default_action: ignore
exception:
value: all
title_enable: false
title: All
title_enable: false
title: ''
default_argument_type: fixed
default_argument_options:
argument: ''
default_argument_skip_url: false
summary_options:
base_path: ''
count: true
items_per_page: 25
override: false
summary:
sort_order: asc
number_of_records: 0
format: default_summary
specify_validation: false
validate:
type: none
fail: 'not found'
validate_options: { }
glossary: false
limit: 0
case: none
path_case: none
transform_dash: false
break_phrase: false
entity_type: node
entity_field: title
plugin_id: string
defaults:
arguments: false
cache_metadata:
max-age: -1
contexts:
- 'languages:language_content'
- 'languages:language_interface'
- url
- 'user.node_grants:view'
- user.permissions
tags: { }
@@ -0,0 +1,215 @@
<?php
namespace Drupal\Tests\block\Functional;
use Drupal\Core\Cache\Cache;
use Drupal\Tests\BrowserTestBase;
/**
* Tests block caching.
*
* @group block
*/
class BlockCacheTest extends BrowserTestBase {
/**
* Modules to install.
*
* @var array
*/
public static $modules = ['block', 'block_test', 'test_page_test'];
/**
* A user with permission to create and edit books and to administer blocks.
*
* @var object
*/
protected $adminUser;
/**
* An authenticated user to test block caching.
*
* @var object
*/
protected $normalUser;
/**
* Another authenticated user to test block caching.
*
* @var object
*/
protected $normalUserAlt;
/**
* The block used by this test.
*
* @var \Drupal\block\BlockInterface
*/
protected $block;
protected function setUp() {
parent::setUp();
// Create an admin user, log in and enable test blocks.
$this->adminUser = $this->drupalCreateUser(['administer blocks', 'access administration pages']);
$this->drupalLogin($this->adminUser);
// Create additional users to test caching modes.
$this->normalUser = $this->drupalCreateUser();
$this->normalUserAlt = $this->drupalCreateUser();
// Sync the roles, since drupalCreateUser() creates separate roles for
// the same permission sets.
$this->normalUserAlt->roles = $this->normalUser->getRoles();
$this->normalUserAlt->save();
// Enable our test block.
$this->block = $this->drupalPlaceBlock('test_cache');
}
/**
* Test "user.roles" cache context.
*/
public function testCachePerRole() {
\Drupal::state()->set('block_test.cache_contexts', ['user.roles']);
// Enable our test block. Set some content for it to display.
$current_content = $this->randomMachineName();
\Drupal::state()->set('block_test.content', $current_content);
$this->drupalLogin($this->normalUser);
$this->drupalGet('');
$this->assertText($current_content, 'Block content displays.');
// Change the content, but the cached copy should still be served.
$old_content = $current_content;
$current_content = $this->randomMachineName();
\Drupal::state()->set('block_test.content', $current_content);
$this->drupalGet('');
$this->assertText($old_content, 'Block is served from the cache.');
// Clear the cache and verify that the stale data is no longer there.
Cache::invalidateTags(['block_view']);
$this->drupalGet('');
$this->assertNoText($old_content, 'Block cache clear removes stale cache data.');
$this->assertText($current_content, 'Fresh block content is displayed after clearing the cache.');
// Test whether the cached data is served for the correct users.
$old_content = $current_content;
$current_content = $this->randomMachineName();
\Drupal::state()->set('block_test.content', $current_content);
$this->drupalLogout();
$this->drupalGet('');
$this->assertNoText($old_content, 'Anonymous user does not see content cached per-role for normal user.');
$this->drupalLogin($this->normalUserAlt);
$this->drupalGet('');
$this->assertText($old_content, 'User with the same roles sees per-role cached content.');
$this->drupalLogin($this->adminUser);
$this->drupalGet('');
$this->assertNoText($old_content, 'Admin user does not see content cached per-role for normal user.');
$this->drupalLogin($this->normalUser);
$this->drupalGet('');
$this->assertText($old_content, 'Block is served from the per-role cache.');
}
/**
* Test a cacheable block without any additional cache context.
*/
public function testCachePermissions() {
// user.permissions is a required context, so a user with different
// permissions will see a different version of the block.
\Drupal::state()->set('block_test.cache_contexts', []);
$current_content = $this->randomMachineName();
\Drupal::state()->set('block_test.content', $current_content);
$this->drupalGet('');
$this->assertText($current_content, 'Block content displays.');
$old_content = $current_content;
$current_content = $this->randomMachineName();
\Drupal::state()->set('block_test.content', $current_content);
$this->drupalGet('user');
$this->assertText($old_content, 'Block content served from cache.');
$this->drupalLogout();
$this->drupalGet('user');
$this->assertText($current_content, 'Block content not served from cache.');
}
/**
* Test non-cacheable block.
*/
public function testNoCache() {
\Drupal::state()->set('block_test.cache_max_age', 0);
$current_content = $this->randomMachineName();
\Drupal::state()->set('block_test.content', $current_content);
// If max_age = 0 has no effect, the next request would be cached.
$this->drupalGet('');
$this->assertText($current_content, 'Block content displays.');
// A cached copy should not be served.
$current_content = $this->randomMachineName();
\Drupal::state()->set('block_test.content', $current_content);
$this->drupalGet('');
$this->assertText($current_content, 'Maximum age of zero prevents blocks from being cached.');
}
/**
* Test "user" cache context.
*/
public function testCachePerUser() {
\Drupal::state()->set('block_test.cache_contexts', ['user']);
$current_content = $this->randomMachineName();
\Drupal::state()->set('block_test.content', $current_content);
$this->drupalLogin($this->normalUser);
$this->drupalGet('');
$this->assertText($current_content, 'Block content displays.');
$old_content = $current_content;
$current_content = $this->randomMachineName();
\Drupal::state()->set('block_test.content', $current_content);
$this->drupalGet('');
$this->assertText($old_content, 'Block is served from per-user cache.');
$this->drupalLogin($this->normalUserAlt);
$this->drupalGet('');
$this->assertText($current_content, 'Per-user block cache is not served for other users.');
$this->drupalLogin($this->normalUser);
$this->drupalGet('');
$this->assertText($old_content, 'Per-user block cache is persistent.');
}
/**
* Test "url" cache context.
*/
public function testCachePerPage() {
\Drupal::state()->set('block_test.cache_contexts', ['url']);
$current_content = $this->randomMachineName();
\Drupal::state()->set('block_test.content', $current_content);
$this->drupalGet('test-page');
$this->assertText($current_content, 'Block content displays on the test page.');
$old_content = $current_content;
$current_content = $this->randomMachineName();
\Drupal::state()->set('block_test.content', $current_content);
$this->drupalGet('user');
$this->assertResponse(200);
$this->assertNoText($old_content, 'Block content cached for the test page does not show up for the user page.');
$this->drupalGet('test-page');
$this->assertResponse(200);
$this->assertText($old_content, 'Block content cached for the test page.');
}
}
@@ -0,0 +1,73 @@
<?php
namespace Drupal\Tests\block\Functional;
use Drupal\Tests\BrowserTestBase;
/**
* Tests that a newly installed theme does not inherit blocks to its hidden
* regions.
*
* @group block
*/
class BlockHiddenRegionTest extends BrowserTestBase {
/**
* An administrative user to configure the test environment.
*/
protected $adminUser;
/**
* Modules to install.
*
* @var array
*/
public static $modules = ['block', 'block_test', 'search'];
protected function setUp() {
parent::setUp();
// Create administrative user.
$this->adminUser = $this->drupalCreateUser([
'administer blocks',
'administer themes',
'search content',
]
);
$this->drupalLogin($this->adminUser);
$this->drupalPlaceBlock('search_form_block');
$this->drupalPlaceBlock('local_tasks_block');
}
/**
* Tests that hidden regions do not inherit blocks when a theme is installed.
*/
public function testBlockNotInHiddenRegion() {
// Ensure that the search form block is displayed.
$this->drupalGet('');
$this->assertText('Search', 'Block was displayed on the front page.');
// Install "block_test_theme" and set it as the default theme.
$theme = 'block_test_theme';
// We need to install a non-hidden theme so that there is more than one
// local task.
\Drupal::service('theme_handler')->install([$theme, 'stark']);
$this->config('system.theme')
->set('default', $theme)
->save();
// Installing a theme will cause the kernel terminate event to rebuild the
// router. Simulate that here.
\Drupal::service('router.builder')->rebuildIfNeeded();
// Ensure that "block_test_theme" is set as the default theme.
$this->drupalGet('admin/structure/block');
$this->assertText('Block test theme(' . t('active tab') . ')', 'Default local task on blocks admin page is the block test theme.');
// Ensure that the search form block is displayed.
$this->drupalGet('');
$this->assertText('Search', 'Block was displayed on the front page.');
}
}
@@ -0,0 +1,51 @@
<?php
namespace Drupal\Tests\block\Functional;
use Drupal\Component\Utility\Unicode;
use Drupal\Tests\BrowserTestBase;
/**
* Tests for Block module regarding hook_entity_operations_alter().
*
* @group block
*/
class BlockHookOperationTest extends BrowserTestBase {
/**
* Modules to install.
*
* @var array
*/
public static $modules = ['block', 'entity_test'];
protected function setUp() {
parent::setUp();
$permissions = [
'administer blocks',
];
// Create and log in user.
$admin_user = $this->drupalCreateUser($permissions);
$this->drupalLogin($admin_user);
}
/**
* Tests the block list to see if the test_operation link is added.
*/
public function testBlockOperationAlter() {
// Add a test block, any block will do.
// Set the machine name so the test_operation link can be built later.
$block_id = Unicode::strtolower($this->randomMachineName(16));
$this->drupalPlaceBlock('system_powered_by_block', ['id' => $block_id]);
// Get the Block listing.
$this->drupalGet('admin/structure/block');
$test_operation_link = 'admin/structure/block/manage/' . $block_id . '/test_operation';
// Test if the test_operation link is on the page.
$this->assertLinkByHref($test_operation_link);
}
}
@@ -0,0 +1,50 @@
<?php
namespace Drupal\Tests\block\Functional;
use Drupal\Tests\BrowserTestBase;
/**
* Tests block HTML ID validity.
*
* @group block
*/
class BlockHtmlTest extends BrowserTestBase {
/**
* Modules to install.
*
* @var array
*/
public static $modules = ['block', 'block_test'];
protected function setUp() {
parent::setUp();
$this->drupalLogin($this->rootUser);
// Enable the test_html block, to test HTML ID and attributes.
\Drupal::state()->set('block_test.attributes', ['data-custom-attribute' => 'foo']);
\Drupal::state()->set('block_test.content', $this->randomMachineName());
$this->drupalPlaceBlock('test_html', ['id' => 'test_html_block']);
// Enable a menu block, to test more complicated HTML.
$this->drupalPlaceBlock('system_menu_block:admin');
}
/**
* Tests for valid HTML for a block.
*/
public function testHtml() {
$this->drupalGet('');
// Ensure that a block's ID is converted to an HTML valid ID, and that
// block-specific attributes are added to the same DOM element.
$this->assertFieldByXPath('//div[@id="block-test-html-block" and @data-custom-attribute="foo"]', NULL, 'HTML ID and attributes for test block are valid and on the same DOM element.');
// Ensure expected markup for a menu block.
$elements = $this->xpath('//nav[contains(@class, :nav-class)]/ul[contains(@class, :ul-class)]/li', [':nav-class' => 'block-menu', ':ul-class' => 'menu']);
$this->assertTrue(!empty($elements), 'The proper block markup was found.');
}
}
@@ -0,0 +1,62 @@
<?php
namespace Drupal\Tests\block\Functional;
use Drupal\Tests\BrowserTestBase;
use Drupal\block\Entity\Block;
/**
* Tests that an active block assigned to a non-existing region triggers the
* warning message and is disabled.
*
* @group block
*/
class BlockInvalidRegionTest extends BrowserTestBase {
/**
* Modules to install.
*
* @var array
*/
public static $modules = ['block', 'block_test'];
protected function setUp() {
parent::setUp();
// Create an admin user.
$admin_user = $this->drupalCreateUser([
'administer site configuration',
'access administration pages',
'administer blocks',
]);
$this->drupalLogin($admin_user);
}
/**
* Tests that blocks assigned to invalid regions work correctly.
*/
public function testBlockInInvalidRegion() {
// Enable a test block and place it in an invalid region.
$block = $this->drupalPlaceBlock('test_html');
\Drupal::configFactory()->getEditable('block.block.' . $block->id())->set('region', 'invalid_region')->save();
$block = Block::load($block->id());
$warning_message = t('The block %info was assigned to the invalid region %region and has been disabled.', ['%info' => $block->id(), '%region' => 'invalid_region']);
// Clearing the cache should disable the test block placed in the invalid region.
$this->drupalPostForm('admin/config/development/performance', [], 'Clear all caches');
$this->assertRaw($warning_message, 'Enabled block was in the invalid region and has been disabled.');
// Clear the cache to check if the warning message is not triggered.
$this->drupalPostForm('admin/config/development/performance', [], 'Clear all caches');
$this->assertNoRaw($warning_message, 'Disabled block in the invalid region will not trigger the warning.');
// Place disabled test block in the invalid region of the default theme.
\Drupal::configFactory()->getEditable('block.block.' . $block->id())->set('region', 'invalid_region')->save();
$block = Block::load($block->id());
// Clear the cache to check if the warning message is not triggered.
$this->drupalPostForm('admin/config/development/performance', [], 'Clear all caches');
$this->assertNoRaw($warning_message, 'Disabled block in the invalid region will not trigger the warning.');
}
}
@@ -0,0 +1,185 @@
<?php
namespace Drupal\Tests\block\Functional;
use Drupal\Tests\BrowserTestBase;
use Drupal\block\Entity\Block;
/**
* Tests if a block can be configured to be only visible on a particular
* language.
*
* @group block
*/
class BlockLanguageTest extends BrowserTestBase {
/**
* An administrative user to configure the test environment.
*/
protected $adminUser;
/**
* Modules to install.
*
* @var array
*/
public static $modules = ['language', 'block', 'content_translation'];
protected function setUp() {
parent::setUp();
// Create a new user, allow him to manage the blocks and the languages.
$this->adminUser = $this->drupalCreateUser(['administer blocks', 'administer languages']);
$this->drupalLogin($this->adminUser);
// Add predefined language.
$edit = [
'predefined_langcode' => 'fr',
];
$this->drupalPostForm('admin/config/regional/language/add', $edit, t('Add language'));
$this->assertText('French', 'Language added successfully.');
}
/**
* Tests the visibility settings for the blocks based on language.
*/
public function testLanguageBlockVisibility() {
// Check if the visibility setting is available.
$default_theme = $this->config('system.theme')->get('default');
$this->drupalGet('admin/structure/block/add/system_powered_by_block' . '/' . $default_theme);
$this->assertField('visibility[language][langcodes][en]', 'Language visibility field is visible.');
$this->assertNoField('visibility[language][context_mapping][language]', 'Language type field is not visible.');
// Enable a standard block and set the visibility setting for one language.
$edit = [
'visibility[language][langcodes][en]' => TRUE,
'id' => strtolower($this->randomMachineName(8)),
'region' => 'sidebar_first',
];
$this->drupalPostForm('admin/structure/block/add/system_powered_by_block' . '/' . $default_theme, $edit, t('Save block'));
// Change the default language.
$edit = [
'site_default_language' => 'fr',
];
$this->drupalPostForm('admin/config/regional/language', $edit, t('Save configuration'));
// Check that a page has a block.
$this->drupalGet('en');
$this->assertText('Powered by Drupal', 'The body of the custom block appears on the page.');
// Check that a page doesn't has a block for the current language anymore.
$this->drupalGet('fr');
$this->assertNoText('Powered by Drupal', 'The body of the custom block does not appear on the page.');
}
/**
* Tests if the visibility settings are removed if the language is deleted.
*/
public function testLanguageBlockVisibilityLanguageDelete() {
// Enable a standard block and set the visibility setting for one language.
$edit = [
'visibility' => [
'language' => [
'langcodes' => [
'fr' => 'fr',
],
'context_mapping' => ['language' => '@language.current_language_context:language_interface'],
],
],
];
$block = $this->drupalPlaceBlock('system_powered_by_block', $edit);
// Check that we have the language in config after saving the setting.
$visibility = $block->getVisibility();
$this->assertEqual('fr', $visibility['language']['langcodes']['fr'], 'Language is set in the block configuration.');
// Delete the language.
$this->drupalPostForm('admin/config/regional/language/delete/fr', [], t('Delete'));
// Check that the language is no longer stored in the configuration after
// it is deleted.
$block = Block::load($block->id());
$visibility = $block->getVisibility();
$this->assertTrue(empty($visibility['language']['langcodes']['fr']), 'Language is no longer not set in the block configuration after deleting the block.');
// Ensure that the block visibility for language is gone from the UI.
$this->drupalGet('admin/structure/block');
$this->clickLink('Configure');
$elements = $this->xpath('//details[@id="edit-visibility-language"]');
$this->assertTrue(empty($elements));
}
/**
* Tests block language visibility with different language types.
*/
public function testMultipleLanguageTypes() {
// Customize content language detection to be different from interface
// language detection.
$edit = [
// Interface language detection: only using session.
'language_interface[enabled][language-url]' => FALSE,
'language_interface[enabled][language-session]' => TRUE,
// Content language detection: only using URL.
'language_content[configurable]' => TRUE,
'language_content[enabled][language-url]' => TRUE,
'language_content[enabled][language-interface]' => FALSE,
];
$this->drupalPostForm('admin/config/regional/language/detection', $edit, t('Save settings'));
// Check if the visibility setting is available with a type setting.
$default_theme = $this->config('system.theme')->get('default');
$this->drupalGet('admin/structure/block/add/system_powered_by_block' . '/' . $default_theme);
$this->assertField('visibility[language][langcodes][en]', 'Language visibility field is visible.');
$this->assertField('visibility[language][context_mapping][language]', 'Language type field is visible.');
// Enable a standard block and set visibility to French only.
$block_id = strtolower($this->randomMachineName(8));
$edit = [
'visibility[language][context_mapping][language]' => '@language.current_language_context:language_interface',
'visibility[language][langcodes][fr]' => TRUE,
'id' => $block_id,
'region' => 'sidebar_first',
];
$this->drupalPostForm('admin/structure/block/add/system_powered_by_block' . '/' . $default_theme, $edit, t('Save block'));
// Interface negotiation depends on request arguments.
$this->drupalGet('node', ['query' => ['language' => 'en']]);
$this->assertNoText('Powered by Drupal', 'The body of the block does not appear on the page.');
$this->drupalGet('node', ['query' => ['language' => 'fr']]);
$this->assertText('Powered by Drupal', 'The body of the block appears on the page.');
// Log in again in order to clear the interface language stored in the
// session.
$this->drupalLogout();
$this->drupalLogin($this->adminUser);
// Content language does not depend on session/request arguments.
// It will fall back on English (site default) and not display the block.
$this->drupalGet('en');
$this->assertNoText('Powered by Drupal', 'The body of the block does not appear on the page.');
$this->drupalGet('fr');
$this->assertNoText('Powered by Drupal', 'The body of the block does not appear on the page.');
// Change visibility to now depend on content language for this block.
$edit = [
'visibility[language][context_mapping][language]' => '@language.current_language_context:language_content'
];
$this->drupalPostForm('admin/structure/block/manage/' . $block_id, $edit, t('Save block'));
// Content language negotiation does not depend on request arguments.
// It will fall back on English (site default) and not display the block.
$this->drupalGet('node', ['query' => ['language' => 'en']]);
$this->assertNoText('Powered by Drupal', 'The body of the block does not appear on the page.');
$this->drupalGet('node', ['query' => ['language' => 'fr']]);
$this->assertNoText('Powered by Drupal', 'The body of the block does not appear on the page.');
// Content language negotiation depends on path prefix.
$this->drupalGet('en');
$this->assertNoText('Powered by Drupal', 'The body of the block does not appear on the page.');
$this->drupalGet('fr');
$this->assertText('Powered by Drupal', 'The body of the block appears on the page.');
}
}
@@ -0,0 +1,48 @@
<?php
namespace Drupal\Tests\block\Functional;
use Drupal\block\Entity\Block;
use Drupal\Tests\BrowserTestBase;
/**
* Tests the block_theme_suggestions_block() function.
*
* @group block
*/
class BlockTemplateSuggestionsTest extends BrowserTestBase {
/**
* Modules to install.
*
* @var array
*/
public static $modules = ['block'];
/**
* Tests template suggestions from block_theme_suggestions_block().
*/
public function testBlockThemeHookSuggestions() {
// Define a block with a derivative to be preprocessed, which includes both
// an underscore (not transformed) and a hyphen (transformed to underscore),
// and generates possibilities for each level of derivative.
// @todo Clarify this comment.
$block = Block::create([
'plugin' => 'system_menu_block:admin',
'region' => 'footer',
'id' => 'machinename',
]);
$variables = [];
$plugin = $block->getPlugin();
$variables['elements']['#configuration'] = $plugin->getConfiguration();
$variables['elements']['#plugin_id'] = $plugin->getPluginId();
$variables['elements']['#id'] = $block->id();
$variables['elements']['#base_plugin_id'] = $plugin->getBaseId();
$variables['elements']['#derivative_plugin_id'] = $plugin->getDerivativeId();
$variables['elements']['content'] = [];
$suggestions = block_theme_suggestions_block($variables);
$this->assertEqual($suggestions, ['block__system', 'block__system_menu_block', 'block__system_menu_block__admin', 'block__machinename']);
}
}
@@ -0,0 +1,76 @@
<?php
namespace Drupal\Tests\block\Functional;
use Drupal\Tests\BrowserTestBase;
/**
* Tests that the new default theme gets blocks.
*
* @group block
*/
class NewDefaultThemeBlocksTest extends BrowserTestBase {
/**
* Modules to install.
*
* @var array
*/
public static $modules = ['block'];
/**
* Check the enabled Bartik blocks are correctly copied over.
*/
public function testNewDefaultThemeBlocks() {
$default_theme = $this->config('system.theme')->get('default');
// Add two instances of the user login block.
$this->drupalPlaceBlock('user_login_block', [
'id' => $default_theme . '_' . strtolower($this->randomMachineName(8)),
]);
$this->drupalPlaceBlock('user_login_block', [
'id' => $default_theme . '_' . strtolower($this->randomMachineName(8)),
]);
// Add an instance of a different block.
$this->drupalPlaceBlock('system_powered_by_block', [
'id' => $default_theme . '_' . strtolower($this->randomMachineName(8)),
]);
// Install a different theme.
$new_theme = 'bartik';
$this->assertFalse($new_theme == $default_theme, 'The new theme is different from the previous default theme.');
\Drupal::service('theme_handler')->install([$new_theme]);
$this->config('system.theme')
->set('default', $new_theme)
->save();
/** @var \Drupal\Core\Entity\EntityStorageInterface $block_storage */
$block_storage = $this->container->get('entity_type.manager')->getStorage('block');
// Ensure that the new theme has all the blocks as the previous default.
$default_block_names = $block_storage->getQuery()
->condition('theme', $default_theme)
->execute();
$new_blocks = $block_storage->getQuery()
->condition('theme', $new_theme)
->execute();
$this->assertTrue(count($default_block_names) == count($new_blocks), 'The new default theme has the same number of blocks as the previous theme.');
foreach ($default_block_names as $default_block_name) {
// Remove the matching block from the list of blocks in the new theme.
// E.g., if the old theme has block.block.stark_admin,
// unset block.block.bartik_admin.
unset($new_blocks[str_replace($default_theme . '_', $new_theme . '_', $default_block_name)]);
}
$this->assertTrue(empty($new_blocks), 'The new theme has exactly the same blocks as the previous default theme.');
// Install a hidden base theme and ensure blocks are not copied.
$base_theme = 'test_basetheme';
\Drupal::service('theme_handler')->install([$base_theme]);
$new_blocks = $block_storage->getQuery()
->condition('theme', $base_theme)
->execute();
$this->assertTrue(empty($new_blocks), 'Installing a hidden base theme does not copy blocks from the default theme.');
}
}
@@ -3,7 +3,7 @@
namespace Drupal\Tests\block\Kernel;
use Drupal\block\Entity\Block;
use Drupal\config\Tests\SchemaCheckTestTrait;
use Drupal\Tests\SchemaCheckTestTrait;
use Drupal\KernelTests\KernelTestBase;
/**
@@ -18,7 +18,7 @@ class BlockConfigSchemaTest extends KernelTestBase {
/**
* {@inheritdoc}
*/
public static $modules = array(
public static $modules = [
'block',
'aggregator',
'book',
@@ -32,7 +32,7 @@ class BlockConfigSchemaTest extends KernelTestBase {
'taxonomy',
'user',
'text',
);
];
/**
* The typed config manager.
@@ -59,7 +59,7 @@ class BlockConfigSchemaTest extends KernelTestBase {
$this->installEntitySchema('block_content');
$this->installEntitySchema('taxonomy_term');
$this->installEntitySchema('node');
$this->installSchema('book', array('book'));
$this->installSchema('book', ['book']);
}
/**
@@ -68,20 +68,20 @@ class BlockConfigSchemaTest extends KernelTestBase {
public function testBlockConfigSchema() {
foreach ($this->blockManager->getDefinitions() as $block_id => $definition) {
$id = strtolower($this->randomMachineName());
$block = Block::create(array(
$block = Block::create([
'id' => $id,
'theme' => 'classy',
'weight' => 00,
'status' => TRUE,
'region' => 'content',
'plugin' => $block_id,
'settings' => array(
'settings' => [
'label' => $this->randomMachineName(),
'provider' => 'system',
'label_display' => FALSE,
),
'visibility' => array(),
));
],
'visibility' => [],
]);
$block->save();
$config = $this->config("block.block.$id");
@@ -2,8 +2,8 @@
namespace Drupal\Tests\block\Kernel;
use Drupal\Core\Block\BlockPluginInterface;
use Drupal\Core\Form\FormState;
use Drupal\block\BlockInterface;
use Drupal\KernelTests\KernelTestBase;
/**
@@ -13,7 +13,7 @@ use Drupal\KernelTests\KernelTestBase;
*/
class BlockInterfaceTest extends KernelTestBase {
public static $modules = array('system', 'block', 'block_test', 'user');
public static $modules = ['system', 'block', 'block_test', 'user'];
/**
* Test configuration and subsequent form() and build() method calls.
@@ -31,16 +31,16 @@ class BlockInterfaceTest extends KernelTestBase {
*/
public function testBlockInterface() {
$manager = $this->container->get('plugin.manager.block');
$configuration = array(
$configuration = [
'label' => 'Custom Display Message',
);
$expected_configuration = array(
];
$expected_configuration = [
'id' => 'test_block_instantiation',
'label' => 'Custom Display Message',
'provider' => 'block_test',
'label_display' => BlockInterface::BLOCK_LABEL_VISIBLE,
'label_display' => BlockPluginInterface::BLOCK_LABEL_VISIBLE,
'display_message' => 'no message set',
);
];
// Initial configuration of the block at construction time.
/** @var $display_block \Drupal\Core\Block\BlockPluginInterface */
$display_block = $manager->createInstance('test_block_instantiation', $configuration);
@@ -52,46 +52,46 @@ class BlockInterfaceTest extends KernelTestBase {
$this->assertIdentical($display_block->getConfiguration(), $expected_configuration, 'The block configuration was updated correctly.');
$definition = $display_block->getPluginDefinition();
$expected_form = array(
'provider' => array(
$expected_form = [
'provider' => [
'#type' => 'value',
'#value' => 'block_test',
),
'admin_label' => array(
],
'admin_label' => [
'#type' => 'item',
'#title' => t('Block description'),
'#plain_text' => $definition['admin_label'],
),
'label' => array(
],
'label' => [
'#type' => 'textfield',
'#title' => 'Title',
'#maxlength' => 255,
'#default_value' => 'Custom Display Message',
'#required' => TRUE,
),
'label_display' => array(
],
'label_display' => [
'#type' => 'checkbox',
'#title' => 'Display title',
'#default_value' => TRUE,
'#return_value' => 'visible',
),
'context_mapping' => array(),
'display_message' => array(
],
'context_mapping' => [],
'display_message' => [
'#type' => 'textfield',
'#title' => t('Display message'),
'#default_value' => 'My custom display message.',
),
);
],
];
$form_state = new FormState();
// Ensure there are no form elements that do not belong to the plugin.
$actual_form = $display_block->buildConfigurationForm(array(), $form_state);
$actual_form = $display_block->buildConfigurationForm([], $form_state);
// Remove the visibility sections, as that just tests condition plugins.
unset($actual_form['visibility'], $actual_form['visibility_tabs']);
$this->assertIdentical($this->castSafeStrings($actual_form), $this->castSafeStrings($expected_form), 'Only the expected form elements were present.');
$expected_build = array(
$expected_build = [
'#children' => 'My custom display message.',
);
];
// Ensure the build array is proper.
$this->assertIdentical($display_block->build(), $expected_build, 'The plugin returned the appropriate build array.');
@@ -0,0 +1,103 @@
<?php
namespace Drupal\Tests\block\Kernel;
use Drupal\block\Entity\Block;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\KernelTests\KernelTestBase;
use Drupal\simpletest\BlockCreationTrait;
/**
* Tests block_rebuild().
*
* @group block
*/
class BlockRebuildTest extends KernelTestBase {
use BlockCreationTrait;
/**
* {@inheritdoc}
*/
public static $modules = ['block', 'system'];
/**
* {@inheritdoc}
*/
protected function setUp() {
parent::setUp();
$this->container->get('theme_installer')->install(['stable', 'classy']);
$this->container->get('config.factory')->getEditable('system.theme')->set('default', 'classy')->save();
}
/**
* {@inheritdoc}
*/
public static function setUpBeforeClass() {
parent::setUpBeforeClass();
// @todo Once block_rebuild() is refactored to auto-loadable code, remove
// this require statement.
require_once static::getDrupalRoot() . '/core/modules/block/block.module';
}
/**
* @covers ::block_rebuild
*/
public function testRebuildNoBlocks() {
block_rebuild();
$messages = drupal_get_messages();
$this->assertEquals([], $messages);
}
/**
* @covers ::block_rebuild
*/
public function testRebuildNoInvalidBlocks() {
$this->placeBlock('system_powered_by_block', ['region' => 'content']);
block_rebuild();
$messages = drupal_get_messages();
$this->assertEquals([], $messages);
}
/**
* @covers ::block_rebuild
*/
public function testRebuildInvalidBlocks() {
$this->placeBlock('system_powered_by_block', ['region' => 'content']);
$block1 = $this->placeBlock('system_powered_by_block');
$block2 = $this->placeBlock('system_powered_by_block');
$block2->disable()->save();
// Use the config API directly to bypass Block::preSave().
\Drupal::configFactory()->getEditable('block.block.' . $block1->id())->set('region', 'INVALID')->save();
\Drupal::configFactory()->getEditable('block.block.' . $block2->id())->set('region', 'INVALID')->save();
// Reload block entities.
$block1 = Block::load($block1->id());
$block2 = Block::load($block2->id());
$this->assertSame('INVALID', $block1->getRegion());
$this->assertTrue($block1->status());
$this->assertSame('INVALID', $block2->getRegion());
$this->assertFalse($block2->status());
block_rebuild();
// Reload block entities.
$block1 = Block::load($block1->id());
$block2 = Block::load($block2->id());
$messages = drupal_get_messages();
$expected = ['warning' => [new TranslatableMarkup('The block %info was assigned to the invalid region %region and has been disabled.', ['%info' => $block1->id(), '%region' => 'INVALID'])]];
$this->assertEquals($expected, $messages);
$default_region = system_default_region('classy');
$this->assertSame($default_region, $block1->getRegion());
$this->assertFalse($block1->status());
$this->assertSame($default_region, $block2->getRegion());
$this->assertFalse($block2->status());
}
}
@@ -2,12 +2,12 @@
namespace Drupal\Tests\block\Kernel;
use Drupal\Core\Block\BlockPluginInterface;
use Drupal\Core\Config\Entity\ConfigEntityStorage;
use Drupal\KernelTests\KernelTestBase;
use Drupal\block_test\Plugin\Block\TestHtmlBlock;
use Drupal\Component\Plugin\Exception\PluginException;
use Drupal\block\Entity\Block;
use Drupal\block\BlockInterface;
/**
* Tests the storage of blocks.
@@ -21,7 +21,7 @@ class BlockStorageUnitTest extends KernelTestBase {
*
* @var array
*/
public static $modules = array('block', 'block_test', 'system');
public static $modules = ['block', 'block_test', 'system'];
/**
* The block storage.
@@ -34,6 +34,8 @@ class BlockStorageUnitTest extends KernelTestBase {
parent::setUp();
$this->controller = $this->container->get('entity_type.manager')->getStorage('block');
$this->container->get('theme_installer')->install(['stark']);
}
/**
@@ -54,7 +56,7 @@ class BlockStorageUnitTest extends KernelTestBase {
protected function createTests() {
// Attempt to create a block without a plugin.
try {
$entity = $this->controller->create(array());
$entity = $this->controller->create([]);
$entity->getPlugin();
$this->fail('A block without a plugin was created with no exception thrown.');
}
@@ -63,11 +65,12 @@ class BlockStorageUnitTest extends KernelTestBase {
}
// Create a block with only required values.
$entity = $this->controller->create(array(
$entity = $this->controller->create([
'id' => 'test_block',
'theme' => 'stark',
'region' => 'content',
'plugin' => 'test_html',
));
]);
$entity->save();
$this->assertTrue($entity instanceof Block, 'The newly created entity is a Block.');
@@ -78,24 +81,24 @@ class BlockStorageUnitTest extends KernelTestBase {
unset($actual_properties['uuid']);
// Ensure that default values are filled in.
$expected_properties = array(
$expected_properties = [
'langcode' => \Drupal::languageManager()->getDefaultLanguage()->getId(),
'status' => TRUE,
'dependencies' => array('module' => array('block_test'), 'theme' => array('stark')),
'dependencies' => ['module' => ['block_test'], 'theme' => ['stark']],
'id' => 'test_block',
'theme' => 'stark',
'region' => '-1',
'region' => 'content',
'weight' => NULL,
'provider' => NULL,
'plugin' => 'test_html',
'settings' => array(
'settings' => [
'id' => 'test_html',
'label' => '',
'provider' => 'block_test',
'label_display' => BlockInterface::BLOCK_LABEL_VISIBLE,
),
'visibility' => array(),
);
'label_display' => BlockPluginInterface::BLOCK_LABEL_VISIBLE,
],
'visibility' => [],
];
$this->assertIdentical($actual_properties, $expected_properties);
@@ -111,7 +114,7 @@ class BlockStorageUnitTest extends KernelTestBase {
$this->assertTrue($entity instanceof Block, 'The loaded entity is a Block.');
// Verify several properties of the block.
$this->assertEqual($entity->getRegion(), '-1');
$this->assertSame('content', $entity->getRegion());
$this->assertTrue($entity->status());
$this->assertEqual($entity->getTheme(), 'stark');
$this->assertTrue($entity->uuid());
@@ -145,7 +148,7 @@ class BlockStorageUnitTest extends KernelTestBase {
$this->assertTrue(empty($entities), 'There are no blocks initially.');
// Install the block_test.module, so that its default config is installed.
$this->installConfig(array('block_test'));
$this->installConfig(['block_test']);
$entities = $this->controller->loadMultiple();
$entity = reset($entities);
@@ -20,7 +20,7 @@ class BlockViewBuilderTest extends KernelTestBase {
*
* @var array
*/
public static $modules = array('block', 'block_test', 'system', 'user');
public static $modules = ['block', 'block_test', 'system', 'user'];
/**
* The block being tested.
@@ -56,11 +56,11 @@ class BlockViewBuilderTest extends KernelTestBase {
\Drupal::state()->set('block_test.content', 'Llamas &gt; unicorns!');
// Create a block with only required values.
$this->block = $this->controller->create(array(
$this->block = $this->controller->create([
'id' => 'test_block',
'theme' => 'stark',
'plugin' => 'test_cache',
));
]);
$this->block->save();
$this->container->get('cache.render')->deleteAll();
@@ -74,17 +74,17 @@ class BlockViewBuilderTest extends KernelTestBase {
public function testBasicRendering() {
\Drupal::state()->set('block_test.content', '');
$entity = $this->controller->create(array(
$entity = $this->controller->create([
'id' => 'test_block1',
'theme' => 'stark',
'plugin' => 'test_html',
));
]);
$entity->save();
// Test the rendering of a block.
$entity = Block::load('test_block1');
$output = entity_view($entity, 'block');
$expected = array();
$expected = [];
$expected[] = '<div id="block-test-block1">';
$expected[] = ' ';
$expected[] = ' ';
@@ -98,17 +98,17 @@ class BlockViewBuilderTest extends KernelTestBase {
Html::resetSeenIds();
// Test the rendering of a block with a given title.
$entity = $this->controller->create(array(
$entity = $this->controller->create([
'id' => 'test_block2',
'theme' => 'stark',
'plugin' => 'test_html',
'settings' => array(
'settings' => [
'label' => 'Powered by Bananas',
),
));
],
]);
$entity->save();
$output = entity_view($entity, 'block');
$expected = array();
$expected = [];
$expected[] = '<div id="block-test-block2">';
$expected[] = ' ';
$expected[] = ' <h2>Powered by Bananas</h2>';
@@ -128,11 +128,11 @@ class BlockViewBuilderTest extends KernelTestBase {
$this->verifyRenderCacheHandling();
// Create an empty block.
$this->block = $this->controller->create(array(
$this->block = $this->controller->create([
'id' => 'test_block',
'theme' => 'stark',
'plugin' => 'test_cache',
));
]);
$this->block->save();
\Drupal::state()->set('block_test.content', NULL);
@@ -21,6 +21,12 @@ class MigrateBlockTest extends MigrateDrupal6TestBase {
'comment',
'menu_ui',
'block_content',
'taxonomy',
'node',
'aggregator',
'book',
'forum',
'statistics',
];
/**
@@ -28,27 +34,27 @@ class MigrateBlockTest extends MigrateDrupal6TestBase {
*/
protected function setUp() {
parent::setUp();
// Install the themes used for this test.
$this->container->get('theme_installer')->install(['bartik', 'test_theme']);
$this->installConfig(['block_content']);
$this->installEntitySchema('block_content');
// Set Bartik and Seven as the default public and admin theme.
// Set Bartik as the default public theme.
$config = $this->config('system.theme');
$config->set('default', 'bartik');
$config->set('admin', 'seven');
$config->save();
// Install one of D8's test themes.
\Drupal::service('theme_handler')->install(['test_theme']);
$this->executeMigrations([
'd6_filter_format',
'block_content_type',
'block_content_body_field',
'd6_custom_block',
'menu',
'd6_user_role',
'd6_block',
]);
block_rebuild();
}
/**
@@ -64,22 +70,24 @@ class MigrateBlockTest extends MigrateDrupal6TestBase {
* The theme.
* @param string $weight
* The block weight.
* @param string $label
* The block label.
* @param string $label_display
* The block label display setting.
* @param array $settings
* (optional) The block settings.
* @param bool $status
* Whether the block is expected to be enabled or disabled.
*/
public function assertEntity($id, $visibility, $region, $theme, $weight, $label, $label_display) {
public function assertEntity($id, $visibility, $region, $theme, $weight, array $settings = NULL, $status = TRUE) {
$block = Block::load($id);
$this->assertTrue($block instanceof Block);
$this->assertIdentical($visibility, $block->getVisibility());
$this->assertIdentical($region, $block->getRegion());
$this->assertIdentical($theme, $block->getTheme());
$this->assertIdentical($weight, $block->getWeight());
$config = $this->config('block.block.' . $id);
$this->assertIdentical($label, $config->get('settings.label'));
$this->assertIdentical($label_display, $config->get('settings.label_display'));
$this->assertSame($visibility, $block->getVisibility());
$this->assertSame($region, $block->getRegion());
$this->assertSame($theme, $block->getTheme());
$this->assertSame($weight, $block->getWeight());
$this->assertSame($status, $block->status());
if ($settings) {
$block_settings = $block->get('settings');
$block_settings['id'] = current(explode(':', $block_settings['id']));
$this->assertEquals($settings, $block_settings);
}
}
/**
@@ -87,60 +95,209 @@ class MigrateBlockTest extends MigrateDrupal6TestBase {
*/
public function testBlockMigration() {
$blocks = Block::loadMultiple();
$this->assertIdentical(9, count($blocks));
$this->assertCount(14, $blocks);
// User blocks
$visibility = [];
$visibility['request_path']['id'] = 'request_path';
$visibility['request_path']['negate'] = TRUE;
$visibility['request_path']['pages'] = "<front>\n/node/1\n/blog/*";
$this->assertEntity('user', $visibility, 'sidebar_first', 'bartik', 0, '', '0');
$visibility = [];
$this->assertEntity('user_1', $visibility, 'sidebar_first', 'bartik', 0, '', '0');
$visibility['user_role']['id'] = 'user_role';
$roles['authenticated'] = 'authenticated';
$visibility['user_role']['roles'] = $roles;
$context_mapping['user'] = '@user.current_user_context:current_user';
$visibility['user_role']['context_mapping'] = $context_mapping;
$visibility['user_role']['negate'] = FALSE;
$this->assertEntity('user_2', $visibility, 'sidebar_second', 'bartik', -9, '', '0');
$visibility = [];
$visibility['user_role']['id'] = 'user_role';
$visibility['user_role']['roles'] = [
'migrate_test_role_1' => 'migrate_test_role_1'
// Check user blocks.
$visibility = [
'request_path' => [
'id' => 'request_path',
'negate' => TRUE,
'pages' => "<front>\n/node/1\n/blog/*",
],
];
$context_mapping['user'] = '@user.current_user_context:current_user';
$visibility['user_role']['context_mapping'] = $context_mapping;
$visibility['user_role']['negate'] = FALSE;
$this->assertEntity('user_3', $visibility, 'sidebar_second', 'bartik', -6, '', '0');
// Check system block
$visibility = [];
$visibility['request_path']['id'] = 'request_path';
$visibility['request_path']['negate'] = TRUE;
$visibility['request_path']['pages'] = '/node/1';
$this->assertEntity('system', $visibility, 'footer', 'bartik', -5, '', '0');
// Check menu blocks
$visibility = [];
$this->assertEntity('menu', $visibility, 'header', 'bartik', -5, '', '0');
// Check custom blocks
$visibility['request_path']['id'] = 'request_path';
$visibility['request_path']['negate'] = FALSE;
$visibility['request_path']['pages'] = '<front>';
$this->assertEntity('block', $visibility, 'content', 'bartik', 0, 'Static Block', 'visible');
$visibility['request_path']['id'] = 'request_path';
$visibility['request_path']['negate'] = FALSE;
$visibility['request_path']['pages'] = '/node';
$this->assertEntity('block_1', $visibility, 'sidebar_second', 'bluemarine', -4, 'Another Static Block', 'visible');
$settings = [
'id' => 'user_login_block',
'label' => '',
'provider' => 'user',
'label_display' => '0',
];
$this->assertEntity('user', $visibility, 'sidebar_first', 'bartik', -10, $settings);
$visibility = [];
$this->assertEntity('block_2', $visibility, 'right', 'test_theme', -7, '', '0');
$settings = [
'id' => 'system_menu_block',
'label' => '',
'provider' => 'system',
'label_display' => '0',
'level' => 1,
'depth' => 0,
];
$this->assertEntity('user_1', $visibility, 'sidebar_first', 'bartik', -11, $settings);
$visibility = [
'user_role' => [
'id' => 'user_role',
'roles' => [
'authenticated' => 'authenticated',
],
'context_mapping' => [
'user' => '@user.current_user_context:current_user',
],
'negate' => FALSE,
],
];
$settings = [
'id' => 'broken',
'label' => '',
'provider' => 'core',
'label_display' => '0',
'items_per_page' => '5',
];
$this->assertEntity('user_2', $visibility, 'sidebar_second', 'bartik', -11, $settings);
$visibility = [
'user_role' => [
'id' => 'user_role',
'roles' => [
'migrate_test_role_1' => 'migrate_test_role_1',
],
'context_mapping' => [
'user' => '@user.current_user_context:current_user',
],
'negate' => FALSE,
],
];
$settings = [
'id' => 'broken',
'label' => '',
'provider' => 'core',
'label_display' => '0',
'items_per_page' => '10',
];
$this->assertEntity('user_3', $visibility, 'sidebar_second', 'bartik', -10, $settings);
// Check system block.
$visibility = [
'request_path' => [
'id' => 'request_path',
'negate' => TRUE,
'pages' => '/node/1',
],
];
$settings = [
'id' => 'system_powered_by_block',
'label' => '',
'provider' => 'system',
'label_display' => '0',
];
$this->assertEntity('system', $visibility, 'footer_fifth', 'bartik', -5, $settings);
// Check menu blocks.
$settings = [
'id' => 'broken',
'label' => '',
'provider' => 'core',
'label_display' => '0',
];
$this->assertEntity('menu', [], 'header', 'bartik', -5, $settings);
// Check aggregator block.
$settings = [
'id' => 'aggregator_feed_block',
'label' => '',
'provider' => 'aggregator',
'label_display' => '0',
'block_count' => 7,
'feed' => '5',
];
$this->assertEntity('aggregator', [], 'sidebar_second', 'bartik', -2, $settings);
// Check book block.
$settings = [
'id' => 'book_navigation',
'label' => '',
'provider' => 'book',
'label_display' => '0',
'block_mode' => 'book pages',
];
$this->assertEntity('book', [], 'sidebar_second', 'bartik', -4, $settings);
// Check forum block settings.
$settings = [
'id' => 'forum_active_block',
'label' => '',
'provider' => 'forum',
'label_display' => '0',
'block_count' => 3,
'properties' => [
'administrative' => '1',
],
];
$this->assertEntity('forum', [], 'sidebar_first', 'bartik', -8, $settings);
$settings = [
'id' => 'forum_new_block',
'label' => '',
'provider' => 'forum',
'label_display' => '0',
'block_count' => 4,
'properties' => [
'administrative' => '1',
],
];
$this->assertEntity('forum_1', [], 'sidebar_first', 'bartik', -9, $settings);
// Check statistic block settings.
$settings = [
'id' => 'broken',
'label' => '',
'provider' => 'core',
'label_display' => '0',
'top_day_num' => 7,
'top_all_num' => 8,
'top_last_num' => 9,
];
$this->assertEntity('statistics', [], 'sidebar_second', 'bartik', 0, $settings);
// Check custom blocks.
$visibility = [
'request_path' => [
'id' => 'request_path',
'negate' => FALSE,
'pages' => '<front>',
],
];
$settings = [
'id' => 'block_content',
'label' => 'Static Block',
'provider' => 'block_content',
'label_display' => 'visible',
'status' => TRUE,
'info' => '',
'view_mode' => 'full',
];
$this->assertEntity('block', $visibility, 'content', 'bartik', 0, $settings);
$visibility = [
'request_path' => [
'id' => 'request_path',
'negate' => FALSE,
'pages' => '/node',
],
];
$settings = [
'id' => 'block_content',
'label' => 'Another Static Block',
'provider' => 'block_content',
'label_display' => 'visible',
'status' => TRUE,
'info' => '',
'view_mode' => 'full',
];
// We expect this block to be disabled because '' is not a valid region,
// and block_rebuild() will disable any block in an invalid region.
$this->assertEntity('block_1', $visibility, '', 'bluemarine', -4, $settings, FALSE);
$settings = [
'id' => 'block_content',
'label' => '',
'provider' => 'block_content',
'label_display' => '0',
'status' => TRUE,
'info' => '',
'view_mode' => 'full',
];
$this->assertEntity('block_2', [], 'right', 'test_theme', -7, $settings);
// Custom block with php code is not migrated.
$block = Block::load('block_3');
@@ -13,7 +13,7 @@ use Drupal\Tests\migrate_drupal\Kernel\d7\MigrateDrupal7TestBase;
*/
class MigrateBlockTest extends MigrateDrupal7TestBase {
/**
/**
* {@inheritdoc}
*/
public static $modules = [
@@ -33,6 +33,10 @@ class MigrateBlockTest extends MigrateDrupal7TestBase {
*/
protected function setUp() {
parent::setUp();
// Install the themes used for this test.
$this->container->get('theme_installer')->install(['bartik', 'seven']);
$this->installConfig(static::$modules);
$this->installEntitySchema('block_content');
@@ -42,9 +46,6 @@ class MigrateBlockTest extends MigrateDrupal7TestBase {
$config->set('admin', 'seven');
$config->save();
// Install one of D8's test themes.
\Drupal::service('theme_handler')->install(['bartik']);
$this->executeMigrations([
'd7_filter_format',
'd7_user_role',
@@ -53,6 +54,7 @@ class MigrateBlockTest extends MigrateDrupal7TestBase {
'd7_custom_block',
'd7_block',
]);
block_rebuild();
}
/**
@@ -76,29 +78,32 @@ class MigrateBlockTest extends MigrateDrupal7TestBase {
* The block label.
* @param string $label_display
* The block label display setting.
* @param bool $status
* Whether the block is expected to be enabled or disabled.
*/
public function assertEntity($id, $plugin_id, array $roles, $pages, $region, $theme, $weight, $label, $label_display) {
public function assertEntity($id, $plugin_id, array $roles, $pages, $region, $theme, $weight, $label, $label_display, $status = TRUE) {
$block = Block::load($id);
$this->assertTrue($block instanceof Block);
/** @var \Drupal\block\BlockInterface $block */
$this->assertIdentical($plugin_id, $block->getPluginId());
$this->assertSame($plugin_id, $block->getPluginId());
$visibility = $block->getVisibility();
if ($roles) {
$this->assertIdentical($roles, array_values($visibility['user_role']['roles']));
$this->assertIdentical('@user.current_user_context:current_user', $visibility['user_role']['context_mapping']['user']);
$this->assertSame($roles, array_values($visibility['user_role']['roles']));
$this->assertSame('@user.current_user_context:current_user', $visibility['user_role']['context_mapping']['user']);
}
if ($pages) {
$this->assertIdentical($pages, $visibility['request_path']['pages']);
$this->assertSame($pages, $visibility['request_path']['pages']);
}
$this->assertIdentical($region, $block->getRegion());
$this->assertIdentical($theme, $block->getTheme());
$this->assertIdentical($weight, $block->getWeight());
$this->assertSame($region, $block->getRegion());
$this->assertSame($theme, $block->getTheme());
$this->assertSame($weight, $block->getWeight());
$this->assertSame($status, $block->status());
$config = $this->config('block.block.' . $id);
$this->assertIdentical($label, $config->get('settings.label'));
$this->assertIdentical($label_display, $config->get('settings.label_display'));
$this->assertSame($label, $config->get('settings.label'));
$this->assertSame($label_display, $config->get('settings.label_display'));
}
/**
@@ -108,7 +113,7 @@ class MigrateBlockTest extends MigrateDrupal7TestBase {
$this->assertEntity('bartik_system_main', 'system_main_block', [], '', 'content', 'bartik', 0, '', '0');
$this->assertEntity('bartik_search_form', 'search_form_block', [], '', 'sidebar_first', 'bartik', -1, '', '0');
$this->assertEntity('bartik_user_login', 'user_login_block', [], '', 'sidebar_first', 'bartik', 0, '', '0');
$this->assertEntity('bartik_system_powered_by', 'system_powered_by_block', [], '', 'footer', 'bartik', 10, '', '0');
$this->assertEntity('bartik_system_powered_by', 'system_powered_by_block', [], '', 'footer_fifth', 'bartik', 10, '', '0');
$this->assertEntity('seven_system_main', 'system_main_block', [], '', 'content', 'seven', 0, '', '0');
$this->assertEntity('seven_user_login', 'user_login_block', [], '', 'content', 'seven', 10, '', '0');
@@ -0,0 +1,127 @@
<?php
namespace Drupal\Tests\block\Kernel\Plugin\migrate\source;
use Drupal\Tests\migrate\Kernel\MigrateSqlSourceTestBase;
/**
* Tests block source plugin.
*
* @covers \Drupal\block\Plugin\migrate\source\Block
* @group block
*/
class BlockTest extends MigrateSqlSourceTestBase {
/**
* {@inheritdoc}
*/
public static $modules = ['block', 'migrate_drupal'];
/**
* {@inheritdoc}
*/
public function providerSource() {
$tests = [];
// The source data.
$tests[0]['source_data']['blocks'] = [
[
'bid' => 1,
'module' => 'block',
'delta' => '1',
'theme' => 'garland',
'status' => 1,
'weight' => 0,
'region' => 'left',
'visibility' => 0,
'pages' => '',
'title' => 'Test Title 01',
'cache' => -1,
],
[
'bid' => 2,
'module' => 'block',
'delta' => '2',
'theme' => 'garland',
'status' => 1,
'weight' => 5,
'region' => 'right',
'visibility' => 0,
'pages' => '<front>',
'title' => 'Test Title 02',
'cache' => -1,
],
];
$tests[0]['source_data']['blocks_roles'] = [
[
'module' => 'block',
'delta' => 1,
'rid' => 2,
],
[
'module' => 'block',
'delta' => 2,
'rid' => 2,
],
[
'module' => 'block',
'delta' => 2,
'rid' => 100,
],
];
$tests[0]['source_data']['role'] = [
[
'rid' => 2,
'name' => 'authenticated user',
],
];
$tests[0]['source_data']['system'] = [
[
'filename' => 'modules/system/system.module',
'name' => 'system',
'type' => 'module',
'owner' => '',
'status' => '1',
'throttle' => '0',
'bootstrap' => '0',
'schema_version' => '6055',
'weight' => '0',
'info' => 'a:0:{}',
]
];
// The expected results.
$tests[0]['expected_data'] = [
[
'bid' => 1,
'module' => 'block',
'delta' => '1',
'theme' => 'garland',
'status' => 1,
'weight' => 0,
'region' => 'left',
'visibility' => 0,
'pages' => '',
'title' => 'Test Title 01',
'cache' => -1,
'roles' => [2]
],
[
'bid' => 2,
'module' => 'block',
'delta' => '2',
'theme' => 'garland',
'status' => 1,
'weight' => 5,
'region' => 'right',
'visibility' => 0,
'pages' => '<front>',
'title' => 'Test Title 02',
'cache' => -1,
'roles' => [2]
],
];
return $tests;
}
}
@@ -69,20 +69,20 @@ class BlockConfigEntityUnitTest extends UnitTestCase {
* @covers ::calculateDependencies
*/
public function testCalculateDependencies() {
$values = array('theme' => 'stark');
$values = ['theme' => 'stark'];
// Mock the entity under test so that we can mock getPluginCollections().
$entity = $this->getMockBuilder('\Drupal\block\Entity\Block')
->setConstructorArgs(array($values, $this->entityTypeId))
->setMethods(array('getPluginCollections'))
->setConstructorArgs([$values, $this->entityTypeId])
->setMethods(['getPluginCollections'])
->getMock();
// Create a configurable plugin that would add a dependency.
$instance_id = $this->randomMachineName();
$instance = new TestConfigurablePlugin(array(), $instance_id, array('provider' => 'test'));
$instance = new TestConfigurablePlugin([], $instance_id, ['provider' => 'test']);
// Create a plugin collection to contain the instance.
$plugin_collection = $this->getMockBuilder('\Drupal\Core\Plugin\DefaultLazyPluginCollection')
->disableOriginalConstructor()
->setMethods(array('get'))
->setMethods(['get'])
->getMock();
$plugin_collection->expects($this->atLeastOnce())
->method('get')
@@ -93,7 +93,7 @@ class BlockConfigEntityUnitTest extends UnitTestCase {
// Return the mocked plugin collection.
$entity->expects($this->once())
->method('getPluginCollections')
->will($this->returnValue(array($plugin_collection)));
->will($this->returnValue([$plugin_collection]));
$dependencies = $entity->calculateDependencies()->getDependencies();
$this->assertContains('test', $dependencies['module']);
@@ -3,6 +3,7 @@
namespace Drupal\Tests\block\Unit;
use Drupal\block\BlockForm;
use Drupal\Core\Plugin\PluginFormFactoryInterface;
use Drupal\Tests\UnitTestCase;
/**
@@ -54,6 +55,13 @@ class BlockFormTest extends UnitTestCase {
*/
protected $contextRepository;
/**
* The plugin form manager.
*
* @var \Drupal\Core\Plugin\PluginFormFactoryInterface|\Prophecy\Prophecy\ProphecyInterface
*/
protected $pluginFormFactory;
/**
* {@inheritdoc}
*/
@@ -71,6 +79,7 @@ class BlockFormTest extends UnitTestCase {
->method('getStorage')
->will($this->returnValue($this->storage));
$this->pluginFormFactory = $this->prophesize(PluginFormFactoryInterface::class);
}
/**
@@ -79,7 +88,7 @@ class BlockFormTest extends UnitTestCase {
* @see \Drupal\block\BlockForm::getUniqueMachineName()
*/
public function testGetUniqueMachineName() {
$blocks = array();
$blocks = [];
$blocks['test'] = $this->getBlockMockWithMachineName('test');
$blocks['other_test'] = $this->getBlockMockWithMachineName('other_test');
@@ -93,13 +102,13 @@ class BlockFormTest extends UnitTestCase {
$query->expects($this->exactly(5))
->method('execute')
->will($this->returnValue(array('test', 'other_test', 'other_test_1', 'other_test_2')));
->will($this->returnValue(['test', 'other_test', 'other_test_1', 'other_test_2']));
$this->storage->expects($this->exactly(5))
->method('getQuery')
->will($this->returnValue($query));
$block_form_controller = new BlockForm($this->entityManager, $this->conditionManager, $this->contextRepository, $this->language, $this->themeHandler);
$block_form_controller = new BlockForm($this->entityManager, $this->conditionManager, $this->contextRepository, $this->language, $this->themeHandler, $this->pluginFormFactory->reveal());
// Ensure that the block with just one other instance gets the next available
// name suggestion.
@@ -116,25 +116,25 @@ class BlockRepositoryTest extends UnitTestCase {
}
public function providerBlocksConfig() {
$blocks_config = array(
'block1' => array(
$blocks_config = [
'block1' => [
AccessResult::allowed(), 'top', 0
),
],
// Test a block without access.
'block2' => array(
'block2' => [
AccessResult::forbidden(), 'bottom', 0
),
],
// Test some blocks in the same region with specific weight.
'block4' => array(
'block4' => [
AccessResult::allowed(), 'bottom', 5
),
'block3' => array(
],
'block3' => [
AccessResult::allowed(), 'bottom', 5
),
'block5' => array(
],
'block5' => [
AccessResult::allowed(), 'bottom', -5
),
);
],
];
$test_cases = [];
$test_cases[] = [$blocks_config,
@@ -24,7 +24,7 @@ class CategoryAutocompleteTest extends UnitTestCase {
$block_manager = $this->getMock('Drupal\Core\Block\BlockManagerInterface');
$block_manager->expects($this->any())
->method('getCategories')
->will($this->returnValue(array('Comment', 'Node', 'None & Such', 'User')));
->will($this->returnValue(['Comment', 'Node', 'None & Such', 'User']));
$this->autocompleteController = new CategoryAutocompleteController($block_manager);
}
@@ -43,9 +43,9 @@ class CategoryAutocompleteTest extends UnitTestCase {
*/
public function testAutocompleteSuggestions($string, $suggestions) {
$suggestions = array_map(function ($suggestion) {
return array('value' => $suggestion, 'label' => Html::escape($suggestion));
return ['value' => $suggestion, 'label' => Html::escape($suggestion)];
}, $suggestions);
$result = $this->autocompleteController->autocomplete(new Request(array('q' => $string)));
$result = $this->autocompleteController->autocomplete(new Request(['q' => $string]));
$this->assertSame($suggestions, json_decode($result->getContent(), TRUE));
}
@@ -55,30 +55,30 @@ class CategoryAutocompleteTest extends UnitTestCase {
* @return array
*/
public function providerTestAutocompleteSuggestions() {
$test_parameters = array();
$test_parameters[] = array(
$test_parameters = [];
$test_parameters[] = [
'string' => 'Com',
'suggestions' => array(
'suggestions' => [
'Comment',
),
);
$test_parameters[] = array(
],
];
$test_parameters[] = [
'string' => 'No',
'suggestions' => array(
'suggestions' => [
'Node',
'None & Such',
),
);
$test_parameters[] = array(
],
];
$test_parameters[] = [
'string' => 'us',
'suggestions' => array(
'suggestions' => [
'User',
),
);
$test_parameters[] = array(
],
];
$test_parameters[] = [
'string' => 'Banana',
'suggestions' => array(),
);
'suggestions' => [],
];
return $test_parameters;
}
@@ -13,33 +13,33 @@ use Symfony\Component\DependencyInjection\ContainerBuilder;
class BlockLocalTasksTest extends LocalTaskIntegrationTestBase {
protected function setUp() {
$this->directoryList = array('block' => 'core/modules/block');
$this->directoryList = ['block' => 'core/modules/block'];
parent::setUp();
$config_factory = $this->getConfigFactoryStub(array('system.theme' => array(
$config_factory = $this->getConfigFactoryStub(['system.theme' => [
'default' => 'test_c',
)));
]]);
$themes = array();
$themes['test_a'] = (object) array(
$themes = [];
$themes['test_a'] = (object) [
'status' => 1,
'info' => array(
'info' => [
'name' => 'test_a',
'hidden' => TRUE,
),
);
$themes['test_b'] = (object) array(
],
];
$themes['test_b'] = (object) [
'status' => 1,
'info' => array(
'info' => [
'name' => 'test_b',
),
);
$themes['test_c'] = (object) array(
],
];
$themes['test_c'] = (object) [
'status' => 1,
'info' => array(
'info' => [
'name' => 'test_c',
),
);
],
];
$theme_handler = $this->getMock('Drupal\Core\Extension\ThemeHandlerInterface');
$theme_handler->expects($this->any())
->method('listInfo')
@@ -63,7 +63,7 @@ class BlockLocalTasksTest extends LocalTaskIntegrationTestBase {
* Tests the admin edit local task.
*/
public function testBlockAdminLocalTasks() {
$this->assertLocalTasks('entity.block.edit_form', array(array('entity.block.edit_form')));
$this->assertLocalTasks('entity.block.edit_form', [['entity.block.edit_form']]);
}
/**
@@ -79,10 +79,10 @@ class BlockLocalTasksTest extends LocalTaskIntegrationTestBase {
* Provides a list of routes to test.
*/
public function providerTestBlockAdminDisplay() {
return array(
array('block.admin_display', array(array('block.admin_display'), array('block.admin_display_theme:test_b', 'block.admin_display_theme:test_c'))),
array('block.admin_display_theme', array(array('block.admin_display'), array('block.admin_display_theme:test_b', 'block.admin_display_theme:test_c'))),
);
return [
['block.admin_display', [['block.admin_display'], ['block.admin_display_theme:test_b', 'block.admin_display_theme:test_c']]],
['block.admin_display_theme', [['block.admin_display'], ['block.admin_display_theme:test_b', 'block.admin_display_theme:test_c']]],
];
}
}
@@ -44,7 +44,7 @@ class BlockPageVariantTest extends UnitTestCase {
* @return \Drupal\block\Plugin\DisplayVariant\BlockPageVariant|\PHPUnit_Framework_MockObject_MockObject
* A mocked display variant plugin.
*/
public function setUpDisplayVariant($configuration = array(), $definition = array()) {
public function setUpDisplayVariant($configuration = [], $definition = []) {
$container = new Container();
$cache_context_manager = $this->getMockBuilder('Drupal\Core\Cache\CacheContextsManager')
@@ -60,37 +60,37 @@ class BlockPageVariantTest extends UnitTestCase {
$this->blockViewBuilder = $this->getMock('Drupal\Core\Entity\EntityViewBuilderInterface');
return $this->getMockBuilder('Drupal\block\Plugin\DisplayVariant\BlockPageVariant')
->setConstructorArgs(array($configuration, 'test', $definition, $this->blockRepository, $this->blockViewBuilder, ['config:block_list']))
->setMethods(array('getRegionNames'))
->setConstructorArgs([$configuration, 'test', $definition, $this->blockRepository, $this->blockViewBuilder, ['config:block_list']])
->setMethods(['getRegionNames'])
->getMock();
}
public function providerBuild() {
$blocks_config = array(
'block1' => array(
$blocks_config = [
'block1' => [
// region, is main content block, is messages block, is title block
'top', FALSE, FALSE, FALSE,
),
],
// Test multiple blocks in the same region.
'block2' => array(
'block2' => [
'bottom', FALSE, FALSE, FALSE,
),
'block3' => array(
],
'block3' => [
'bottom', FALSE, FALSE, FALSE,
),
],
// Test a block implementing MainContentBlockPluginInterface.
'block4' => array(
'block4' => [
'center', TRUE, FALSE, FALSE,
),
],
// Test a block implementing MessagesBlockPluginInterface.
'block5' => array(
'block5' => [
'center', FALSE, TRUE, FALSE,
),
],
// Test a block implementing TitleBlockPluginInterface.
'block6' => array(
'block6' => [
'center', FALSE, FALSE, TRUE,
),
);
],
];
$test_cases = [];
$test_cases[] = [$blocks_config, 6,
@@ -219,7 +219,7 @@ class BlockPageVariantTest extends UnitTestCase {
}
$this->blockViewBuilder->expects($this->exactly($visible_block_count))
->method('view')
->will($this->returnValue(array()));
->will($this->returnValue([]));
$this->blockRepository->expects($this->once())
->method('getVisibleBlocksPerRegion')
->willReturnCallback(function (&$cacheable_metadata) use ($blocks) {
@@ -18,7 +18,7 @@ class BlockRegionTest extends UnitTestCase {
*
* @param array $value
* The value to transform.
* @param \Drupal\migrate\Row|NULL $row
* @param \Drupal\migrate\Row|null $row
* (optional) The mocked row.
*
* @return array|string
@@ -30,14 +30,20 @@ class BlockRegionTest extends UnitTestCase {
$row = $this->prophesize(Row::class)->reveal();
}
$regions = array(
'bartik' => array(
'triptych_first' => 'Triptych first',
'triptych_second' => 'Triptych second',
'triptych_third' => 'Triptych third',
),
);
$plugin = new BlockRegion(['region_map' => []], 'block_region', [], $regions);
$configuration = [
'map' => [
'bartik' => [
'bartik' => [
'triptych_first' => 'triptych_first',
'triptych_middle' => 'triptych_second',
'triptych_last' => 'triptych_third',
],
],
],
'default_value' => 'content',
];
$plugin = new BlockRegion($configuration, 'block_region', [], $configuration['map']['bartik']['bartik']);
return $plugin->transform($value, $executable, $row, 'foo');
}
@@ -48,7 +54,7 @@ class BlockRegionTest extends UnitTestCase {
* @covers ::transform
*/
public function testTransformSameThemeRegionExists() {
$this->assertSame('triptych_second', $this->transform(['triptych_second', 'bartik', 'bartik']));
$this->assertSame('triptych_second', $this->transform(['bartik', 'bartik', 'triptych_middle']));
}
/**
@@ -58,7 +64,7 @@ class BlockRegionTest extends UnitTestCase {
* @covers ::transform
*/
public function testTransformSameThemeRegionNotExists() {
$this->assertSame('content', $this->transform(['footer', 'bartik', 'bartik']));
$this->assertSame('content', $this->transform(['bartik', 'bartik', 'footer']));
}
}