diff --git a/core/modules/block/src/Tests/BlockTestBase.php b/core/modules/block/src/Tests/BlockTestBase.php index 71f0ae6cff..7397a47053 100644 --- a/core/modules/block/src/Tests/BlockTestBase.php +++ b/core/modules/block/src/Tests/BlockTestBase.php @@ -2,11 +2,18 @@ namespace Drupal\block\Tests; +@trigger_error(__NAMESPACE__ . '\BlockTestBase is deprecated in Drupal 8.5.0 and will be removed before Drupal 9.0.0. Instead, use \Drupal\Tests\block\Functional\BlockTestBase, see https://www.drupal.org/node/2901823.', E_USER_DEPRECATED); + use Drupal\simpletest\WebTestBase; use Drupal\filter\Entity\FilterFormat; /** * Provides setup and helper methods for block module tests. + * + * @deprecated in Drupal 8.5.0 and will be removed before Drupal 9.0.0. + * Use \Drupal\Tests\block\Functional\BlockTestBase. + * + * @see https://www.drupal.org/node/2901823 */ abstract class BlockTestBase extends WebTestBase { diff --git a/core/modules/block/src/Tests/BlockAdminThemeTest.php b/core/modules/block/tests/src/Functional/BlockAdminThemeTest.php similarity index 94% rename from core/modules/block/src/Tests/BlockAdminThemeTest.php rename to core/modules/block/tests/src/Functional/BlockAdminThemeTest.php index 8773f03620..88f35e4b09 100644 --- a/core/modules/block/src/Tests/BlockAdminThemeTest.php +++ b/core/modules/block/tests/src/Functional/BlockAdminThemeTest.php @@ -1,15 +1,15 @@ langcodes as $langcode) { $this->drupalGet('admin/structure/block', ['language' => $langcode]); - $this->clickLinkPartialName('Place block'); + $this->clickLink('Place block'); } // Create a menu in the default language. @@ -69,7 +69,7 @@ public function testBlockLinks() { // Check that the block is listed for all languages. foreach ($this->langcodes as $langcode) { $this->drupalGet('admin/structure/block', ['language' => $langcode]); - $this->clickLinkPartialName('Place block'); + $this->clickLink('Place block'); $this->assertText($edit['label']); } } diff --git a/core/modules/block/src/Tests/BlockRenderOrderTest.php b/core/modules/block/tests/src/Functional/BlockRenderOrderTest.php similarity index 94% rename from core/modules/block/src/Tests/BlockRenderOrderTest.php rename to core/modules/block/tests/src/Functional/BlockRenderOrderTest.php index a7e26ded4e..2fd1ab8925 100644 --- a/core/modules/block/src/Tests/BlockRenderOrderTest.php +++ b/core/modules/block/tests/src/Functional/BlockRenderOrderTest.php @@ -1,16 +1,16 @@ save(); $this->drupalGet(''); $site_slogan_element = $this->xpath($site_slogan_xpath); - $this->assertEqual($site_slogan_element[0], 'alert("Community carpentry");', 'The site slogan was XSS-filtered.'); + $this->assertEqual($site_slogan_element[0]->getText(), 'alert("Community carpentry");', 'The site slogan was XSS-filtered.'); // Turn just the logo off. $this->config('block.block.site-branding') diff --git a/core/modules/block/src/Tests/BlockTest.php b/core/modules/block/tests/src/Functional/BlockTest.php similarity index 98% rename from core/modules/block/src/Tests/BlockTest.php rename to core/modules/block/tests/src/Functional/BlockTest.php index 4b9deb4c2c..58ccfdcc0c 100644 --- a/core/modules/block/src/Tests/BlockTest.php +++ b/core/modules/block/tests/src/Functional/BlockTest.php @@ -1,6 +1,6 @@ xpath('//a[contains(@href, :href)]', [':href' => $add_url->toString()]); $this->assertEqual(1, count($links), 'Found one matching link.'); - $this->assertEqual(t('Place block'), (string) $links[0], 'Found the expected link text.'); + $this->assertEqual(t('Place block'), $links[0]->getText(), 'Found the expected link text.'); - list($path, $query_string) = explode('?', $links[0]['href'], 2); + list($path, $query_string) = explode('?', $links[0]->getAttribute('href'), 2); parse_str($query_string, $query_parts); $this->assertEqual($weight, $query_parts['weight'], 'Found the expected weight query string.'); @@ -164,7 +164,7 @@ public function testAddBlockFromLibraryWithWeight() { 'settings[label]' => $title, ]; // Create the block using the link parsed from the library page. - $this->drupalPostForm($this->getAbsoluteUrl($links[0]['href']), $edit, t('Save block')); + $this->drupalPostForm($this->getAbsoluteUrl($links[0]->getAttribute('href')), $edit, t('Save block')); // Ensure that the block was created with the expected weight. /** @var \Drupal\block\BlockInterface $block */ @@ -261,7 +261,7 @@ public function testBlockThemeSelector() { $theme_settings->set('default', $theme)->save(); $this->drupalGet(''); $elements = $this->xpath('//div[@id = :id]', [':id' => Html::getUniqueId('block-' . $block['id'])]); - $this->assertTrue(!empty($elements), 'The block was found.'); + $this->assertNotEmpty($elements, 'The block was found.'); } } diff --git a/core/modules/block/src/Tests/BlockTestBase.php b/core/modules/block/tests/src/Functional/BlockTestBase.php similarity index 90% copy from core/modules/block/src/Tests/BlockTestBase.php copy to core/modules/block/tests/src/Functional/BlockTestBase.php index 71f0ae6cff..e1ccd1a365 100644 --- a/core/modules/block/src/Tests/BlockTestBase.php +++ b/core/modules/block/tests/src/Functional/BlockTestBase.php @@ -1,14 +1,14 @@ drupalGet('admin/structure/block'); // Look for the blocks table. $blocks_table = $this->xpath("//table[@id='blocks']"); - $this->assertTrue(!empty($blocks_table), 'The blocks table is being rendered.'); + $this->assertNotEmpty($blocks_table, 'The blocks table is being rendered.'); // Look for test blocks in the table. foreach ($this->blockValues as $delta => $values) { $block = $this->blocks[$delta]; $label = $block->label(); $element = $this->xpath('//*[@id="blocks"]/tbody/tr[' . $values['tr'] . ']/td[1]/text()'); - $this->assertTrue((string) $element[0] == $label, 'The "' . $label . '" block title is set inside the ' . $values['settings']['region'] . ' region.'); + $this->assertEquals($element[0]->getText(), $label, 'The "' . $label . '" block title is set inside the ' . $values['settings']['region'] . ' region.'); // Look for a test block region select form element. $this->assertField('blocks[' . $values['settings']['id'] . '][region]', 'The block "' . $values['label'] . '" has a region assignment field.'); // Move the test block to the header region. @@ -134,7 +134,7 @@ public function testBlockAdminUiPage() { $this->drupalPlaceBlock('system_powered_by_block', ['region' => 'header', 'id' => 'header']); $this->drupalGet('admin/structure/block'); $element = $this->xpath('//tr[contains(@class, :class)]', [':class' => 'region-title-header']); - $this->assertTrue(!empty($element)); + $this->assertNotEmpty($element); // Ensure hidden themes do not appear in the UI. Enable another non base // theme and place the local tasks block. @@ -171,19 +171,19 @@ public function testCandidateBlockList() { $pattern = '//tr[.//td/div[text()=:title] and .//td[text()=:category] and .//td//a[contains(@href, :href)]]'; $this->drupalGet('admin/structure/block'); - $this->clickLinkPartialName('Place block'); + $this->clickLink('Place block'); $elements = $this->xpath($pattern, $arguments); - $this->assertTrue(!empty($elements), 'The test block appears in the category for its module.'); + $this->assertNotEmpty($elements, 'The test block appears in the category for its module.'); // Trigger the custom category addition in block_test_block_alter(). $this->container->get('state')->set('block_test_info_alter', TRUE); $this->container->get('plugin.manager.block')->clearCachedDefinitions(); $this->drupalGet('admin/structure/block'); - $this->clickLinkPartialName('Place block'); + $this->clickLink('Place block'); $arguments[':category'] = 'Custom category'; $elements = $this->xpath($pattern, $arguments); - $this->assertTrue(!empty($elements), 'The test block appears in a custom category controlled by block_test_block_alter().'); + $this->assertNotEmpty($elements, 'The test block appears in a custom category controlled by block_test_block_alter().'); } /** @@ -197,12 +197,12 @@ public function testContextAwareUnsatisfiedBlocks() { ]; $this->drupalGet('admin/structure/block'); - $this->clickLinkPartialName('Place block'); + $this->clickLink('Place block'); $elements = $this->xpath('//tr[.//td/div[text()=:text] and .//td[text()=:category] and .//td//a[contains(@href, :href)]]', $arguments); - $this->assertTrue(empty($elements), 'The context-aware test block does not appear.'); + $this->assertEmpty($elements, 'The context-aware test block does not appear.'); $definition = \Drupal::service('plugin.manager.block')->getDefinition('test_context_aware_unsatisfied'); - $this->assertTrue(!empty($definition), 'The context-aware test block does not exist.'); + $this->assertNotEmpty($definition, 'The context-aware test block does not exist.'); } /** @@ -223,11 +223,11 @@ public function testContextAwareBlocks() { $pattern = '//tr[.//td/div[text()=:title] and .//td[text()=:category] and .//td//a[contains(@href, :href)]]'; $this->drupalGet('admin/structure/block'); - $this->clickLinkPartialName('Place block'); + $this->clickLink('Place block'); $elements = $this->xpath($pattern, $arguments); - $this->assertTrue(!empty($elements), 'The context-aware test block appears.'); + $this->assertNotEmpty($elements, 'The context-aware test block appears.'); $definition = \Drupal::service('plugin.manager.block')->getDefinition('test_context_aware'); - $this->assertTrue(!empty($definition), 'The context-aware test block exists.'); + $this->assertNotEmpty($definition, 'The context-aware test block exists.'); $edit = [ 'region' => 'content', 'settings[context_mapping][user]' => '@block_test.multiple_static_context:userB', diff --git a/core/modules/block/src/Tests/BlockXssTest.php b/core/modules/block/tests/src/Functional/BlockXssTest.php similarity index 93% rename from core/modules/block/src/Tests/BlockXssTest.php rename to core/modules/block/tests/src/Functional/BlockXssTest.php index b37f4cd223..3e661d775d 100644 --- a/core/modules/block/src/Tests/BlockXssTest.php +++ b/core/modules/block/tests/src/Functional/BlockXssTest.php @@ -1,12 +1,12 @@ drupalLogin($this->drupalCreateUser(['administer blocks', 'access administration pages'])); $this->drupalGet(Url::fromRoute('block.admin_display')); - $this->clickLinkPartialName('Place block'); + $this->clickLink('Place block'); $this->assertNoEscaped('<'); } @@ -58,7 +58,7 @@ public function testXssInCategory() { $this->drupalPlaceBlock('test_xss_title'); $this->drupalLogin($this->drupalCreateUser(['administer blocks', 'access administration pages'])); $this->drupalGet(Url::fromRoute('block.admin_display')); - $this->clickLinkPartialName('Place block'); + $this->clickLink('Place block'); $this->assertNoRaw(""); } @@ -73,7 +73,7 @@ public function testBlockXss() { $this->doBlockContentTest(); $this->drupalGet(Url::fromRoute('block.admin_display')); - $this->clickLinkPartialName('Place block'); + $this->clickLink('Place block'); $this->assertNoRaw('&lt;', 'The page does not have double escaped HTML tags.'); } @@ -101,7 +101,7 @@ protected function doViewTest() { $view->save(); $this->drupalGet(Url::fromRoute('block.admin_display')); - $this->clickLinkPartialName('Place block'); + $this->clickLink('Place block'); // \Drupal\views\Plugin\Derivative\ViewsBlock::getDerivativeDefinitions() // has a different code path for an admin label based only on the View @@ -137,7 +137,7 @@ protected function doMenuTest() { ])->save(); $this->drupalGet(Url::fromRoute('block.admin_display')); - $this->clickLinkPartialName('Place block'); + $this->clickLink('Place block'); $this->assertEscaped(''); $this->assertNoRaw(''); @@ -158,7 +158,7 @@ protected function doBlockContentTest() { ])->save(); $this->drupalGet(Url::fromRoute('block.admin_display')); - $this->clickLinkPartialName('Place block'); + $this->clickLink('Place block'); $this->assertEscaped(''); $this->assertNoRaw(''); diff --git a/core/modules/block/src/Tests/NonDefaultBlockAdminTest.php b/core/modules/block/tests/src/Functional/NonDefaultBlockAdminTest.php similarity index 86% rename from core/modules/block/src/Tests/NonDefaultBlockAdminTest.php rename to core/modules/block/tests/src/Functional/NonDefaultBlockAdminTest.php index fc2f33c0da..7b7927de20 100644 --- a/core/modules/block/src/Tests/NonDefaultBlockAdminTest.php +++ b/core/modules/block/tests/src/Functional/NonDefaultBlockAdminTest.php @@ -1,15 +1,15 @@ enableViewsTestModule(); @@ -67,10 +71,10 @@ public function testBlockCategory() { 'plugin_id' => 'views_block:' . $edit['id'] . '-block_1', 'theme' => 'classy', ]), - ':category' => t('Lists (Views)'), + ':category' => 'Lists (Views)', ]; $this->drupalGet('admin/structure/block'); - $this->clickLinkPartialName('Place block'); + $this->clickLink('Place block'); $elements = $this->xpath($pattern, $arguments); $this->assertTrue(!empty($elements), 'The test block appears in the category for its base table.'); @@ -95,7 +99,7 @@ public function testBlockCategory() { // Test that the blocks are listed under the correct categories. $arguments[':category'] = $category; $this->drupalGet('admin/structure/block'); - $this->clickLinkPartialName('Place block'); + $this->clickLink('Place block'); $elements = $this->xpath($pattern, $arguments); $this->assertTrue(!empty($elements), 'The test block appears in the custom category.'); @@ -104,7 +108,7 @@ public function testBlockCategory() { 'plugin_id' => 'views_block:' . $edit['id'] . '-block_2', 'theme' => 'classy', ]), - ':category' => t('Lists (Views)'), + ':category' => 'Lists (Views)', ]; $elements = $this->xpath($pattern, $arguments); $this->assertTrue(!empty($elements), 'The first duplicated test block remains in the original category.'); @@ -243,7 +247,7 @@ public function testBlockRendering() { $this->drupalGet(''); $result = $this->xpath('//div[contains(@class, "region-sidebar-first")]/div[contains(@class, "block-views")]/h2'); - $this->assertEqual((string) $result[0], 'Custom title'); + $this->assertEqual($result[0]->getText(), 'Custom title'); // Don't override the title anymore. $plugin = $block->getPlugin(); @@ -252,7 +256,7 @@ public function testBlockRendering() { $this->drupalGet(''); $result = $this->xpath('//div[contains(@class, "region-sidebar-first")]/div[contains(@class, "block-views")]/h2'); - $this->assertEqual((string) $result[0], 'test_view_block'); + $this->assertEqual($result[0]->getText(), 'test_view_block'); // Hide the title. $block->getPlugin()->setConfigurationValue('label_display', FALSE); @@ -370,4 +374,39 @@ public function testBlockContextualLinks() { $this->assertIdentical($json[$cached_id], ''); } + /** + * Checks to see whether a block appears on the page. + * + * @param \Drupal\block\Entity\Block $block + * The block entity to find on the page. + */ + protected function assertBlockAppears(Block $block) { + $result = $this->findBlockInstance($block); + $this->assertTrue(!empty($result), format_string('Ensure the block @id appears on the page', ['@id' => $block->id()])); + } + + /** + * Checks to see whether a block does not appears on the page. + * + * @param \Drupal\block\Entity\Block $block + * The block entity to find on the page. + */ + protected function assertNoBlockAppears(Block $block) { + $result = $this->findBlockInstance($block); + $this->assertFalse(!empty($result), format_string('Ensure the block @id does not appear on the page', ['@id' => $block->id()])); + } + + /** + * Find a block instance on the page. + * + * @param \Drupal\block\Entity\Block $block + * The block entity to find on the page. + * + * @return array + * The result from the xpath query. + */ + protected function findBlockInstance(Block $block) { + return $this->xpath('//div[@id = :id]', [':id' => 'block-' . $block->id()]); + } + } diff --git a/core/modules/simpletest/src/TestDiscovery.php b/core/modules/simpletest/src/TestDiscovery.php index 5374520e56..a31c6e398b 100644 --- a/core/modules/simpletest/src/TestDiscovery.php +++ b/core/modules/simpletest/src/TestDiscovery.php @@ -144,8 +144,8 @@ public function registerTestNamespaces() { * An array of tests keyed by the the group name. * @code * $groups['block'] => array( - * 'Drupal\block\Tests\BlockTest' => array( - * 'name' => 'Drupal\block\Tests\BlockTest', + * 'Drupal\Tests\block\Functional\BlockTest' => array( + * 'name' => 'Drupal\Tests\block\Functional\BlockTest', * 'description' => 'Tests block UI CRUD functionality.', * 'group' => 'block', * ),