trait ToolkitTestTrait in Drupal 10
Same name and namespace in other branches
- 9 core/tests/Drupal/Tests/Traits/Core/Image/ToolkitTestTrait.php \Drupal\Tests\Traits\Core\Image\ToolkitTestTrait
Provides common methods for image toolkit kernel tests.
The testing class must ensure that image_test.module is enabled.
Hierarchy
- trait \Drupal\Tests\Traits\Core\Image\ToolkitTestTrait uses \Drupal\Tests\TestFileCreationTrait
1 file declares its use of ToolkitTestTrait
- ImageEffectsTest.php in core/
modules/ image/ tests/ src/ Kernel/ ImageEffectsTest.php
File
- core/
tests/ Drupal/ Tests/ Traits/ Core/ Image/ ToolkitTestTrait.php, line 13
Namespace
Drupal\Tests\Traits\Core\ImageView source
trait ToolkitTestTrait {
use TestFileCreationTrait {
getTestFiles as drupalGetTestFiles;
}
/**
* Resets/initializes the history of calls to the test toolkit functions.
*/
protected function imageTestReset() : void {
\Drupal::state()
->delete('image_test.results');
}
/**
* Assert that all of the specified image toolkit operations were called once.
*
* @param string[] $expected
* String array containing the operation names, e.g. load, save, crop, etc.
*/
public function assertToolkitOperationsCalled(array $expected) : void {
// If one of the image operations is expected, 'apply' should be expected as
// well.
$operations = [
'resize',
'rotate',
'crop',
'desaturate',
'create_new',
'scale',
'scale_and_crop',
'my_operation',
'convert',
];
if (count(array_intersect($expected, $operations)) > 0 && !in_array('apply', $expected)) {
$expected[] = 'apply';
}
// Determine which operations were called.
$actual = array_keys(array_filter($this
->imageTestGetAllCalls()));
// Determine if there were any expected that were not called.
$uncalled = array_diff($expected, $actual);
$this
->assertEmpty($uncalled);
// Determine if there were any unexpected calls. If all unexpected calls are
// operations and apply was expected, we do not count it as an error.
$unexpected = array_diff($actual, $expected);
$assert = !(count($unexpected) && (!in_array('apply', $expected) || count(array_intersect($unexpected, $operations)) !== count($unexpected)));
$this
->assertTrue($assert);
}
/**
* Gets an array of calls to the 'test' toolkit.
*
* @return array
* An array keyed by operation name ('parseFile', 'save', 'settings',
* 'resize', 'rotate', 'crop', 'desaturate') with values being arrays of
* parameters passed to each call.
*/
protected function imageTestGetAllCalls() : array {
return \Drupal::state()
->get('image_test.results', []);
}
/**
* Sets up an image with the custom toolkit.
*
* @return \Drupal\Core\Image\ImageInterface
* The image object.
*/
protected function getImage() : ImageInterface {
$image_factory = \Drupal::service('image.factory');
$file = current($this
->drupalGetTestFiles('image'));
$image = $image_factory
->get($file->uri, 'test');
$this
->assertTrue($image
->isValid());
return $image;
}
/**
* Asserts the effect processing of an image effect plugin.
*
* @param string[] $expected_operations
* String array containing the operation names, e.g. load, save, crop, etc.
* @param string $effect_name
* The name of the image effect to test.
* @param array $data
* The data to be passed to the image effect.
*/
protected function assertImageEffect(array $expected_operations, string $effect_name, array $data) : void {
$effect = $this->imageEffectPluginManager
->createInstance($effect_name, [
'data' => $data,
]);
$image = $this
->getImage();
$this
->imageTestReset();
$this
->assertTrue($effect
->applyEffect($image));
$this
->assertToolkitOperationsCalled($expected_operations);
}
}