Charset: Allow `_canonical_charset()` to handle mixed-case strings.

Add improved unit tests, and collect existing unit tests together.

Props pbearne.
Fixes #38337.



git-svn-id: https://develop.svn.wordpress.org/trunk@38809 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Gary Pendergast 2016-10-17 23:53:20 +00:00
parent 535ae49ab6
commit 2ba32a2d48
2 changed files with 96 additions and 6 deletions

View File

@ -555,7 +555,7 @@ function do_enclose( $content, $post_ID ) {
global $wpdb;
//TODO: Tidy this ghetto code up and make the debug code optional
include_once( ABSPATH . WPINC . '/class-IXR.php' );
include_once( ABSPATH . WPINC . '/class-IXR.php' );
$post_links = array();
@ -5250,13 +5250,15 @@ function get_tag_regex( $tag ) {
* @return string The canonical form of the charset.
*/
function _canonical_charset( $charset ) {
if ( 'UTF-8' === $charset || 'utf-8' === $charset || 'utf8' === $charset ||
'UTF8' === $charset )
return 'UTF-8';
if ( 'utf-8' === strtolower( $charset ) || 'utf8' === strtolower( $charset) ) {
return 'UTF-8';
}
if ( 'iso-8859-1' === strtolower( $charset ) || 'iso8859-1' === strtolower( $charset ) ) {
if ( 'ISO-8859-1' === $charset || 'iso-8859-1' === $charset ||
'iso8859-1' === $charset || 'ISO8859-1' === $charset )
return 'ISO-8859-1';
}
return $charset;
}

View File

@ -0,0 +1,88 @@
<?php
/*
* Validate that's badly named charsets always return the correct format for UTF-8 and ISO-8859-1
*
* @since 4.8.0
*/
class Tests_Functions_canonical_charset extends WP_UnitTestCase {
public function test_utf_8_lower() {
$this->assertEquals( 'UTF-8', _canonical_charset( 'utf-8' ) );
}
public function test_utf_8_upper() {
$this->assertEquals( 'UTF-8', _canonical_charset( 'UTF-8' ) );
}
public function test_utf_8_mixxed() {
$this->assertEquals( 'UTF-8', _canonical_charset( 'Utf-8' ) );
}
public function test_utf_8() {
$this->assertEquals( 'UTF-8', _canonical_charset( 'UTF8' ) );
}
public function test_iso_lower() {
$this->assertEquals( 'ISO-8859-1', _canonical_charset( 'iso-8859-1' ) );
}
public function test_iso_upper() {
$this->assertEquals( 'ISO-8859-1', _canonical_charset( 'ISO-8859-1' ) );
}
public function test_iso_mixxed() {
$this->assertEquals( 'ISO-8859-1', _canonical_charset( 'Iso8859-1' ) );
}
public function test_iso() {
$this->assertEquals( 'ISO-8859-1', _canonical_charset( 'ISO8859-1' ) );
}
public function test_random() {
$this->assertEquals( 'random', _canonical_charset( 'random' ) );
}
public function test_empty() {
$this->assertEquals( '', _canonical_charset( '' ) );
}
/**
* @ticket 23688
*/
function test_update_option_blog_charset() {
$orig_blog_charset = get_option( 'blog_charset' );
update_option( 'blog_charset', 'utf8' );
$this->assertEquals( 'UTF-8', get_option( 'blog_charset') );
update_option( 'blog_charset', 'utf-8' );
$this->assertEquals( 'UTF-8', get_option( 'blog_charset') );
update_option( 'blog_charset', 'UTF8' );
$this->assertEquals( 'UTF-8', get_option( 'blog_charset') );
update_option( 'blog_charset', 'UTF-8' );
$this->assertEquals( 'UTF-8', get_option( 'blog_charset') );
update_option( 'blog_charset', 'ISO-8859-1' );
$this->assertEquals( 'ISO-8859-1', get_option( 'blog_charset') );
update_option( 'blog_charset', 'ISO8859-1' );
$this->assertEquals( 'ISO-8859-1', get_option( 'blog_charset') );
update_option( 'blog_charset', 'iso8859-1' );
$this->assertEquals( 'ISO-8859-1', get_option( 'blog_charset') );
update_option( 'blog_charset', 'iso-8859-1' );
$this->assertEquals( 'ISO-8859-1', get_option( 'blog_charset') );
// Arbitrary strings are passed through.
update_option( 'blog_charset', 'foobarbaz' );
$this->assertEquals( 'foobarbaz', get_option( 'blog_charset') );
update_option( 'blog_charset', $orig_blog_charset );
}
}