diff options
author | Angie Byron <webchick@24967.no-reply.drupal.org> | 2009-07-21 07:09:47 +0000 |
---|---|---|
committer | Angie Byron <webchick@24967.no-reply.drupal.org> | 2009-07-21 07:09:47 +0000 |
commit | 2da6a0ed1e32189010ff2cb9b39ecaad18250e2d (patch) | |
tree | df0bd7160b7bcdbc28e8455b099d1b284c8b42f2 /modules/image/image.test | |
parent | 6199ae64c9da0b1d2309a6657aac5f6a492c512a (diff) | |
download | brdo-2da6a0ed1e32189010ff2cb9b39ecaad18250e2d.tar.gz brdo-2da6a0ed1e32189010ff2cb9b39ecaad18250e2d.tar.bz2 |
#371374 by quicksketch, drewish, eojthebrave, and dopry: ImageCache UI in core. Hell yeah! :D Resizable, scalable, croppable, grey-scalable, rotatey images for all.
Diffstat (limited to 'modules/image/image.test')
-rw-r--r-- | modules/image/image.test | 204 |
1 files changed, 202 insertions, 2 deletions
diff --git a/modules/image/image.test b/modules/image/image.test index e58389a11..75aa4e5bd 100644 --- a/modules/image/image.test +++ b/modules/image/image.test @@ -136,10 +136,10 @@ class ImageEffectsUnitTest extends ImageToolkitTestCase { */ function testEffects() { $effects = image_effects(); - $this->assertEqual(count($effects), 1, t("Found core's effect.")); + $this->assertEqual(count($effects), 1, t("Found core's image effect.")); $effect_definitions = image_effect_definitions(); - $this->assertEqual(count($effect_definitions), 6, t("Found core's effects.")); + $this->assertEqual(count($effect_definitions), 6, t("Found core's image effects.")); } /** @@ -226,3 +226,203 @@ class ImageEffectsUnitTest extends ImageToolkitTestCase { $this->assertEqual($calls['rotate'][0][2], 0xffffff, t('Background color was passed correctly')); } } + +/** + * Tests creation, deletion, and editing of image styles and effects. + */ +class ImageAdminStylesUnitTest extends DrupalWebTestCase { + + 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', + ); + } + + /** + * Implementation of setUp(). + */ + function setUp() { + parent::setUp(); + + // Create an administrative user. + $this->admin_user = $this->drupalCreateUser(array('administer site configuration', 'administer image styles')); + $this->drupalLogin($this->admin_user); + } + + /** + * 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)) { + $file = reset($this->drupalGetTestFiles('image')); + $file_path = file_unmanaged_copy($file->filename); + } + + return image_style_url($style['name'], $file_path) ? $file_path : FALSE; + } + + /** + * Count the number of images currently create for a style. + */ + function getImageCount($style) { + $directory = file_directory_path() . '/styles/' . $style['name']; + return count(file_scan_directory($directory, '/.*/')); + } + + /** + * 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/settings/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/settings/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. + $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/settings/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, NULL); + + // 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/settings/image-styles/delete/' . $style_name, array(), t('Delete')); + + // Confirm the style directory has been removed. + $directory = file_directory_path() . '/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']))); + + } +} |