WPDB: Some character set tests were failing if `DB_CHARSET` was empty, or a non-utf8 character set.

git-svn-id: https://develop.svn.wordpress.org/trunk@31372 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Gary Pendergast 2015-02-09 00:38:11 +00:00
parent afdd7da11b
commit be3c59e64c
2 changed files with 36 additions and 5 deletions

View File

@ -729,12 +729,23 @@ class Tests_DB extends WP_UnitTestCase {
*/
function test_process_fields() {
global $wpdb;
if ( $wpdb->charset ) {
$expected_charset = $wpdb->charset;
} else {
$expected_charset = $wpdb->get_col_charset( $wpdb->posts, 'post_content' );
}
if ( ! in_array( $expected_charset, array( 'utf8', 'utf8mb4', 'latin1' ) ) ) {
$this->markTestSkipped( "This test only works with utf8, utf8mb4 or latin1 character sets" );
}
$data = array( 'post_content' => '¡foo foo foo!' );
$expected = array(
'post_content' => array(
'value' => '¡foo foo foo!',
'format' => '%s',
'charset' => $wpdb->charset,
'charset' => $expected_charset,
'ascii' => false,
)
);

View File

@ -122,9 +122,6 @@ class Tests_DB_Charset extends WP_UnitTestCase {
* @ticket 21212
*/
function test_strip_invalid_text( $data, $expected, $message ) {
if ( $data[0]['charset'] === 'koi8r' ) {
self::$_wpdb->query( 'SET NAMES koi8r' );
}
$actual = self::$_wpdb->strip_invalid_text( $data );
$this->assertSame( $expected, $actual, $message );
}
@ -134,6 +131,12 @@ class Tests_DB_Charset extends WP_UnitTestCase {
*/
function test_process_fields_failure() {
global $wpdb;
$charset = $wpdb->get_col_charset( $wpdb->posts, 'post_content' );
if ( 'utf8' !== $charset && 'utf8mb4' !== $charset ) {
$this->markTestSkipped( 'This test requires a utf8 character set' );
}
// \xf0\xff\xff\xff is invalid in utf8 and utf8mb4.
$data = array( 'post_content' => "H€llo\xf0\xff\xff\xffWorld¢" );
$this->assertFalse( self::$_wpdb->process_fields( $wpdb->posts, $data, null ) );
@ -143,7 +146,12 @@ class Tests_DB_Charset extends WP_UnitTestCase {
* @ticket 21212
*/
function data_process_field_charsets() {
$charset = $GLOBALS['wpdb']->charset; // This is how all tables were installed
if ( $GLOBALS['wpdb']->charset ) {
$charset = $GLOBALS['wpdb']->charset;
} else {
$charset = $GLOBALS['wpdb']->get_col_charset( $GLOBALS['wpdb']->posts, 'post_content' );
}
// 'value' and 'format' are $data, 'charset' ends up as part of $expected
$no_string_fields = array(
@ -220,6 +228,12 @@ class Tests_DB_Charset extends WP_UnitTestCase {
*/
function test_strip_invalid_text_for_column() {
global $wpdb;
$charset = $wpdb->get_col_charset( $wpdb->posts, 'post_content' );
if ( 'utf8' !== $charset && 'utf8mb4' !== $charset ) {
$this->markTestSkipped( 'This test requires a utf8 character set' );
}
// Invalid 3-byte and 4-byte sequences
$value = "H€llo\xe0\x80\x80World\xf0\xff\xff\xff¢";
$expected = "H€lloWorld¢";
@ -437,6 +451,12 @@ class Tests_DB_Charset extends WP_UnitTestCase {
*/
function test_invalid_characters_in_query() {
global $wpdb;
$charset = $wpdb->get_col_charset( $wpdb->posts, 'post_content' );
if ( 'utf8' !== $charset && 'utf8mb4' !== $charset ) {
$this->markTestSkipped( 'This test requires a utf8 character set' );
}
$this->assertFalse( $wpdb->query( "INSERT INTO {$wpdb->posts} (post_content) VALUES ('foo\xf0\xff\xff\xffbar')" ) );
}
}