WordPress.org

Make WordPress Core

Ticket #18007: 18007_incomplete_unit_test.patch

File 18007_incomplete_unit_test.patch, 3.1 KB (added by kurtpayne, 9 months ago)
  • mbstring.xml

     
     1<phpunit 
     2        bootstrap="bootstrap.php" 
     3        backupGlobals="false" 
     4        colors="true" 
     5        > 
     6    <testsuites> 
     7        <testsuite> 
     8            <directory suffix=".php">tests/mbstring</directory> 
     9        </testsuite> 
     10    </testsuites> 
     11</phpunit> 
  • phpunit.xml

     
    1414    <groups> 
    1515        <exclude> 
    1616            <group>ajax</group> 
     17                        <group>mbstring</group> 
    1718        </exclude> 
    1819    </groups> 
    1920    <logging> 
  • tests/mbstring/serialize.php

     
     1<?php 
     2 
     3/** 
     4 * @group mbstring 
     5 */ 
     6class Tests_Mbstring_Serialize extends WP_UnitTestCase { 
     7 
     8        /** 
     9         * @ticket 180071 
     10         * @see http://core.trac.wordpress.org/ticket/18007 
     11         * @global mixed $wpdb 
     12         */ 
     13        public function test_get_option() { 
     14                global $wpdb; 
     15 
     16                /** 
     17                 * Context 
     18                 *  
     19                 * utf-8 encoded database fields 
     20                 * auto overlaoding singlebyte functions from conf (see  http://www.php.net/manual/en/mbstring.overload.php) 
     21                 */ 
     22 
     23                if ( ini_get( 'mbstring.func_overload' ) < 4 ) { 
     24                        $this->markTestIncomplete( 'Please run as php -d mbstring.func_overload=4 /usr/bin/phpunit -c mbstring.xml'); 
     25                } 
     26                 
     27                // Need to figure out a better solution for this.  It won't get rolled back during teardown 
     28                $wpdb->query( 'ALTER TABLE ' . $wpdb->options . ' MODIFY option_value LONGTEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci ' ); 
     29 
     30                /** 
     31                 * Bug scenario 
     32                 *  
     33                 * the strlen call is actually a mb_strlen one 
     34                 * the $length var is the number of characters (not bytes) 
     35                 * using $data[$length-1] don't retrieve the last char but one before, it's actual position is undefined, depending on the other content of the string 
     36                 * this $lastc is not ; or } 
     37                 * the string is understood has not serialized 
     38                 */ 
     39 
     40                // Set an option with  
     41                $expected = array( "aéùp" ); 
     42                $serialized = serialize( serialize( $expected ) ); 
     43 
     44                // Alternate way to create the serialized data 
     45                // $serialized = 's:23:"a:1:{i:0;s:6:"aéùp";}'; 
     46 
     47                update_option( 'test_18007_option', $expected ); 
     48                 
     49                //* 
     50                // Alternate way to set an option 
     51                $result = $wpdb->query( 
     52                        $wpdb->prepare( 
     53                                        "INSERT INTO `$wpdb->options` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, %s) 
     54                                        ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)", 
     55                                        'test_18007_option', $serialized, 'no' 
     56                                ) 
     57                        ); 
     58                //*/ 
     59 
     60                // Retrieve the option 
     61                $test = get_option( 'test_18007_option' );               
     62                 
     63                // This should not unserialize properly 
     64                $this->assertNotEquals( $expected, $test ); 
     65        } 
     66}