WordPress.org

Make WordPress Core

Ticket #6294: wptests@r174-for-#6294.diff

File wptests@r174-for-#6294.diff, 4.3 KB (added by neodude, 6 years ago)

unit tests for wp-includes/functions.php's wp_unique_filename()

  • wp-testcase/test_includes_functions.php

     
    6565                $this->assertFalse(size_format('baba')); 
    6666                $this->assertFalse(size_format(array())); 
    6767        } 
     68 
     69        function test_wp_unique_filename() { 
     70                $this->knownWPBug(6294);         
     71                 
     72                /* this test requires: 
     73                   - that you have dir + file 'wp-testdata/images/test-image.png',  
     74                   - and that this dir is writeable 
     75                   - there is an image 'test-image.png' that will be used to test unique filenames 
     76                 
     77                   NB: there is a hardcoded dependency that the testing file is '.png'; however, 
     78                       this limitation is arbitary, so change it if you like. 
     79                */ 
     80                $testdir = realpath('.') . '/wp-testdata/images/'; 
     81                $testimg = 'test-image.png'; 
     82                $this->assertTrue( file_exists($testdir) ); 
     83                $this->assertTrue( is_writable($testdir) ); 
     84                $this->assertTrue( file_exists($testdir . $testimg) ); 
     85                 
     86                $cases = array( 
     87                                // null case 
     88                                'null' . $testimg, 
     89                         
     90                                // edge cases: '.png', 'abc.', 'abc', 
     91                                // 'abc0', 'abc1', 'abc0.png', 'abc1.png' (num @ end) 
     92                                '.png', 
     93                                'abc', 
     94                                'abc.', 
     95                                'abc0', 
     96                                'abc1', 
     97                                'abc0.png', 
     98                                'abc1.png', 
     99                                 
     100                          // replacing # with _ 
     101                                str_replace('-', '#', $testimg), // test#image.png 
     102                                str_replace('-', '##', $testimg), // test##image.png 
     103                                str_replace(array('-', 'e'), '#', $testimg), // t#st#imag#.png 
     104                                str_replace(array('-', 'e'), '##', $testimg), // t##st##imag##.png 
     105                                 
     106                                // replacing \ or ' with nothing 
     107                                str_replace('-', '\\', $testimg), // test\image.png 
     108                                str_replace('-', '\\\\', $testimg), // test\\image.png 
     109                                str_replace(array('-', 'e'), '\\', $testimg), // t\st\imag\.png 
     110                                str_replace(array('-', 'e'), '\\\\', $testimg), // t\\st\\imag\\.png 
     111                                str_replace('-', "'", $testimg), // test'image.png 
     112                                str_replace('-', "'", $testimg), // test''image.png 
     113                                str_replace(array('-', 'e'), "'", $testimg), // t'st'imag'.png 
     114                                str_replace(array('-', 'e'), "''", $testimg), // t''st''imag''.png 
     115                                str_replace('-', "\'", $testimg), // test\'image.png 
     116                                str_replace('-', "\'\'", $testimg), // test\'\'image.png 
     117                                str_replace(array('-', 'e'), "\'", $testimg), // t\'st\'imag\'.png 
     118                                str_replace(array('-', 'e'), "\'\'", $testimg), // t\'\'st\'\'imag\'\'.png 
     119                                 
     120                                // sanitize_title_with_dashes 
     121                                // incomplete coverage; attempts to cover the most common cases 
     122                                str_replace('-', '%', $testimg), // test%image.png 
     123                                'test' . str_replace('e', 'é', $testimg), // tést-imagé.png 
     124                                '12%af34567890~!@#$..%^&*()_+qwerty  uiopasd fghjkl zxcvbnm<>?:"{}".png' // kitchen sink 
     125                        ); 
     126                 
     127                // what we expect the replacements will do 
     128                $expected = array( 
     129                                'null' . $testimg, 
     130                                 
     131                                '.png', 
     132                                'abc', 
     133                                'abc', 
     134                                'abc0', 
     135                                'abc1', 
     136                                'abc0.png', 
     137                                'abc1.png', 
     138                                 
     139                                'testimage.png', 
     140                                'testimage.png', 
     141                                'tstimag.png', 
     142                                'tstimag.png', 
     143                                 
     144                                'testimage.png', 
     145                                'testimage.png', 
     146                                'tstimag.png', 
     147                                'tstimag.png', 
     148                                'testimage.png', 
     149                                'testimage.png', 
     150                                'tstimag.png', 
     151                                'tstimag.png', 
     152                                'testimage.png', 
     153                                'testimage.png', 
     154                                'tstimag.png', 
     155                                'tstimag.png', 
     156                                 
     157                                'testimage.png', 
     158                                'testtest-image.png', 
     159                                '12%af34567890_qwerty-uiopasd-fghjkl-zxcvbnm.png' 
     160                        ); 
     161                 
     162                foreach ($cases as $key => $case) 
     163                { 
     164                        // make sure expected file doesn't exist already 
     165                        // happens when tests fail and the unlinking doesn't happen 
     166                        if( $expected[$key] !== $testimg && file_exists($testdir . $expected[$key]) ) 
     167                                unlink($testdir . $expected[$key]); 
     168 
     169                        // -- TEST 1: the replacement is as expected 
     170                         
     171                        $this->assertEquals( $expected[$key], wp_unique_filename($testdir, $case, NULL) ); 
     172                         
     173                        // -- end TEST 1 
     174                         
     175                         
     176                         
     177                        // -- TEST 2: the renaming will produce a unique name  
     178                         
     179                        // create the expected file 
     180                        copy($testdir . $testimg, $testdir . $expected[$key]); 
     181                         
     182                        // test that wp_unique_filename actually returns a unique filename 
     183                        $this->assertFileNotExists( $testdir . wp_unique_filename($testdir, $case, NULL) ); 
     184                         
     185                        // -- end TEST 2 
     186                         
     187                         
     188                         
     189                        // cleanup 
     190                        if( $expected[$key] !== $testimg &&  file_exists($testdir . $expected[$key]) ) 
     191                                unlink($testdir . $expected[$key]); 
     192                } 
     193        } 
    68194} 
    69195 
    70196class TestHTTPFunctions extends WPTestCase {