Commit 66e279cb authored by catch's avatar catch

Issue #1591434 by aspilicious: Convert image tests to PSR-0.

parent 0ed0e58c
......@@ -4,5 +4,4 @@ package = Core
version = VERSION
core = 8.x
dependencies[] = file
files[] = image.test
configure = admin/config/media/image-styles
This diff is collapsed.
<?php
/**
* @file
* Definition of Drupal\image\Tests\ImageAdminStylesTest.
*/
namespace Drupal\image\Tests;
/**
* Tests creation, deletion, and editing of image styles and effects.
*/
class ImageAdminStylesTest extends ImageFieldTestBase {
public static function getInfo() {
return array(
'name' => 'Image styles and effects UI configuration',
'description' => 'Tests creation, deletion, and editing of image styles and effects at the UI level.',
'group' => 'Image',
);
}
/**
* Given an image style, generate an image.
*/
function createSampleImage($style) {
static $file_path;
// First, we need to make sure we have an image in our testing
// file directory. Copy over an image on the first run.
if (!isset($file_path)) {
$files = $this->drupalGetTestFiles('image');
$file = reset($files);
$file_path = file_unmanaged_copy($file->uri);
}
return image_style_url($style['name'], $file_path) ? $file_path : FALSE;
}
/**
* Count the number of images currently create for a style.
*/
function getImageCount($style) {
return count(file_scan_directory('public://styles/' . $style['name'], '/.*/'));
}
/**
* Test creating an image style with a numeric name and ensuring it can be
* applied to an image.
*/
function testNumericStyleName() {
$style_name = rand();
$edit = array(
'name' => $style_name,
);
$this->drupalPost('admin/config/media/image-styles/add', $edit, t('Create new style'));
$this->assertRaw(t('Style %name was created.', array('%name' => $style_name)), t('Image style successfully created.'));
$options = image_style_options();
$this->assertTrue(array_key_exists($style_name, $options), t('Array key %key exists.', array('%key' => $style_name)));
}
/**
* General test to add a style, add/remove/edit effects to it, then delete it.
*/
function testStyle() {
// Setup a style to be created and effects to add to it.
$style_name = strtolower($this->randomName(10));
$style_path = 'admin/config/media/image-styles/edit/' . $style_name;
$effect_edits = array(
'image_resize' => array(
'data[width]' => 100,
'data[height]' => 101,
),
'image_scale' => array(
'data[width]' => 110,
'data[height]' => 111,
'data[upscale]' => 1,
),
'image_scale_and_crop' => array(
'data[width]' => 120,
'data[height]' => 121,
),
'image_crop' => array(
'data[width]' => 130,
'data[height]' => 131,
'data[anchor]' => 'center-center',
),
'image_desaturate' => array(
// No options for desaturate.
),
'image_rotate' => array(
'data[degrees]' => 5,
'data[random]' => 1,
'data[bgcolor]' => '#FFFF00',
),
);
// Add style form.
$edit = array(
'name' => $style_name,
);
$this->drupalPost('admin/config/media/image-styles/add', $edit, t('Create new style'));
$this->assertRaw(t('Style %name was created.', array('%name' => $style_name)), t('Image style successfully created.'));
// Add effect form.
// Add each sample effect to the style.
foreach ($effect_edits as $effect => $edit) {
// Add the effect.
$this->drupalPost($style_path, array('new' => $effect), t('Add'));
if (!empty($edit)) {
$this->drupalPost(NULL, $edit, t('Add effect'));
}
}
// Edit effect form.
// Revisit each form to make sure the effect was saved.
drupal_static_reset('image_styles');
$style = image_style_load($style_name);
foreach ($style['effects'] as $ieid => $effect) {
$this->drupalGet($style_path . '/effects/' . $ieid);
foreach ($effect_edits[$effect['name']] as $field => $value) {
$this->assertFieldByName($field, $value, t('The %field field in the %effect effect has the correct value of %value.', array('%field' => $field, '%effect' => $effect['name'], '%value' => $value)));
}
}
// Image style overview form (ordering and renaming).
// Confirm the order of effects is maintained according to the order we
// added the fields.
$effect_edits_order = array_keys($effect_edits);
$effects_order = array_values($style['effects']);
$order_correct = TRUE;
foreach ($effects_order as $index => $effect) {
if ($effect_edits_order[$index] != $effect['name']) {
$order_correct = FALSE;
}
}
$this->assertTrue($order_correct, t('The order of the effects is correctly set by default.'));
// Test the style overview form.
// Change the name of the style and adjust the weights of effects.
$style_name = strtolower($this->randomName(10));
$weight = count($effect_edits);
$edit = array(
'name' => $style_name,
);
foreach ($style['effects'] as $ieid => $effect) {
$edit['effects[' . $ieid . '][weight]'] = $weight;
$weight--;
}
// Create an image to make sure it gets flushed after saving.
$image_path = $this->createSampleImage($style);
$this->assertEqual($this->getImageCount($style), 1, t('Image style %style image %file successfully generated.', array('%style' => $style['name'], '%file' => $image_path)));
$this->drupalPost($style_path, $edit, t('Update style'));
// Note that after changing the style name, the style path is changed.
$style_path = 'admin/config/media/image-styles/edit/' . $style_name;
// Check that the URL was updated.
$this->drupalGet($style_path);
$this->assertResponse(200, t('Image style %original renamed to %new', array('%original' => $style['name'], '%new' => $style_name)));
// Check that the image was flushed after updating the style.
// This is especially important when renaming the style. Make sure that
// the old image directory has been deleted.
$this->assertEqual($this->getImageCount($style), 0, t('Image style %style was flushed after renaming the style and updating the order of effects.', array('%style' => $style['name'])));
// Load the style by the new name with the new weights.
drupal_static_reset('image_styles');
$style = image_style_load($style_name);
// Confirm the new style order was saved.
$effect_edits_order = array_reverse($effect_edits_order);
$effects_order = array_values($style['effects']);
$order_correct = TRUE;
foreach ($effects_order as $index => $effect) {
if ($effect_edits_order[$index] != $effect['name']) {
$order_correct = FALSE;
}
}
$this->assertTrue($order_correct, t('The order of the effects is correctly set by default.'));
// Image effect deletion form.
// Create an image to make sure it gets flushed after deleting an effect.
$image_path = $this->createSampleImage($style);
$this->assertEqual($this->getImageCount($style), 1, t('Image style %style image %file successfully generated.', array('%style' => $style['name'], '%file' => $image_path)));
// Test effect deletion form.
$effect = array_pop($style['effects']);
$this->drupalPost($style_path . '/effects/' . $effect['ieid'] . '/delete', array(), t('Delete'));
$this->assertRaw(t('The image effect %name has been deleted.', array('%name' => $effect['label'])), t('Image effect deleted.'));
// Style deletion form.
// Delete the style.
$this->drupalPost('admin/config/media/image-styles/delete/' . $style_name, array(), t('Delete'));
// Confirm the style directory has been removed.
$directory = file_default_scheme() . '://styles/' . $style_name;
$this->assertFalse(is_dir($directory), t('Image style %style directory removed on style deletion.', array('%style' => $style['name'])));
drupal_static_reset('image_styles');
$this->assertFalse(image_style_load($style_name), t('Image style %style successfully deleted.', array('%style' => $style['name'])));
}
/**
* Test deleting a style and choosing a replacement style.
*/
function testStyleReplacement() {
// Create a new style.
$style_name = strtolower($this->randomName(10));
image_style_save(array('name' => $style_name));
$style_path = 'admin/config/media/image-styles/edit/' . $style_name;
// Create an image field that uses the new style.
$field_name = strtolower($this->randomName(10));
$this->createImageField($field_name, 'article');
$instance = field_info_instance('node', $field_name, 'article');
$instance['display']['default']['type'] = 'image';
$instance['display']['default']['settings']['image_style'] = $style_name;
field_update_instance($instance);
// Create a new node with an image attached.
$test_image = current($this->drupalGetTestFiles('image'));
$nid = $this->uploadNodeImage($test_image, $field_name, 'article');
$node = node_load($nid);
// Test that image is displayed using newly created style.
$this->drupalGet('node/' . $nid);
$this->assertRaw(image_style_url($style_name, $node->{$field_name}[LANGUAGE_NOT_SPECIFIED][0]['uri']), t('Image displayed using style @style.', array('@style' => $style_name)));
// Rename the style and make sure the image field is updated.
$new_style_name = strtolower($this->randomName(10));
$edit = array(
'name' => $new_style_name,
);
$this->drupalPost('admin/config/media/image-styles/edit/' . $style_name, $edit, t('Update style'));
$this->assertText(t('Changes to the style have been saved.'), t('Style %name was renamed to %new_name.', array('%name' => $style_name, '%new_name' => $new_style_name)));
$this->drupalGet('node/' . $nid);
$this->assertRaw(image_style_url($new_style_name, $node->{$field_name}[LANGUAGE_NOT_SPECIFIED][0]['uri']), t('Image displayed using style replacement style.'));
// Delete the style and choose a replacement style.
$edit = array(
'replacement' => 'thumbnail',
);
$this->drupalPost('admin/config/media/image-styles/delete/' . $new_style_name, $edit, t('Delete'));
$message = t('Style %name was deleted.', array('%name' => $new_style_name));
$this->assertRaw($message, $message);
$this->drupalGet('node/' . $nid);
$this->assertRaw(image_style_url('thumbnail', $node->{$field_name}[LANGUAGE_NOT_SPECIFIED][0]['uri']), t('Image displayed using style replacement style.'));
}
}
<?php
/**
* @file
* Definition of Drupal\image\Tests\ImageDimensionsScaleUnitTest.
*/
namespace Drupal\image\Tests;
use Drupal\simpletest\UnitTestBase;
/**
* Tests image_dimensions_scale().
*/
class ImageDimensionsScaleUnitTest extends UnitTestBase {
public static function getInfo() {
return array(
'name' => 'image_dimensions_scale()',
'description' => 'Tests all control flow branches in image_dimensions_scale().',
'group' => 'Image',
);
}
/**
* Tests all control flow branches in image_dimensions_scale().
*/
function testImageDimensionsScale() {
// Define input / output datasets to test different branch conditions.
$test = array();
// Test branch conditions:
// - No height.
// - Upscale, don't need to upscale.
$tests[] = array(
'input' => array(
'dimensions' => array(
'width' => 1000,
'height' => 2000,
),
'width' => 200,
'height' => NULL,
'upscale' => TRUE,
),
'output' => array(
'dimensions' => array(
'width' => 200,
'height' => 400,
),
'return_value' => TRUE,
),
);
// Test branch conditions:
// - No width.
// - Don't upscale, don't need to upscale.
$tests[] = array(
'input' => array(
'dimensions' => array(
'width' => 1000,
'height' => 800,
),
'width' => NULL,
'height' => 140,
'upscale' => FALSE,
),
'output' => array(
'dimensions' => array(
'width' => 175,
'height' => 140,
),
'return_value' => TRUE,
),
);
// Test branch conditions:
// - Source aspect ratio greater than target.
// - Upscale, need to upscale.
$tests[] = array(
'input' => array(
'dimensions' => array(
'width' => 8,
'height' => 20,
),
'width' => 200,
'height' => 140,
'upscale' => TRUE,
),
'output' => array(
'dimensions' => array(
'width' => 56,
'height' => 140,
),
'return_value' => TRUE,
),
);
// Test branch condition: target aspect ratio greater than source.
$tests[] = array(
'input' => array(
'dimensions' => array(
'width' => 2000,
'height' => 800,
),
'width' => 200,
'height' => 140,
'upscale' => FALSE,
),
'output' => array(
'dimensions' => array(
'width' => 200,
'height' => 80,
),
'return_value' => TRUE,
),
);
// Test branch condition: don't upscale, need to upscale.
$tests[] = array(
'input' => array(
'dimensions' => array(
'width' => 100,
'height' => 50,
),
'width' => 200,
'height' => 140,
'upscale' => FALSE,
),
'output' => array(
'dimensions' => array(
'width' => 100,
'height' => 50,
),
'return_value' => FALSE,
),
);
foreach ($tests as $test) {
// Process the test dataset.
$return_value = image_dimensions_scale($test['input']['dimensions'], $test['input']['width'], $test['input']['height'], $test['input']['upscale']);
// Check the width.
$this->assertEqual($test['output']['dimensions']['width'], $test['input']['dimensions']['width'], t('Computed width (@computed_width) equals expected width (@expected_width)', array('@computed_width' => $test['output']['dimensions']['width'], '@expected_width' => $test['input']['dimensions']['width'])));
// Check the height.
$this->assertEqual($test['output']['dimensions']['height'], $test['input']['dimensions']['height'], t('Computed height (@computed_height) equals expected height (@expected_height)', array('@computed_height' => $test['output']['dimensions']['height'], '@expected_height' => $test['input']['dimensions']['height'])));
// Check the return value.
$this->assertEqual($test['output']['return_value'], $return_value, t('Correct return value.'));
}
}
}
<?php
/**
* @file
* Definition of Drupal\image\Tests\ImageDimensionsTest.
*/
namespace Drupal\image\Tests;
use Drupal\simpletest\WebTestBase;
/**
* Tests that images have correct dimensions when styled.
*/
class ImageDimensionsTest extends WebTestBase {
protected $profile = 'testing';
public static function getInfo() {
return array(
'name' => 'Image dimensions',
'description' => 'Tests that images have correct dimensions when styled.',
'group' => 'Image',
);
}
function setUp() {
parent::setUp(array('image', 'image_module_test'));
}
/**
* Test styled image dimensions cumulatively.
*/
function testImageDimensions() {
// 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.
$style = image_style_save(array('name' => 'test'));
$generated_uri = 'public://styles/test/public/'. drupal_basename($original_uri);
$url = image_style_url('test', $original_uri);
$variables = array(
'style_name' => 'test',
'uri' => $original_uri,
'width' => 40,
'height' => 20,
);
// Verify that the original image matches the hard-coded values.
$image_info = image_get_info($original_uri);
$this->assertEqual($image_info['width'], $variables['width']);
$this->assertEqual($image_info['height'], $variables['height']);
// Scale an image that is wider than it is high.
$effect = array(
'name' => 'image_scale',
'data' => array(
'width' => 120,
'height' => 90,
'upscale' => TRUE,
),
'weight' => 0,
);
image_effect_save('test', $effect);
$img_tag = theme_image_style($variables);
$this->assertEqual($img_tag, '<img src="' . $url . '" width="120" height="60" alt="" />');
$this->assertFalse(file_exists($generated_uri), t('Generated file does not exist.'));
$this->drupalGet($url);
$this->assertResponse(200, t('Image was generated at the URL.'));
$this->assertTrue(file_exists($generated_uri), t('Generated file does exist after we accessed it.'));
$image_info = image_get_info($generated_uri);
$this->assertEqual($image_info['width'], 120);
$this->assertEqual($image_info['height'], 60);
// Rotate 90 degrees anticlockwise.
$effect = array(
'name' => 'image_rotate',
'data' => array(
'degrees' => -90,
'random' => FALSE,
),
'weight' => 1,
);
image_effect_save('test', $effect);
$img_tag = theme_image_style($variables);
$this->assertEqual($img_tag, '<img src="' . $url . '" width="60" height="120" alt="" />');
$this->assertFalse(file_exists($generated_uri), t('Generated file does not exist.'));
$this->drupalGet($url);
$this->assertResponse(200, t('Image was generated at the URL.'));
$this->assertTrue(file_exists($generated_uri), t('Generated file does exist after we accessed it.'));
$image_info = image_get_info($generated_uri);
$this->assertEqual($image_info['width'], 60);
$this->assertEqual($image_info['height'], 120);
// Scale an image that is higher than it is wide (rotated by previous effect).
$effect = array(
'name' => 'image_scale',
'data' => array(
'width' => 120,
'height' => 90,
'upscale' => TRUE,
),
'weight' => 2,
);
image_effect_save('test', $effect);
$img_tag = theme_image_style($variables);
$this->assertEqual($img_tag, '<img src="' . $url . '" width="45" height="90" alt="" />');
$this->assertFalse(file_exists($generated_uri), t('Generated file does not exist.'));
$this->drupalGet($url);
$this->assertResponse(200, t('Image was generated at the URL.'));
$this->assertTrue(file_exists($generated_uri), t('Generated file does exist after we accessed it.'));
$image_info = image_get_info($generated_uri);
$this->assertEqual($image_info['width'], 45);
$this->assertEqual($image_info['height'], 90);
// Test upscale disabled.
$effect = array(
'name' => 'image_scale',
'data' => array(
'width' => 400,
'height' => 200,
'upscale' => FALSE,
),
'weight' => 3,
);
image_effect_save('test', $effect);
$img_tag = theme_image_style($variables);
$this->assertEqual($img_tag, '<img src="' . $url . '" width="45" height="90" alt="" />');
$this->assertFalse(file_exists($generated_uri), t('Generated file does not exist.'));
$this->drupalGet($url);
$this->assertResponse(200, t('Image was generated at the URL.'));
$this->assertTrue(file_exists($generated_uri), t('Generated file does exist after we accessed it.'));
$image_info = image_get_info($generated_uri);
$this->assertEqual($image_info['width'], 45);
$this->assertEqual($image_info['height'], 90);
// Add a desaturate effect.
$effect = array(
'name' => 'image_desaturate',
'data' => array(),
'weight' => 4,
);
image_effect_save('test', $effect);
$img_tag = theme_image_style($variables);
$this->assertEqual($img_tag, '<img src="' . $url . '" width="45" height="90" alt="" />');
$this->assertFalse(file_exists($generated_uri), t('Generated file does not exist.'));
$this->drupalGet($url);
$this->assertResponse(200, t('Image was generated at the URL.'));
$this->assertTrue(file_exists($generated_uri), t('Generated file does exist after we accessed it.'));
$image_info = image_get_info($generated_uri);
$this->assertEqual($image_info['width'], 45);
$this->assertEqual($image_info['height'], 90);