class ResponsiveImageFieldDisplayTest
Same name in other branches
- 9 core/modules/responsive_image/tests/src/Functional/ResponsiveImageFieldDisplayTest.php \Drupal\Tests\responsive_image\Functional\ResponsiveImageFieldDisplayTest
- 8.9.x core/modules/responsive_image/tests/src/Functional/ResponsiveImageFieldDisplayTest.php \Drupal\Tests\responsive_image\Functional\ResponsiveImageFieldDisplayTest
- 11.x core/modules/responsive_image/tests/src/Functional/ResponsiveImageFieldDisplayTest.php \Drupal\Tests\responsive_image\Functional\ResponsiveImageFieldDisplayTest
Tests responsive image display formatter.
@group responsive_image @group #slow
Hierarchy
- class \Drupal\Tests\BrowserTestBase extends \PHPUnit\Framework\TestCase uses \Drupal\Core\Test\FunctionalTestSetupTrait, \Drupal\Tests\UiHelperTrait, \Drupal\Core\Test\TestSetupTrait, \Drupal\Tests\block\Traits\BlockCreationTrait, \Drupal\Tests\RandomGeneratorTrait, \Drupal\Tests\node\Traits\NodeCreationTrait, \Drupal\Tests\node\Traits\ContentTypeCreationTrait, \Drupal\Tests\ConfigTestTrait, \Drupal\Tests\TestRequirementsTrait, \Drupal\Tests\user\Traits\UserCreationTrait, \Drupal\Tests\XdebugRequestTrait, \Drupal\Tests\Traits\PhpUnitWarnings, \Drupal\Tests\PhpUnitCompatibilityTrait, \Symfony\Bridge\PhpUnit\ExpectDeprecationTrait, \Drupal\Tests\ExtensionListTestTrait
- class \Drupal\Tests\image\Functional\ImageFieldTestBase extends \Drupal\Tests\BrowserTestBase uses \Drupal\Tests\image\Kernel\ImageFieldCreationTrait
- class \Drupal\Tests\responsive_image\Functional\ResponsiveImageFieldDisplayTest extends \Drupal\Tests\image\Functional\ImageFieldTestBase uses \Drupal\Tests\TestFileCreationTrait
- class \Drupal\Tests\image\Functional\ImageFieldTestBase extends \Drupal\Tests\BrowserTestBase uses \Drupal\Tests\image\Kernel\ImageFieldCreationTrait
Expanded class hierarchy of ResponsiveImageFieldDisplayTest
File
-
core/
modules/ responsive_image/ tests/ src/ Functional/ ResponsiveImageFieldDisplayTest.php, line 24
Namespace
Drupal\Tests\responsive_image\FunctionalView source
class ResponsiveImageFieldDisplayTest extends ImageFieldTestBase {
use TestFileCreationTrait;
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
/**
* Responsive image style entity instance we test with.
*
* @var \Drupal\responsive_image\Entity\ResponsiveImageStyle
*/
protected $responsiveImgStyle;
/**
* The file URL generator.
*
* @var \Drupal\Core\File\FileUrlGeneratorInterface
*/
protected $fileUrlGenerator;
/**
* {@inheritdoc}
*/
protected static $modules = [
'field_ui',
'responsive_image',
'responsive_image_test_module',
];
/**
* {@inheritdoc}
*/
protected function setUp() : void {
parent::setUp();
$this->fileUrlGenerator = $this->container
->get('file_url_generator');
// Create user.
$this->adminUser = $this->drupalCreateUser([
'administer responsive images',
'access content',
'access administration pages',
'administer site configuration',
'administer content types',
'administer node display',
'administer nodes',
'create article content',
'edit any article content',
'delete any article content',
'administer image styles',
]);
$this->drupalLogin($this->adminUser);
// Add responsive image style.
$this->responsiveImgStyle = ResponsiveImageStyle::create([
'id' => 'style_one',
'label' => 'Style One',
'breakpoint_group' => 'responsive_image_test_module',
'fallback_image_style' => 'large',
]);
}
/**
* Tests responsive image formatters on node display for public files.
*/
public function testResponsiveImageFieldFormattersPublic() : void {
$this->addTestImageStyleMappings();
$this->doTestResponsiveImageFieldFormatters('public');
}
/**
* Tests responsive image formatters on node display for private files.
*/
public function testResponsiveImageFieldFormattersPrivate() : void {
$this->addTestImageStyleMappings();
// Remove access content permission from anonymous users.
user_role_change_permissions(RoleInterface::ANONYMOUS_ID, [
'access content' => FALSE,
]);
$this->doTestResponsiveImageFieldFormatters('private');
}
/**
* Tests responsive image formatters when image style is empty.
*/
public function testResponsiveImageFieldFormattersEmptyStyle() : void {
$this->addTestImageStyleMappings(TRUE);
$this->doTestResponsiveImageFieldFormatters('public', TRUE);
}
/**
* Add image style mappings to the responsive image style entity.
*
* @param bool $empty_styles
* If true, the image style mappings will get empty image styles.
*/
protected function addTestImageStyleMappings($empty_styles = FALSE) {
if ($empty_styles) {
$this->responsiveImgStyle
->addImageStyleMapping('responsive_image_test_module.mobile', '1x', [
'image_mapping_type' => 'image_style',
'image_mapping' => '',
])
->addImageStyleMapping('responsive_image_test_module.narrow', '1x', [
'image_mapping_type' => 'sizes',
'image_mapping' => [
'sizes' => '(min-width: 700px) 700px, 100vw',
'sizes_image_styles' => [],
],
])
->addImageStyleMapping('responsive_image_test_module.wide', '1x', [
'image_mapping_type' => 'image_style',
'image_mapping' => '',
])
->save();
}
else {
$this->responsiveImgStyle
->addImageStyleMapping('responsive_image_test_module.mobile', '1x', [
'image_mapping_type' => 'image_style',
'image_mapping' => ResponsiveImageStyleInterface::EMPTY_IMAGE,
])
->addImageStyleMapping('responsive_image_test_module.mobile', '1.5x', [
'image_mapping_type' => 'image_style',
'image_mapping' => 'thumbnail',
])
->addImageStyleMapping('responsive_image_test_module.narrow', '1x', [
'image_mapping_type' => 'sizes',
'image_mapping' => [
'sizes' => '(min-width: 700px) 700px, 100vw',
'sizes_image_styles' => [
'large',
'medium',
],
],
])
->addImageStyleMapping('responsive_image_test_module.wide', '1x', [
'image_mapping_type' => 'image_style',
'image_mapping' => 'large',
])
->addImageStyleMapping('responsive_image_test_module.wide', '3x', [
'image_mapping_type' => 'image_style',
'image_mapping' => ResponsiveImageStyleInterface::ORIGINAL_IMAGE,
])
->save();
}
}
/**
* Tests responsive image formatters on node display.
*
* If the empty styles param is set, then the function only tests for the
* fallback image style (large).
*
* @param string $scheme
* File scheme to use.
* @param bool $empty_styles
* If true, use an empty string for image style names.
* Defaults to false.
*/
protected function doTestResponsiveImageFieldFormatters($scheme, $empty_styles = FALSE) {
/** @var \Drupal\Core\Render\RendererInterface $renderer */
$renderer = $this->container
->get('renderer');
$node_storage = $this->container
->get('entity_type.manager')
->getStorage('node');
$field_name = $this->randomMachineName();
$this->createImageField($field_name, 'node', 'article', [
'uri_scheme' => $scheme,
]);
// Create a new node with an image attached. Make sure we use a large image
// so the scale effects of the image styles always have an effect.
$test_image = current($this->getTestFiles('image', 39325));
// Create alt text for the image.
$alt = $this->randomMachineName();
$nid = $this->uploadNodeImage($test_image, $field_name, 'article', $alt);
$node_storage->resetCache([
$nid,
]);
$node = $node_storage->load($nid);
// Test that the default formatter is being used.
$image_uri = File::load($node->{$field_name}->target_id)
->getFileUri();
$image = [
'#theme' => 'image',
'#uri' => $image_uri,
'#width' => 360,
'#height' => 240,
'#alt' => $alt,
'#attributes' => [
'loading' => 'lazy',
],
];
$default_output = str_replace("\n", '', (string) $renderer->renderRoot($image));
$this->assertSession()
->responseContains($default_output);
// Test field not being configured. This should not cause a fatal error.
$display_options = [
'type' => 'responsive_image_test',
'settings' => ResponsiveImageFormatter::defaultSettings(),
];
$display = $this->container
->get('entity_type.manager')
->getStorage('entity_view_display')
->load('node.article.default');
if (!$display) {
$values = [
'targetEntityType' => 'node',
'bundle' => 'article',
'mode' => 'default',
'status' => TRUE,
];
$display = $this->container
->get('entity_type.manager')
->getStorage('entity_view_display')
->create($values);
}
$display->setComponent($field_name, $display_options)
->save();
$this->drupalGet('node/' . $nid);
// Test theme function for responsive image, but using the test formatter.
$display_options = [
'type' => 'responsive_image_test',
'settings' => [
'image_link' => 'file',
'responsive_image_style' => 'style_one',
],
];
/** @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface $display_repository */
$display_repository = \Drupal::service('entity_display.repository');
$display = $display_repository->getViewDisplay('node', 'article');
$display->setComponent($field_name, $display_options)
->save();
$this->drupalGet('node/' . $nid);
// Use the responsive image formatter linked to file formatter.
$display_options = [
'type' => 'responsive_image',
'settings' => [
'image_link' => 'file',
'responsive_image_style' => 'style_one',
],
];
$display = $display_repository->getViewDisplay('node', 'article');
$display->setComponent($field_name, $display_options)
->save();
$this->drupalGet('node/' . $nid);
// No image style cache tag should be found.
$this->assertSession()
->responseHeaderNotContains('X-Drupal-Cache-Tags', 'image_style:');
$this->assertSession()
->responseMatches('/<a(.*?)href="' . preg_quote($this->fileUrlGenerator
->generateString($image_uri), '/') . '"(.*?)>\\s*<picture/');
// Verify that the image can be downloaded.
$this->assertEquals(file_get_contents($test_image->uri), $this->drupalGet($this->fileUrlGenerator
->generateAbsoluteString($image_uri)), 'File was downloaded successfully.');
if ($scheme == 'private') {
// Only verify HTTP headers when using private scheme and the headers are
// sent by Drupal.
$this->assertSession()
->responseHeaderEquals('Content-Type', 'image/png');
$this->assertSession()
->responseHeaderContains('Cache-Control', 'private');
// Log out and ensure the file cannot be accessed.
$this->drupalLogout();
$this->drupalGet($this->fileUrlGenerator
->generateAbsoluteString($image_uri));
$this->assertSession()
->statusCodeEquals(403);
// Log in again.
$this->drupalLogin($this->adminUser);
}
// Use the responsive image formatter with a responsive image style.
$display_options['settings']['responsive_image_style'] = 'style_one';
$display_options['settings']['image_link'] = '';
$display->setComponent($field_name, $display_options)
->save();
// Create a derivative so at least one MIME type will be known.
$large_style = ImageStyle::load('large');
$large_style->createDerivative($image_uri, $large_style->buildUri($image_uri));
// Output should contain all image styles and all breakpoints.
$this->drupalGet('node/' . $nid);
if (!$empty_styles) {
$this->assertSession()
->responseContains('/styles/medium/');
// Assert the empty image is present.
$this->assertSession()
->responseContains('data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==');
$thumbnail_style = ImageStyle::load('thumbnail');
// Assert the output of the 'srcset' attribute (small multipliers first).
$this->assertSession()
->responseContains('data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== 1x, ' . $this->fileUrlGenerator
->transformRelative($thumbnail_style->buildUrl($image_uri)) . ' 1.5x');
$this->assertSession()
->responseContains('/styles/medium/');
// Assert the output of the original image.
$this->assertSession()
->responseContains($this->fileUrlGenerator
->generateString($image_uri) . ' 3x');
// Assert the output of the breakpoints.
$this->assertSession()
->responseContains('media="(min-width: 0px)"');
$this->assertSession()
->responseContains('media="(min-width: 560px)"');
// Assert the output of the 'sizes' attribute.
$this->assertSession()
->responseContains('sizes="(min-width: 700px) 700px, 100vw"');
$this->assertSession()
->responseMatches('/media="\\(min-width: 560px\\)".+?sizes="\\(min-width: 700px\\) 700px, 100vw"/');
// Assert the output of the 'srcset' attribute (small images first).
$medium_style = ImageStyle::load('medium');
$this->assertSession()
->responseContains($this->fileUrlGenerator
->transformRelative($medium_style->buildUrl($image_uri)) . ' 220w, ' . $this->fileUrlGenerator
->transformRelative($large_style->buildUrl($image_uri)) . ' 360w');
$this->assertSession()
->responseContains('media="(min-width: 851px)"');
// Assert the output of the 'width' attribute.
$this->assertSession()
->responseContains('width="360"');
// Assert the output of the 'height' attribute.
$this->assertSession()
->responseContains('height="240"');
$this->assertSession()
->responseContains('loading="lazy"');
}
$this->assertSession()
->responseContains('/styles/large/');
$this->assertSession()
->responseHeaderContains('X-Drupal-Cache-Tags', 'config:responsive_image.styles.style_one');
if (!$empty_styles) {
$this->assertSession()
->responseHeaderContains('X-Drupal-Cache-Tags', 'config:image.style.medium');
$this->assertSession()
->responseHeaderContains('X-Drupal-Cache-Tags', 'config:image.style.thumbnail');
$this->assertSession()
->responseContains('type="image/webp"');
}
$this->assertSession()
->responseHeaderContains('X-Drupal-Cache-Tags', 'config:image.style.large');
// Test the fallback image style. Copy the source image:
$fallback_image = $image;
// Set the fallback image style uri:
$fallback_image['#uri'] = $this->fileUrlGenerator
->transformRelative($large_style->buildUrl($image_uri));
// The image.html.twig template has a newline after the <img> tag but
// responsive-image.html.twig doesn't have one after the fallback image, so
// we remove it here.
$default_output = trim((string) $renderer->renderRoot($fallback_image));
$this->assertSession()
->responseContains($default_output);
if ($scheme == 'private') {
// Log out and ensure the file cannot be accessed.
$this->drupalLogout();
$this->drupalGet($large_style->buildUrl($image_uri));
$this->assertSession()
->statusCodeEquals(403);
$this->assertSession()
->responseHeaderNotMatches('X-Drupal-Cache-Tags', '/ image_style\\:/');
}
}
/**
* Tests responsive image formatters on node display linked to the file.
*/
public function testResponsiveImageFieldFormattersLinkToFile() : void {
$this->addTestImageStyleMappings();
$this->assertResponsiveImageFieldFormattersLink('file');
}
/**
* Tests responsive image formatters on node display linked to the node.
*/
public function testResponsiveImageFieldFormattersLinkToNode() : void {
$this->addTestImageStyleMappings();
$this->assertResponsiveImageFieldFormattersLink('content');
}
/**
* Tests responsive image formatter on node display with an empty media query.
*/
public function testResponsiveImageFieldFormattersEmptyMediaQuery() : void {
$this->responsiveImgStyle
->addImageStyleMapping('responsive_image_test_module.empty', '1x', [
'image_mapping_type' => 'image_style',
'image_mapping' => ResponsiveImageStyleInterface::EMPTY_IMAGE,
])
->addImageStyleMapping('responsive_image_test_module.mobile', '1x', [
'image_mapping_type' => 'image_style',
'image_mapping' => 'thumbnail',
])
->save();
$node_storage = $this->container
->get('entity_type.manager')
->getStorage('node');
$field_name = $this->randomMachineName();
$this->createImageField($field_name, 'node', 'article', [
'uri_scheme' => 'public',
]);
// Create a new node with an image attached.
$test_image = current($this->getTestFiles('image'));
$nid = $this->uploadNodeImage($test_image, $field_name, 'article', $this->randomMachineName());
$node_storage->resetCache([
$nid,
]);
// Use the responsive image formatter linked to file formatter.
$display_options = [
'type' => 'responsive_image',
'settings' => [
'image_link' => '',
'responsive_image_style' => 'style_one',
],
];
$display = \Drupal::service('entity_display.repository')->getViewDisplay('node', 'article');
$display->setComponent($field_name, $display_options)
->save();
// View the node.
$this->drupalGet('node/' . $nid);
// Assert an empty media attribute is not output.
$this->assertSession()
->responseNotMatches('@srcset="data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== 1x".+?media=".+?/><source@');
// Assert the media attribute is present if it has a value.
$thumbnail_style = ImageStyle::load('thumbnail');
$node = $node_storage->load($nid);
$image_uri = File::load($node->{$field_name}->target_id)
->getFileUri();
$this->assertSession()
->responseMatches('/srcset="' . preg_quote($this->fileUrlGenerator
->transformRelative($thumbnail_style->buildUrl($image_uri)), '/') . ' 1x".+?media="\\(min-width: 0px\\)"/');
}
/**
* Tests responsive image formatter on node display with one and two sources.
*/
public function testResponsiveImageFieldFormattersMultipleSources() : void {
// Setup known image style sizes so the test can assert on known sizes.
$large_style = ImageStyle::load('large');
assert($large_style instanceof ImageStyleInterface);
$large_style->addImageEffect([
'id' => 'image_resize',
'data' => [
'width' => '480',
'height' => '480',
],
]);
$large_style->save();
$medium_style = ImageStyle::load('medium');
assert($medium_style instanceof ImageStyleInterface);
$medium_style->addImageEffect([
'id' => 'image_resize',
'data' => [
'width' => '220',
'height' => '220',
],
]);
$medium_style->save();
$this->responsiveImgStyle
->addImageStyleMapping('responsive_image_test_module.empty', '1x', [
'image_mapping_type' => 'image_style',
'image_mapping' => $medium_style->id(),
])
->addImageStyleMapping('responsive_image_test_module.empty', '1.5x', [
'image_mapping_type' => 'image_style',
'image_mapping' => $large_style->id(),
])
->addImageStyleMapping('responsive_image_test_module.empty', '2x', [
'image_mapping_type' => 'image_style',
'image_mapping' => $large_style->id(),
])
->save();
$node_storage = $this->container
->get('entity_type.manager')
->getStorage('node');
$field_name = $this->randomMachineName();
$this->createImageField($field_name, 'node', 'article', [
'uri_scheme' => 'public',
]);
// Create a new node with an image attached.
$test_image = current($this->getTestFiles('image'));
$nid = $this->uploadNodeImage($test_image, $field_name, 'article', $this->randomMachineName());
$node_storage->resetCache([
$nid,
]);
// Use the responsive image formatter linked to file formatter.
$display_options = [
'type' => 'responsive_image',
'settings' => [
'image_link' => '',
'responsive_image_style' => 'style_one',
'image_loading' => [
// Test the image loading default option can be overridden.
'attribute' => 'eager',
],
],
];
$display = \Drupal::service('entity_display.repository')->getViewDisplay('node', 'article');
$display->setComponent($field_name, $display_options)
->save();
// View the node.
$this->drupalGet('node/' . $nid);
// Assert the img tag has medium and large images and fallback dimensions
// from the large image style are used.
$node = $node_storage->load($nid);
$image_uri = File::load($node->{$field_name}->target_id)
->getFileUri();
$medium_transform_url = $this->fileUrlGenerator
->transformRelative($medium_style->buildUrl($image_uri));
$large_transform_url = $this->fileUrlGenerator
->transformRelative($large_style->buildUrl($image_uri));
$this->assertSession()
->responseMatches('/<img loading="eager" srcset="' . \preg_quote($medium_transform_url, '/') . ' 1x, ' . \preg_quote($large_transform_url, '/') . ' 1.5x, ' . \preg_quote($large_transform_url, '/') . ' 2x" width="220" height="220" src="' . \preg_quote($large_transform_url, '/') . '" alt="\\w+" \\/>/');
$this->responsiveImgStyle
->addImageStyleMapping('responsive_image_test_module.wide', '1x', [
'image_mapping_type' => 'image_style',
'image_mapping' => $large_style->id(),
])
->save();
// Assert the picture tag has source tags that include dimensions.
$this->drupalGet('node/' . $nid);
$this->assertSession()
->responseMatches('/<picture>\\s+<source srcset="' . \preg_quote($large_transform_url, '/') . ' 1x" media="\\(min-width: 851px\\)" type="image\\/webp" width="480" height="480"\\/>\\s+<source srcset="' . \preg_quote($medium_transform_url, '/') . ' 1x, ' . \preg_quote($large_transform_url, '/') . ' 1.5x, ' . \preg_quote($large_transform_url, '/') . ' 2x" type="image\\/webp" width="220" height="220"\\/>\\s+<img loading="eager" src="' . \preg_quote($large_transform_url, '/') . '" width="480" height="480" alt="\\w+" \\/>\\s+<\\/picture>/');
}
/**
* Tests responsive image formatters linked to the file or node.
*
* @param string $link_type
* The link type to test. Either 'file' or 'content'.
*/
private function assertResponsiveImageFieldFormattersLink(string $link_type) : void {
$field_name = $this->randomMachineName();
$field_settings = [
'alt_field_required' => 0,
];
$this->createImageField($field_name, 'node', 'article', [
'uri_scheme' => 'public',
], $field_settings);
// Create a new node with an image attached.
$test_image = current($this->getTestFiles('image'));
/** @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface $display_repository */
$display_repository = \Drupal::service('entity_display.repository');
// Test the image linked to file formatter.
$display_options = [
'type' => 'responsive_image',
'settings' => [
'image_link' => $link_type,
'responsive_image_style' => 'style_one',
],
];
$display_repository->getViewDisplay('node', 'article')
->setComponent($field_name, $display_options)
->save();
// Ensure that preview works.
$this->previewNodeImage($test_image, $field_name, 'article');
// Look for a picture tag in the preview output
$this->assertSession()
->responseMatches('/picture/');
$nid = $this->uploadNodeImage($test_image, $field_name, 'article');
$this->container
->get('entity_type.manager')
->getStorage('node')
->resetCache([
$nid,
]);
$node = Node::load($nid);
// Use the responsive image formatter linked to file formatter.
$display_options = [
'type' => 'responsive_image',
'settings' => [
'image_link' => $link_type,
'responsive_image_style' => 'style_one',
],
];
$display_repository->getViewDisplay('node', 'article')
->setComponent($field_name, $display_options)
->save();
// Create a derivative so at least one MIME type will be known.
$large_style = ImageStyle::load('large');
$image_uri = File::load($node->{$field_name}->target_id)
->getFileUri();
$large_style->createDerivative($image_uri, $large_style->buildUri($image_uri));
// Output should contain all image styles and all breakpoints.
$this->drupalGet('node/' . $nid);
switch ($link_type) {
case 'file':
// Make sure the link to the file is present.
$this->assertSession()
->responseMatches('/<a(.*?)href="' . preg_quote($this->fileUrlGenerator
->generateString($image_uri), '/') . '"(.*?)>\\s*<picture/');
break;
case 'content':
// Make sure the link to the node is present.
$this->assertSession()
->responseMatches('/<a(.*?)href="' . preg_quote($node->toUrl()
->toString(), '/') . '"(.*?)>\\s*<picture/');
break;
}
}
}
Members
Title Sort descending | Deprecated | Modifiers | Object type | Summary | Member alias | Overriden Title | Overrides |
---|---|---|---|---|---|---|---|
BlockCreationTrait::placeBlock | protected | function | Creates a block instance based on default settings. | Aliased as: drupalPlaceBlock | |||
BrowserHtmlDebugTrait::$htmlOutputBaseUrl | protected | property | The Base URI to use for links to the output files. | ||||
BrowserHtmlDebugTrait::$htmlOutputClassName | protected | property | Class name for HTML output logging. | ||||
BrowserHtmlDebugTrait::$htmlOutputCounter | protected | property | Counter for HTML output logging. | ||||
BrowserHtmlDebugTrait::$htmlOutputCounterStorage | protected | property | Counter storage for HTML output logging. | ||||
BrowserHtmlDebugTrait::$htmlOutputDirectory | protected | property | Directory name for HTML output logging. | ||||
BrowserHtmlDebugTrait::$htmlOutputEnabled | protected | property | HTML output enabled. | ||||
BrowserHtmlDebugTrait::$htmlOutputFile | protected | property | The file name to write the list of URLs to. | ||||
BrowserHtmlDebugTrait::$htmlOutputTestId | protected | property | HTML output test ID. | ||||
BrowserHtmlDebugTrait::formatHtmlOutputHeaders | protected | function | Formats HTTP headers as string for HTML output logging. | ||||
BrowserHtmlDebugTrait::getHtmlOutputHeaders | protected | function | Returns headers in HTML output format. | 1 | |||
BrowserHtmlDebugTrait::getResponseLogHandler | protected | function | Provides a Guzzle middleware handler to log every response received. | ||||
BrowserHtmlDebugTrait::htmlOutput | protected | function | Logs a HTML output message in a text file. | ||||
BrowserHtmlDebugTrait::initBrowserOutputFile | protected | function | Creates the directory to store browser output. | ||||
BrowserTestBase::$baseUrl | protected | property | The base URL. | ||||
BrowserTestBase::$configImporter | protected | property | The config importer that can be used in a test. | ||||
BrowserTestBase::$customTranslations | protected | property | An array of custom translations suitable for SettingsEditor::rewrite(). | ||||
BrowserTestBase::$mink | protected | property | Mink session manager. | ||||
BrowserTestBase::$minkDefaultDriverArgs | protected | property | Mink default driver params. | ||||
BrowserTestBase::$minkDefaultDriverClass | protected | property | Mink class for the default driver to use. | 1 | |||
BrowserTestBase::$originalContainer | protected | property | The original container. | ||||
BrowserTestBase::$originalShutdownCallbacks | protected | property | The original array of shutdown function callbacks. | ||||
BrowserTestBase::$preserveGlobalState | protected | property | |||||
BrowserTestBase::$profile | protected | property | The profile to install as a basis for testing. | 40 | |||
BrowserTestBase::$runTestInSeparateProcess | protected | property | Browser tests are run in separate processes to prevent collisions between code that may be loaded by tests. |
||||
BrowserTestBase::$timeLimit | protected | property | Time limit in seconds for the test. | ||||
BrowserTestBase::$translationFilesDirectory | protected | property | The translation file directory for the test environment. | ||||
BrowserTestBase::cleanupEnvironment | protected | function | Clean up the test environment. | ||||
BrowserTestBase::config | protected | function | Configuration accessor for tests. Returns non-overridden configuration. | ||||
BrowserTestBase::filePreDeleteCallback | public static | function | Ensures test files are deletable. | ||||
BrowserTestBase::getDefaultDriverInstance | protected | function | Gets an instance of the default Mink driver. | ||||
BrowserTestBase::getDrupalSettings | protected | function | Gets the JavaScript drupalSettings variable for the currently-loaded page. | 1 | |||
BrowserTestBase::getHttpClient | protected | function | Obtain the HTTP client for the system under test. | ||||
BrowserTestBase::getMinkDriverArgs | protected | function | Gets the Mink driver args from an environment variable. | 1 | |||
BrowserTestBase::getOptions | protected | function | Helper function to get the options of select field. | ||||
BrowserTestBase::getSession | public | function | Returns Mink session. | ||||
BrowserTestBase::getSessionCookies | protected | function | Get session cookies from current session. | ||||
BrowserTestBase::getTestMethodCaller | protected | function | Retrieves the current calling line in the class under test. | Overrides BrowserHtmlDebugTrait::getTestMethodCaller | |||
BrowserTestBase::initFrontPage | protected | function | Visits the front page when initializing Mink. | 3 | |||
BrowserTestBase::initMink | protected | function | Initializes Mink sessions. | 1 | |||
BrowserTestBase::installDrupal | public | function | Installs Drupal into the test site. | 2 | |||
BrowserTestBase::registerSessions | protected | function | Registers additional Mink sessions. | ||||
BrowserTestBase::setUpAppRoot | protected | function | Sets up the root application path. | ||||
BrowserTestBase::setUpBeforeClass | public static | function | 1 | ||||
BrowserTestBase::tearDown | protected | function | 3 | ||||
BrowserTestBase::translatePostValues | protected | function | Transforms a nested array into a flat array suitable for submitForm(). | ||||
BrowserTestBase::xpath | protected | function | Performs an xpath search on the contents of the internal browser. | ||||
BrowserTestBase::__get | public | function | |||||
BrowserTestBase::__sleep | public | function | Prevents serializing any properties. | ||||
ConfigTestTrait::configImporter | protected | function | Returns a ConfigImporter object to import test configuration. | ||||
ConfigTestTrait::copyConfig | protected | function | Copies configuration objects from source storage to target storage. | ||||
ContentTypeCreationTrait::createContentType | protected | function | Creates a custom content type based on default settings. | Aliased as: drupalCreateContentType | 1 | ||
ExtensionListTestTrait::getModulePath | protected | function | Gets the path for the specified module. | ||||
ExtensionListTestTrait::getThemePath | protected | function | Gets the path for the specified theme. | ||||
FunctionalTestSetupTrait::$apcuEnsureUniquePrefix | protected | property | The flag to set 'apcu_ensure_unique_prefix' setting. | 1 | |||
FunctionalTestSetupTrait::$classLoader | protected | property | The class loader to use for installation and initialization of setup. | ||||
FunctionalTestSetupTrait::$rootUser | protected | property | The "#1" admin user. | ||||
FunctionalTestSetupTrait::$usesSuperUserAccessPolicy | protected | property | Set to TRUE to make user 1 a super user. | 10 | |||
FunctionalTestSetupTrait::doInstall | protected | function | Execute the non-interactive installer. | 2 | |||
FunctionalTestSetupTrait::getDatabaseTypes | protected | function | Returns all supported database driver installer objects. | ||||
FunctionalTestSetupTrait::initConfig | protected | function | Initialize various configurations post-installation. | 1 | |||
FunctionalTestSetupTrait::initKernel | protected | function | Initializes the kernel after installation. | ||||
FunctionalTestSetupTrait::initSettings | protected | function | Initialize settings created during install. | ||||
FunctionalTestSetupTrait::initUserSession | protected | function | Initializes user 1 for the site to be installed. | ||||
FunctionalTestSetupTrait::installDefaultThemeFromClassProperty | protected | function | Installs the default theme defined by `static::$defaultTheme` when needed. | 1 | |||
FunctionalTestSetupTrait::installModulesFromClassProperty | protected | function | Install modules defined by `static::$modules`. | 1 | |||
FunctionalTestSetupTrait::installParameters | protected | function | Returns the parameters that will be used when the test installs Drupal. | 8 | |||
FunctionalTestSetupTrait::prepareEnvironment | protected | function | Prepares the current environment for running the test. | 28 | |||
FunctionalTestSetupTrait::prepareRequestForGenerator | protected | function | Creates a mock request and sets it on the generator. | ||||
FunctionalTestSetupTrait::prepareSettings | protected | function | Prepares site settings and services before installation. | 4 | |||
FunctionalTestSetupTrait::rebuildAll | protected | function | Resets and rebuilds the environment after setup. | ||||
FunctionalTestSetupTrait::rebuildContainer | protected | function | Rebuilds \Drupal::getContainer(). | ||||
FunctionalTestSetupTrait::resetAll | protected | function | Resets all data structures after having enabled new modules. | ||||
FunctionalTestSetupTrait::setContainerParameter | protected | function | Changes parameters in the services.yml file. | ||||
FunctionalTestSetupTrait::setupBaseUrl | protected | function | Sets up the base URL based upon the environment variable. | ||||
FunctionalTestSetupTrait::writeSettings | protected | function | Rewrites the settings.php file of the test site. | 1 | |||
ImageFieldCreationTrait::createImageField | protected | function | Create a new image field. | ||||
ImageFieldTestBase::$adminUser | protected | property | A user with permissions to administer content types and image styles. | ||||
ImageFieldTestBase::getLastFileId | protected | function | Retrieves the fid of the last inserted file. | ||||
ImageFieldTestBase::previewNodeImage | public | function | Preview an image in a node. | ||||
ImageFieldTestBase::uploadNodeImage | public | function | Upload an image to a node. | ||||
NodeCreationTrait::createNode | protected | function | Creates a node based on default settings. | Aliased as: drupalCreateNode | |||
NodeCreationTrait::getNodeByTitle | public | function | Get a node from the database based on its title. | Aliased as: drupalGetNodeByTitle | |||
PhpUnitWarnings::$deprecationWarnings | private static | property | Deprecation warnings from PHPUnit to raise with @trigger_error(). | ||||
PhpUnitWarnings::addWarning | public | function | Converts PHPUnit deprecation warnings to E_USER_DEPRECATED. | ||||
RandomGeneratorTrait::getRandomGenerator | protected | function | Gets the random generator for the utility methods. | ||||
RandomGeneratorTrait::randomMachineName | protected | function | Generates a unique random string containing letters and numbers. | ||||
RandomGeneratorTrait::randomObject | public | function | Generates a random PHP object. | ||||
RandomGeneratorTrait::randomString | public | function | Generates a pseudo-random string of ASCII characters of codes 32 to 126. | ||||
RandomGeneratorTrait::randomStringValidate | Deprecated | public | function | Callback for random string validation. | |||
RefreshVariablesTrait::refreshVariables | protected | function | Refreshes in-memory configuration and state information. | 2 | |||
ResponsiveImageFieldDisplayTest::$defaultTheme | protected | property | The theme to install as the default for testing. | Overrides BrowserTestBase::$defaultTheme | |||
ResponsiveImageFieldDisplayTest::$fileUrlGenerator | protected | property | The file URL generator. | ||||
ResponsiveImageFieldDisplayTest::$modules | protected static | property | Modules to install. | Overrides ImageFieldTestBase::$modules | |||
ResponsiveImageFieldDisplayTest::$responsiveImgStyle | protected | property | Responsive image style entity instance we test with. | ||||
ResponsiveImageFieldDisplayTest::addTestImageStyleMappings | protected | function | Add image style mappings to the responsive image style entity. | ||||
ResponsiveImageFieldDisplayTest::assertResponsiveImageFieldFormattersLink | private | function | Tests responsive image formatters linked to the file or node. | ||||
ResponsiveImageFieldDisplayTest::doTestResponsiveImageFieldFormatters | protected | function | Tests responsive image formatters on node display. | ||||
ResponsiveImageFieldDisplayTest::setUp | protected | function | Overrides ImageFieldTestBase::setUp | ||||
ResponsiveImageFieldDisplayTest::testResponsiveImageFieldFormattersEmptyMediaQuery | public | function | Tests responsive image formatter on node display with an empty media query. | ||||
ResponsiveImageFieldDisplayTest::testResponsiveImageFieldFormattersEmptyStyle | public | function | Tests responsive image formatters when image style is empty. | ||||
ResponsiveImageFieldDisplayTest::testResponsiveImageFieldFormattersLinkToFile | public | function | Tests responsive image formatters on node display linked to the file. | ||||
ResponsiveImageFieldDisplayTest::testResponsiveImageFieldFormattersLinkToNode | public | function | Tests responsive image formatters on node display linked to the node. | ||||
ResponsiveImageFieldDisplayTest::testResponsiveImageFieldFormattersMultipleSources | public | function | Tests responsive image formatter on node display with one and two sources. | ||||
ResponsiveImageFieldDisplayTest::testResponsiveImageFieldFormattersPrivate | public | function | Tests responsive image formatters on node display for private files. | ||||
ResponsiveImageFieldDisplayTest::testResponsiveImageFieldFormattersPublic | public | function | Tests responsive image formatters on node display for public files. | ||||
SessionTestTrait::$sessionName | protected | property | The name of the session cookie. | ||||
SessionTestTrait::generateSessionName | protected | function | Generates a session cookie name. | ||||
SessionTestTrait::getSessionName | protected | function | Returns the session name in use on the child site. | ||||
StorageCopyTrait::replaceStorageContents | protected static | function | Copy the configuration from one storage to another and remove stale items. | ||||
TestFileCreationTrait::$generatedTestFiles | protected | property | Whether the files were copied to the test files directory. | ||||
TestFileCreationTrait::compareFiles | protected | function | Compares two files based on size and file name. | ||||
TestFileCreationTrait::generateFile | public static | function | Generates a test file. | ||||
TestFileCreationTrait::getTestFiles | protected | function | Gets a list of files that can be used in tests. | ||||
TestRequirementsTrait::checkModuleRequirements | Deprecated | private | function | Checks missing module requirements. | |||
TestRequirementsTrait::checkRequirements | Deprecated | protected | function | Check module requirements for the Drupal use case. | |||
TestRequirementsTrait::getDrupalRoot | protected static | function | Returns the Drupal root directory. | ||||
TestSetupTrait::$configSchemaCheckerExclusions | protected static | property | An array of config object names that are excluded from schema checking. | 2 | |||
TestSetupTrait::$container | protected | property | The dependency injection container used in the test. | ||||
TestSetupTrait::$databasePrefix | protected | property | The database prefix of this test run. | ||||
TestSetupTrait::$kernel | protected | property | The DrupalKernel instance used in the test. | ||||
TestSetupTrait::$originalSite | protected | property | The site directory of the original parent site. | ||||
TestSetupTrait::$privateFilesDirectory | protected | property | The private file directory for the test environment. | ||||
TestSetupTrait::$publicFilesDirectory | protected | property | The public file directory for the test environment. | ||||
TestSetupTrait::$root | protected | property | The app root. | ||||
TestSetupTrait::$siteDirectory | protected | property | The site directory of this test run. | ||||
TestSetupTrait::$strictConfigSchema | protected | property | Set to TRUE to strict check all configuration saved. | 4 | |||
TestSetupTrait::$tempFilesDirectory | protected | property | The temporary file directory for the test environment. | ||||
TestSetupTrait::$testId | protected | property | The test run ID. | ||||
TestSetupTrait::changeDatabasePrefix | protected | function | Changes the database connection to the prefixed one. | ||||
TestSetupTrait::getConfigSchemaExclusions | protected | function | Gets the config schema exclusions for this test. | ||||
TestSetupTrait::getDatabaseConnection | Deprecated | public static | function | Returns the database connection to the site under test. | |||
TestSetupTrait::prepareDatabasePrefix | protected | function | Generates a database prefix for running tests. | 1 | |||
UiHelperTrait::$loggedInUser | protected | property | The current user logged in using the Mink controlled browser. | ||||
UiHelperTrait::$maximumMetaRefreshCount | protected | property | The number of meta refresh redirects to follow, or NULL if unlimited. | ||||
UiHelperTrait::$metaRefreshCount | protected | property | The number of meta refresh redirects followed during ::drupalGet(). | ||||
UiHelperTrait::$useOneTimeLoginLinks | protected | property | Use one-time login links instead of submitting the login form. | 3 | |||
UiHelperTrait::assertSession | public | function | Returns WebAssert object. | 1 | |||
UiHelperTrait::buildUrl | protected | function | Builds an absolute URL from a system path or a URL object. | ||||
UiHelperTrait::checkForMetaRefresh | protected | function | Checks for meta refresh tag and if found call drupalGet() recursively. | ||||
UiHelperTrait::click | protected | function | Clicks the element with the given CSS selector. | ||||
UiHelperTrait::clickLink | protected | function | Follows a link by complete name. | ||||
UiHelperTrait::cssSelect | protected | function | Searches elements using a CSS selector in the raw content. | ||||
UiHelperTrait::cssSelectToXpath | protected | function | Translates a CSS expression to its XPath equivalent. | ||||
UiHelperTrait::drupalGet | protected | function | Retrieves a Drupal path or an absolute path. | 3 | |||
UiHelperTrait::drupalLogin | protected | function | Logs in a user using the Mink controlled browser. | ||||
UiHelperTrait::drupalLogout | protected | function | Logs a user out of the Mink controlled browser and confirms. | ||||
UiHelperTrait::drupalResetSession | protected | function | Resets the current active session back to Anonymous session. | ||||
UiHelperTrait::drupalUserIsLoggedIn | protected | function | Returns whether a given user account is logged in. | ||||
UiHelperTrait::getAbsoluteUrl | protected | function | Takes a path and returns an absolute path. | ||||
UiHelperTrait::getTextContent | protected | function | Retrieves the plain-text content from the current page. | ||||
UiHelperTrait::getUrl | protected | function | Get the current URL from the browser. | ||||
UiHelperTrait::isTestUsingGuzzleClient | protected | function | Determines if test is using DrupalTestBrowser. | ||||
UiHelperTrait::prepareRequest | protected | function | Prepare for a request to testing site. | 1 | |||
UiHelperTrait::submitForm | protected | function | Fills and submits a form. | ||||
UserCreationTrait::checkPermissions | protected | function | Checks whether a given list of permission names is valid. | ||||
UserCreationTrait::createAdminRole | protected | function | Creates an administrative role. | ||||
UserCreationTrait::createRole | protected | function | Creates a role with specified permissions. | Aliased as: drupalCreateRole | |||
UserCreationTrait::createUser | protected | function | Create a user with a given set of permissions. | Aliased as: drupalCreateUser | |||
UserCreationTrait::grantPermissions | protected | function | Grant permissions to a user role. | ||||
UserCreationTrait::setCurrentUser | protected | function | Switch the current logged in user. | ||||
UserCreationTrait::setUpCurrentUser | protected | function | Creates a random user account and sets it as current user. | ||||
XdebugRequestTrait::extractCookiesFromRequest | protected | function | Adds xdebug cookies, from request setup. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.