Version 1
[yaffs-website] / web / modules / contrib / crop / tests / src / Kernel / CropEffectTest.php
diff --git a/web/modules/contrib/crop/tests/src/Kernel/CropEffectTest.php b/web/modules/contrib/crop/tests/src/Kernel/CropEffectTest.php
new file mode 100644 (file)
index 0000000..46d656c
--- /dev/null
@@ -0,0 +1,98 @@
+<?php
+
+namespace Drupal\Tests\crop\Kernel;
+
+/**
+ * Tests the crop image effect.
+ *
+ * @group crop
+ */
+class CropEffectTest extends CropUnitTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['user', 'image', 'crop', 'file', 'system'];
+
+  /**
+   * Tests manual crop image effect.
+   */
+  public function testCropEffect() {
+    // Create image to be cropped.
+    $file = $this->getTestFile();
+    $file->save();
+
+    // Create crop.
+    $values = [
+      'type' => $this->cropType->id(),
+      'entity_id' => $file->id(),
+      'entity_type' => 'file',
+      'uri' => $file->getFileUri(),
+      'x' => '190',
+      'y' => '120',
+      'width' => '50',
+      'height' => '50',
+    ];
+    /** @var \Drupal\crop\CropInterface $crop */
+    $crop = $this->container->get('entity.manager')->getStorage('crop')->create($values);
+    $crop->save();
+
+    $derivative_uri = $this->testStyle->buildUri($file->getFileUri());
+    $this->testStyle->createDerivative($file->getFileUri(), $derivative_uri);
+
+    $this->assertTrue(file_exists($derivative_uri), 'Image derivative file exists on the filesystem.');
+
+    // Test if cropped version looks like expected. Basically loop pixels,
+    // in derivative image and check if they look the same as pixels,
+    // in corresponding region on original image.
+    $original_image = imagecreatefrompng($file->getFileUri());
+    $derivative_image = imagecreatefrompng($derivative_uri);
+    $orig_start = $crop->anchor();
+    $matches = TRUE;
+    for ($x = 0; $x < $values['width']; $x++) {
+      for ($y = 0; $y < $values['height']; $y++) {
+        if (imagecolorat($derivative_image, $x, $y) != imagecolorat($original_image, $orig_start['x'] + $x, $orig_start['y'] + $y)) {
+          $matches = FALSE;
+          break;
+        }
+      }
+    }
+    $this->assertTrue($matches, 'Cropped image looks the same as region on original.');
+  }
+
+  /**
+   * Test image crop effect dimensions.
+   */
+  public function testCropDimenssions() {
+    // Create image to be cropped.
+    $file = $this->getTestFile();
+    $file->save();
+    $file_uri = $file->getFileUri();
+
+    // Create crop.
+    $values = [
+      'type' => $this->cropType->id(),
+      'entity_id' => $file->id(),
+      'entity_type' => 'file',
+      'uri' => $file_uri,
+      'x' => '190',
+      'y' => '120',
+      'width' => '50',
+      'height' => '50',
+    ];
+    $dimensions = ['width' => 0, 'height' => 0];
+
+    /** @var \Drupal\crop\CropInterface $crop */
+    $crop = $this->container->get('entity_type.manager')->getStorage('crop')->create($values);
+    $crop->save();
+
+    /** @var $effect \Drupal\crop\Plugin\ImageEffect\CropEffect */
+    $effect = $this->imageEffectManager->createInstance('crop_crop', ['data' => ['crop_type' => $this->cropType->id()]]);
+    $effect->transformDimensions($dimensions, $file_uri);
+
+    $this->assertEquals($crop->size(), $dimensions, t('CropEffect::transformDimensions() transform image dimensions correctly.'));
+  }
+
+}