Version 1
[yaffs-website] / web / core / tests / Drupal / KernelTests / Core / Theme / ImageTest.php
diff --git a/web/core/tests/Drupal/KernelTests/Core/Theme/ImageTest.php b/web/core/tests/Drupal/KernelTests/Core/Theme/ImageTest.php
new file mode 100644 (file)
index 0000000..72cecce
--- /dev/null
@@ -0,0 +1,145 @@
+<?php
+
+namespace Drupal\KernelTests\Core\Theme;
+
+use Drupal\KernelTests\KernelTestBase;
+use Symfony\Component\HttpFoundation\Request;
+
+/**
+ * Tests built-in image theme functions.
+ *
+ * @group Theme
+ */
+class ImageTest extends KernelTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['system'];
+
+  /*
+   * The images to test with.
+   *
+   * @var array
+   */
+  protected $testImages;
+
+  protected function setUp() {
+    parent::setUp();
+
+    // The code under test uses file_url_transform_relative(), which relies on
+    // the Request containing the correct hostname. KernelTestBase doesn't set
+    // it, so push another request onto the stack to ensure it's correct.
+    $request = Request::create('/', 'GET', [], [], [], $_SERVER);
+    $this->container = \Drupal::service('kernel')->getContainer();
+    $this->container->get('request_stack')->push($request);
+
+    $this->testImages = [
+      'core/misc/druplicon.png',
+      'core/misc/loading.gif',
+    ];
+  }
+
+  /**
+   * Tests that an image with the sizes attribute is output correctly.
+   */
+  public function testThemeImageWithSizes() {
+    // Test with multipliers.
+    $sizes = '(max-width: ' . rand(10, 30) . 'em) 100vw, (max-width: ' . rand(30, 50) . 'em) 50vw, 30vw';
+    $image = [
+      '#theme' => 'image',
+      '#sizes' => $sizes,
+      '#uri' => reset($this->testImages),
+      '#width' => rand(0, 1000) . 'px',
+      '#height' => rand(0, 500) . 'px',
+      '#alt' => $this->randomMachineName(),
+      '#title' => $this->randomMachineName(),
+    ];
+    $this->render($image);
+
+    // Make sure sizes is set.
+    $this->assertRaw($sizes, 'Sizes is set correctly.');
+  }
+
+  /**
+   * Tests that an image with the src attribute is output correctly.
+   */
+  public function testThemeImageWithSrc() {
+
+    $image = [
+      '#theme' => 'image',
+      '#uri' => reset($this->testImages),
+      '#width' => rand(0, 1000) . 'px',
+      '#height' => rand(0, 500) . 'px',
+      '#alt' => $this->randomMachineName(),
+      '#title' => $this->randomMachineName(),
+    ];
+    $this->render($image);
+
+    // Make sure the src attribute has the correct value.
+    $this->assertRaw(file_url_transform_relative(file_create_url($image['#uri'])), 'Correct output for an image with the src attribute.');
+  }
+
+  /**
+   * Tests that an image with the srcset and multipliers is output correctly.
+   */
+  public function testThemeImageWithSrcsetMultiplier() {
+    // Test with multipliers.
+    $image = [
+      '#theme' => 'image',
+      '#srcset' => [
+        [
+          'uri' => $this->testImages[0],
+          'multiplier' => '1x',
+        ],
+        [
+          'uri' => $this->testImages[1],
+          'multiplier' => '2x',
+        ],
+      ],
+      '#width' => rand(0, 1000) . 'px',
+      '#height' => rand(0, 500) . 'px',
+      '#alt' => $this->randomMachineName(),
+      '#title' => $this->randomMachineName(),
+    ];
+    $this->render($image);
+
+    // Make sure the srcset attribute has the correct value.
+    $this->assertRaw(file_url_transform_relative(file_create_url($this->testImages[0])) . ' 1x, ' . file_url_transform_relative(file_create_url($this->testImages[1])) . ' 2x', 'Correct output for image with srcset attribute and multipliers.');
+  }
+
+  /**
+   * Tests that an image with the srcset and widths is output correctly.
+   */
+  public function testThemeImageWithSrcsetWidth() {
+    // Test with multipliers.
+    $widths = [
+      rand(0, 500) . 'w',
+      rand(500, 1000) . 'w',
+    ];
+    $image = [
+      '#theme' => 'image',
+      '#srcset' => [
+        [
+          'uri' => $this->testImages[0],
+          'width' => $widths[0],
+        ],
+        [
+          'uri' => $this->testImages[1],
+          'width' => $widths[1],
+        ],
+      ],
+      '#width' => rand(0, 1000) . 'px',
+      '#height' => rand(0, 500) . 'px',
+      '#alt' => $this->randomMachineName(),
+      '#title' => $this->randomMachineName(),
+    ];
+    $this->render($image);
+
+    // Make sure the srcset attribute has the correct value.
+    $this->assertRaw(file_url_transform_relative(file_create_url($this->testImages[0])) . ' ' . $widths[0] . ', ' . file_url_transform_relative(file_create_url($this->testImages[1])) . ' ' . $widths[1], 'Correct output for image with srcset attribute and width descriptors.');
+  }
+
+}