WordPress.org

Make WordPress Core

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

File wptests@r174-for-#6294.diff, 4.3 KB (added by neodude, 10 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 {