/core/modules/image/src/Tests/ImageDimensionsTest.php
https://gitlab.com/reasonat/test8 · PHP · 290 lines · 221 code · 31 blank · 38 comment · 0 complexity · e16e0b703e7086c1ba4b7a84832ecb83 MD5 · raw file
- <?php
- namespace Drupal\image\Tests;
- use Drupal\image\Entity\ImageStyle;
- use Drupal\simpletest\WebTestBase;
- /**
- * Tests that images have correct dimensions when styled.
- *
- * @group image
- */
- class ImageDimensionsTest extends WebTestBase {
- /**
- * Modules to enable.
- *
- * @var array
- */
- public static $modules = array('image', 'image_module_test');
- protected $profile = 'testing';
- /**
- * Test styled image dimensions cumulatively.
- */
- function testImageDimensions() {
- $image_factory = $this->container->get('image.factory');
- // Create a working copy of the file.
- $files = $this->drupalGetTestFiles('image');
- $file = reset($files);
- $original_uri = file_unmanaged_copy($file->uri, 'public://', FILE_EXISTS_RENAME);
- // Create a style.
- /** @var $style \Drupal\image\ImageStyleInterface */
- $style = ImageStyle::create(array('name' => 'test', 'label' => 'Test'));
- $style->save();
- $generated_uri = 'public://styles/test/public/' . \Drupal::service('file_system')->basename($original_uri);
- $url = file_url_transform_relative($style->buildUrl($original_uri));
- $variables = array(
- '#theme' => 'image_style',
- '#style_name' => 'test',
- '#uri' => $original_uri,
- '#width' => 40,
- '#height' => 20,
- );
- // Verify that the original image matches the hard-coded values.
- $image_file = $image_factory->get($original_uri);
- $this->assertEqual($image_file->getWidth(), $variables['#width']);
- $this->assertEqual($image_file->getHeight(), $variables['#height']);
- // Scale an image that is wider than it is high.
- $effect = array(
- 'id' => 'image_scale',
- 'data' => array(
- 'width' => 120,
- 'height' => 90,
- 'upscale' => TRUE,
- ),
- 'weight' => 0,
- );
- $style->addImageEffect($effect);
- $style->save();
- $this->assertEqual($this->getImageTag($variables), '<img src="' . $url . '" width="120" height="60" alt="" class="image-style-test" />');
- $this->assertFalse(file_exists($generated_uri), 'Generated file does not exist.');
- $this->drupalGet($this->getAbsoluteUrl($url));
- $this->assertResponse(200, 'Image was generated at the URL.');
- $this->assertTrue(file_exists($generated_uri), 'Generated file does exist after we accessed it.');
- $image_file = $image_factory->get($generated_uri);
- $this->assertEqual($image_file->getWidth(), 120);
- $this->assertEqual($image_file->getHeight(), 60);
- // Rotate 90 degrees anticlockwise.
- $effect = array(
- 'id' => 'image_rotate',
- 'data' => array(
- 'degrees' => -90,
- 'random' => FALSE,
- ),
- 'weight' => 1,
- );
- $style->addImageEffect($effect);
- $style->save();
- $this->assertEqual($this->getImageTag($variables), '<img src="' . $url . '" width="60" height="120" alt="" class="image-style-test" />');
- $this->assertFalse(file_exists($generated_uri), 'Generated file does not exist.');
- $this->drupalGet($this->getAbsoluteUrl($url));
- $this->assertResponse(200, 'Image was generated at the URL.');
- $this->assertTrue(file_exists($generated_uri), 'Generated file does exist after we accessed it.');
- $image_file = $image_factory->get($generated_uri);
- $this->assertEqual($image_file->getWidth(), 60);
- $this->assertEqual($image_file->getHeight(), 120);
- // Scale an image that is higher than it is wide (rotated by previous effect).
- $effect = array(
- 'id' => 'image_scale',
- 'data' => array(
- 'width' => 120,
- 'height' => 90,
- 'upscale' => TRUE,
- ),
- 'weight' => 2,
- );
- $style->addImageEffect($effect);
- $style->save();
- $this->assertEqual($this->getImageTag($variables), '<img src="' . $url . '" width="45" height="90" alt="" class="image-style-test" />');
- $this->assertFalse(file_exists($generated_uri), 'Generated file does not exist.');
- $this->drupalGet($this->getAbsoluteUrl($url));
- $this->assertResponse(200, 'Image was generated at the URL.');
- $this->assertTrue(file_exists($generated_uri), 'Generated file does exist after we accessed it.');
- $image_file = $image_factory->get($generated_uri);
- $this->assertEqual($image_file->getWidth(), 45);
- $this->assertEqual($image_file->getHeight(), 90);
- // Test upscale disabled.
- $effect = array(
- 'id' => 'image_scale',
- 'data' => array(
- 'width' => 400,
- 'height' => 200,
- 'upscale' => FALSE,
- ),
- 'weight' => 3,
- );
- $style->addImageEffect($effect);
- $style->save();
- $this->assertEqual($this->getImageTag($variables), '<img src="' . $url . '" width="45" height="90" alt="" class="image-style-test" />');
- $this->assertFalse(file_exists($generated_uri), 'Generated file does not exist.');
- $this->drupalGet($this->getAbsoluteUrl($url));
- $this->assertResponse(200, 'Image was generated at the URL.');
- $this->assertTrue(file_exists($generated_uri), 'Generated file does exist after we accessed it.');
- $image_file = $image_factory->get($generated_uri);
- $this->assertEqual($image_file->getWidth(), 45);
- $this->assertEqual($image_file->getHeight(), 90);
- // Add a desaturate effect.
- $effect = array(
- 'id' => 'image_desaturate',
- 'data' => array(),
- 'weight' => 4,
- );
- $style->addImageEffect($effect);
- $style->save();
- $this->assertEqual($this->getImageTag($variables), '<img src="' . $url . '" width="45" height="90" alt="" class="image-style-test" />');
- $this->assertFalse(file_exists($generated_uri), 'Generated file does not exist.');
- $this->drupalGet($this->getAbsoluteUrl($url));
- $this->assertResponse(200, 'Image was generated at the URL.');
- $this->assertTrue(file_exists($generated_uri), 'Generated file does exist after we accessed it.');
- $image_file = $image_factory->get($generated_uri);
- $this->assertEqual($image_file->getWidth(), 45);
- $this->assertEqual($image_file->getHeight(), 90);
- // Add a random rotate effect.
- $effect = array(
- 'id' => 'image_rotate',
- 'data' => array(
- 'degrees' => 180,
- 'random' => TRUE,
- ),
- 'weight' => 5,
- );
- $style->addImageEffect($effect);
- $style->save();
- $this->assertEqual($this->getImageTag($variables), '<img src="' . $url . '" alt="" class="image-style-test" />');
- $this->assertFalse(file_exists($generated_uri), 'Generated file does not exist.');
- $this->drupalGet($this->getAbsoluteUrl($url));
- $this->assertResponse(200, 'Image was generated at the URL.');
- $this->assertTrue(file_exists($generated_uri), 'Generated file does exist after we accessed it.');
- // Add a crop effect.
- $effect = array(
- 'id' => 'image_crop',
- 'data' => array(
- 'width' => 30,
- 'height' => 30,
- 'anchor' => 'center-center',
- ),
- 'weight' => 6,
- );
- $style->addImageEffect($effect);
- $style->save();
- $this->assertEqual($this->getImageTag($variables), '<img src="' . $url . '" width="30" height="30" alt="" class="image-style-test" />');
- $this->assertFalse(file_exists($generated_uri), 'Generated file does not exist.');
- $this->drupalGet($this->getAbsoluteUrl($url));
- $this->assertResponse(200, 'Image was generated at the URL.');
- $this->assertTrue(file_exists($generated_uri), 'Generated file does exist after we accessed it.');
- $image_file = $image_factory->get($generated_uri);
- $this->assertEqual($image_file->getWidth(), 30);
- $this->assertEqual($image_file->getHeight(), 30);
- // Rotate to a non-multiple of 90 degrees.
- $effect = array(
- 'id' => 'image_rotate',
- 'data' => array(
- 'degrees' => 57,
- 'random' => FALSE,
- ),
- 'weight' => 7,
- );
- $effect_id = $style->addImageEffect($effect);
- $style->save();
- $this->assertEqual($this->getImageTag($variables), '<img src="' . $url . '" width="41" height="41" alt="" class="image-style-test" />');
- $this->assertFalse(file_exists($generated_uri), 'Generated file does not exist.');
- $this->drupalGet($this->getAbsoluteUrl($url));
- $this->assertResponse(200, 'Image was generated at the URL.');
- $this->assertTrue(file_exists($generated_uri), 'Generated file does exist after we accessed it.');
- $image_file = $image_factory->get($generated_uri);
- $this->assertEqual($image_file->getWidth(), 41);
- $this->assertEqual($image_file->getHeight(), 41);
- $effect_plugin = $style->getEffect($effect_id);
- $style->deleteImageEffect($effect_plugin);
- // Ensure that an effect can unset dimensions.
- $effect = array(
- 'id' => 'image_module_test_null',
- 'data' => array(),
- 'weight' => 8,
- );
- $style->addImageEffect($effect);
- $style->save();
- $this->assertEqual($this->getImageTag($variables), '<img src="' . $url . '" alt="" class="image-style-test" />');
- // Test URI dependent image effect.
- $style = ImageStyle::create(['name' => 'test_uri', 'label' => 'Test URI']);
- $effect = [
- 'id' => 'image_module_test_uri_dependent',
- 'data' => [],
- 'weight' => 0,
- ];
- $style->addImageEffect($effect);
- $style->save();
- $variables = [
- '#theme' => 'image_style',
- '#style_name' => 'test_uri',
- '#uri' => $original_uri,
- '#width' => 40,
- '#height' => 20,
- ];
- // PNG original image. Should be resized to 100x100.
- $generated_uri = 'public://styles/test_uri/public/' . \Drupal::service('file_system')->basename($original_uri);
- $url = file_url_transform_relative($style->buildUrl($original_uri));
- $this->assertEqual($this->getImageTag($variables), '<img src="' . $url . '" width="100" height="100" alt="" class="image-style-test-uri" />');
- $this->assertFalse(file_exists($generated_uri), 'Generated file does not exist.');
- $this->drupalGet($this->getAbsoluteUrl($url));
- $this->assertResponse(200, 'Image was generated at the URL.');
- $this->assertTrue(file_exists($generated_uri), 'Generated file does exist after we accessed it.');
- $image_file = $image_factory->get($generated_uri);
- $this->assertEqual($image_file->getWidth(), 100);
- $this->assertEqual($image_file->getHeight(), 100);
- // GIF original image. Should be resized to 50x50.
- $file = $files[1];
- $original_uri = file_unmanaged_copy($file->uri, 'public://', FILE_EXISTS_RENAME);
- $generated_uri = 'public://styles/test_uri/public/' . \Drupal::service('file_system')->basename($original_uri);
- $url = file_url_transform_relative($style->buildUrl($original_uri));
- $variables['#uri'] = $original_uri;
- $this->assertEqual($this->getImageTag($variables), '<img src="' . $url . '" width="50" height="50" alt="" class="image-style-test-uri" />');
- $this->assertFalse(file_exists($generated_uri), 'Generated file does not exist.');
- $this->drupalGet($this->getAbsoluteUrl($url));
- $this->assertResponse(200, 'Image was generated at the URL.');
- $this->assertTrue(file_exists($generated_uri), 'Generated file does exist after we accessed it.');
- $image_file = $image_factory->get($generated_uri);
- $this->assertEqual($image_file->getWidth(), 50);
- $this->assertEqual($image_file->getHeight(), 50);
- }
- /**
- * Render an image style element.
- *
- * drupal_render() alters the passed $variables array by adding a new key
- * '#printed' => TRUE. This prevents next call to re-render the element. We
- * wrap drupal_render() in a helper protected method and pass each time a
- * fresh array so that $variables won't get altered and the element is
- * re-rendered each time.
- */
- protected function getImageTag($variables) {
- return str_replace("\n", NULL, \Drupal::service('renderer')->renderRoot($variables));
- }
- }