WordPress.org

Make WordPress Core

Changeset 1061 in tests


Ignore:
Timestamp:
10/01/12 21:08:41 (22 months ago)
Author:
kurtpayne
Message:

Unit tests for #WP6821

Location:
trunk
Files:
3 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/image/functions.php

    r909 r1061  
    77 */ 
    88class Tests_Image_Functions extends WP_UnitTestCase { 
     9 
     10    /** 
     11     * Get the MIME type of a file 
     12     * @param string $filename 
     13     * @return string 
     14     */ 
     15    protected function get_mime_type( $filename ) { 
     16        $mime_type = '';  
     17        if ( extension_loaded( 'fileinfo' ) ) {  
     18            $finfo = new finfo(); 
     19            $mime_type = $finfo->file( $filename, FILEINFO_MIME ); 
     20        } elseif ( function_exists('mime_content_type') ) {  
     21            $mime_type = mime_content_type( $filename ); 
     22        } 
     23        if ( false !== strpos( $mime_type, ';' ) ) { 
     24            list( $mime_type, $charset ) = explode( ';', $mime_type, 2 ); 
     25        } 
     26        return $mime_type; 
     27    } 
     28     
    929    function test_is_image_positive() { 
    1030        // these are all image files recognized by php 
     
    7393            $this->assertFalse( file_is_displayable_image( DIR_TESTDATA.'/images/'.$file ), "file_is_valid_image($file) should return false" ); 
    7494        } 
    75     } 
    76  
     95    }    
     96     
     97    /** 
     98     * Test save image file and mime_types 
     99     * @ticket 6821 
     100     */ 
     101    public function test_wp_save_image_file() { 
     102        include_once( ABSPATH . 'wp-admin/includes/image-edit.php' ); 
     103 
     104        // Mime types 
     105        $mime_types = array( 
     106            'image/jpeg', 
     107            'image/gif', 
     108            'image/png' 
     109        ); 
     110         
     111        // Test each image editor engine 
     112        $classes = array('WP_Image_Editor_GD', 'WP_Image_Editor_Imagick'); 
     113        foreach ( $classes as $class ) { 
     114             
     115            // If the image editor isn't available, skip it 
     116            if ( !$class::test() ) { 
     117                continue; 
     118            } 
     119            $filter = create_function( '', "return '$class';" ); 
     120            add_filter( 'image_editor_class', $filter ); 
     121 
     122            // Call wp_save_image_file 
     123            $img = WP_Image_Editor::get_instance( DIR_TESTDATA . '/images/canola.jpg' ); 
     124             
     125            // Save a file as each mime type, assert it works 
     126            foreach ( $mime_types as $mime_type ) { 
     127                $file = wp_tempnam();                
     128                $ret = wp_save_image_file( $file, $img, $mime_type, 1 ); 
     129                $this->assertNotEmpty( $ret ); 
     130                $this->assertNotInstanceOf( 'WP_Error', $ret ); 
     131                $this->assertEquals( $mime_type, $this->get_mime_type( $ret['path'] ) ); 
     132                 
     133                // Clean up 
     134                @unlink( $file ); 
     135                @unlink( $ret['path'] ); 
     136            } 
     137 
     138            // Clean up 
     139            unset( $img ); 
     140        } 
     141    } 
     142     
     143    /** 
     144     * Test that a passed mime type overrides the extension in the filename 
     145     * @ticket 6821 
     146     */ 
     147    public function test_mime_overrides_filename() { 
     148 
     149        // Test each image editor engine 
     150        $classes = array('WP_Image_Editor_GD', 'WP_Image_Editor_Imagick'); 
     151        foreach ( $classes as $class ) { 
     152 
     153            // If the image editor isn't available, skip it 
     154            if ( !$class::test() ) { 
     155                continue; 
     156            } 
     157            $filter = create_function( '', "return '$class';" ); 
     158            add_filter( 'image_editor_class', $filter ); 
     159 
     160            // Save the file 
     161            $img = WP_Image_Editor::get_instance( DIR_TESTDATA . '/images/canola.jpg' ); 
     162            $mime_type = 'image/gif'; 
     163            $file = wp_tempnam( 'tmp.jpg' ); 
     164            $ret = $img->save( $file, $mime_type ); 
     165             
     166            // Make assertions 
     167            $this->assertNotEmpty( $ret ); 
     168            $this->assertNotInstanceOf( 'WP_Error', $ret ); 
     169            $this->assertEquals( $mime_type, $this->get_mime_type( $ret['path'] ) ); 
     170             
     171            // Clean up 
     172            @unlink( $file ); 
     173            @unlink( $ret['path'] ); 
     174            unset( $img ); 
     175        } 
     176    } 
     177 
     178    /** 
     179     * Test that mime types are correctly inferred from file extensions 
     180     * @ticket 6821 
     181     */ 
     182    public function test_inferred_mime_types() { 
     183 
     184        // Mime types 
     185        $mime_types = array( 
     186            'jpg'  => 'image/jpeg', 
     187            'jpeg' => 'image/jpeg', 
     188            'jpe'  => 'image/jpeg', 
     189            'gif'  => 'image/gif', 
     190            'png'  => 'image/png', 
     191            'unk'  => 'image/jpeg' // Default, unknown 
     192        ); 
     193 
     194        // Test each image editor engine 
     195        $classes = array('WP_Image_Editor_GD', 'WP_Image_Editor_Imagick'); 
     196        foreach ( $classes as $class ) { 
     197 
     198            // If the image editor isn't available, skip it 
     199            if ( !$class::test() ) { 
     200                continue; 
     201            } 
     202            $filter = create_function( '', "return '$class';" ); 
     203            add_filter( 'image_editor_class', $filter ); 
     204             
     205            // Save the image as each file extension, check the mime type 
     206            $img = WP_Image_Editor::get_instance( DIR_TESTDATA . '/images/canola.jpg' ); 
     207            $temp = get_temp_dir(); 
     208            foreach ( $mime_types as $ext => $mime_type ) { 
     209                $file = wp_unique_filename( $temp, uniqid() . ".$ext" ); 
     210                $ret = $img->save( trailingslashit( $temp ) . $file ); 
     211                $this->assertNotEmpty( $ret ); 
     212                $this->assertNotInstanceOf( 'WP_Error', $ret ); 
     213                $this->assertEquals( $mime_type, $this->get_mime_type( $ret['path'] ) ); 
     214                @unlink( $file ); 
     215                @unlink( $ret['path'] ); 
     216            } 
     217 
     218            // Clean up 
     219            unset( $img ); 
     220        } 
     221    } 
    77222} 
  • trunk/tests/image/resize.php

    r909 r1061  
    124124    } 
    125125 
     126    /** 
     127     * Try resizing a non-existent image 
     128     * @ticket 6821 
     129     */ 
     130    public function test_resize_non_existent_image() { 
     131        $classes = array('WP_Image_Editor_GD', 'WP_Image_Editor_Imagick'); 
     132        foreach ( $classes as $class ) { 
     133            if ( !$class::test() ) { 
     134                continue; 
     135            } 
     136            $filter = create_function( '', "return $class;" ); 
     137            add_filter( 'image_editor_class', $filter ); 
     138            $image = image_resize( DIR_TESTDATA.'/images/test-non-existent-image.jpg', 25, 25 ); 
     139            $this->assertInstanceOf( 'WP_Error', $image ); 
     140            $this->assertEquals( 'error_loading_image', $image->get_error_code() ); 
     141        } 
     142    } 
     143     
     144    /** 
     145     * Try resizing a php file (bad image) 
     146     * @ticket 6821 
     147     */ 
     148    public function test_resize_bad_image() { 
     149        $classes = array('WP_Image_Editor_GD', 'WP_Image_Editor_Imagick'); 
     150        foreach ( $classes as $class ) { 
     151            if ( !$class::test() ) { 
     152                continue; 
     153            } 
     154            $filter = create_function( '', "return $class;" ); 
     155            add_filter( 'image_editor_class', $filter ); 
     156            $image = image_resize( DIR_TESTDATA.'/export/crazy-cdata.xml', 25, 25 ); 
     157            $this->assertInstanceOf( 'WP_Error', $image ); 
     158            $this->assertEquals( 'invalid_image', $image->get_error_code() ); 
     159        } 
     160    } 
    126161} 
Note: See TracChangeset for help on using the changeset viewer.