wordpress-develop/tests/phpunit/tests/formatting/sanitizeFileName.php
Tonya Mork 40ac5de838 Coding Standards: Add visibility to methods in tests/phpunit/tests/.
Adds a `public` visibility to test fixtures, tests, data providers, and callbacks methods.

Adds a `private` visibility to helper methods within test classes.

Renames callbacks and helpers that previously started with a `_` prefix. Why? For consistency and to leverage using the method visibility. Further naming standardizations is beyond the scope of this commit.

Props costdev, jrf, hellofromTonya.
Fixes #54177.

git-svn-id: https://develop.svn.wordpress.org/trunk@52010 602fd350-edb4-49c9-b593-d223f7449a82
2021-11-04 15:22:47 +00:00

97 lines
2.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* @group formatting
*/
class Tests_Formatting_SanitizeFileName extends WP_UnitTestCase {
public function test_munges_extensions() {
// r17990
$file_name = sanitize_file_name( 'test.phtml.txt' );
$this->assertSame( 'test.phtml_.txt', $file_name );
}
public function test_removes_special_chars() {
$special_chars = array( '?', '[', ']', '/', '\\', '=', '<', '>', ':', ';', ',', "'", '"', '&', '$', '#', '*', '(', ')', '|', '~', '`', '!', '{', '}', '%', '+', '', '«', '»', '”', '“', chr( 0 ) );
$string = 'test';
foreach ( $special_chars as $char ) {
$string .= $char;
}
$string .= 'test';
$this->assertSame( 'testtest', sanitize_file_name( $string ) );
}
/**
* @ticket 22363
*/
public function test_removes_accents() {
$in = 'àáâãäåæçèéêëìíîïñòóôõöøùúûüýÿ';
$out = 'aaaaaaaeceeeeiiiinoooooouuuuyy';
$this->assertSame( $out, sanitize_file_name( $in ) );
}
/**
* Test that spaces are correctly replaced with dashes.
*
* @ticket 16330
*/
public function test_replaces_spaces() {
$urls = array(
'unencoded space.png' => 'unencoded-space.png',
'encoded-space.jpg' => 'encoded-space.jpg',
'plus+space.jpg' => 'plusspace.jpg',
'multi %20 +space.png' => 'multi-20-space.png',
);
foreach ( $urls as $test => $expected ) {
$this->assertSame( $expected, sanitize_file_name( $test ) );
}
}
public function test_replaces_any_number_of_hyphens_with_one_hyphen() {
$this->assertSame( 'a-t-t', sanitize_file_name( 'a----t----t' ) );
}
public function test_trims_trailing_hyphens() {
$this->assertSame( 'a-t-t', sanitize_file_name( 'a----t----t----' ) );
}
public function test_replaces_any_amount_of_whitespace_with_one_hyphen() {
$this->assertSame( 'a-t', sanitize_file_name( 'a t' ) );
$this->assertSame( 'a-t', sanitize_file_name( "a \n\n\nt" ) );
}
/**
* @ticket 16226
*/
public function test_replaces_percent_sign() {
$this->assertSame( 'a22b.jpg', sanitize_file_name( 'a%22b.jpg' ) );
}
public function test_replaces_unnamed_file_extensions() {
// Test filenames with both supported and unsupported extensions.
$this->assertSame( 'unnamed-file.exe', sanitize_file_name( '_.exe' ) );
$this->assertSame( 'unnamed-file.jpg', sanitize_file_name( '_.jpg' ) );
}
public function test_replaces_unnamed_file_extensionless() {
// Test a filenames that becomes extensionless.
$this->assertSame( 'no-extension', sanitize_file_name( '_.no-extension' ) );
}
/**
* @dataProvider data_wp_filenames
*/
public function test_replaces_invalid_utf8_characters( $input, $expected ) {
$this->assertSame( $expected, sanitize_file_name( $input ) );
}
public function data_wp_filenames() {
return array(
array( urldecode( '%B1myfile.png' ), 'myfile.png' ),
array( urldecode( '%B1myfile' ), 'myfile' ),
array( 'demo bar.png', 'demo-bar.png' ),
array( 'demo' . json_decode( '"\u00a0"' ) . 'bar.png', 'demo-bar.png' ),
);
}
}