WordPress.org

Make WordPress Core

Changeset 494 in tests


Ignore:
Timestamp:
01/05/12 18:03:20 (2 years ago)
Author:
duck_
Message:

Add tests for CDATA sections containing the closing sequence "]]>". See #WP15203.

Files:
2 added
1 edited

Legend:

Unmodified
Added
Removed
  • wp-testcase/test_import_wp.php

    r407 r494  
    142142                array( 'key' => '_wp_page_template', 'value' => 'default' ) 
    143143            ), $result['posts'][1]['postmeta'], $message ); 
     144        } 
     145    } 
     146 
     147    /** 
     148     * Test the WXR parser's ability to correctly retrieve content from CDATA 
     149     * sections that contain escaped closing tags ("]]>" -> "]]]]><![CDATA[>"). 
     150     * 
     151     * @link http://core.trac.wordpress.org/ticket/15203 
     152     */ 
     153    function test_escaped_cdata_closing_sequence() { 
     154        $file = DIR_TESTDATA . '/export/crazy-cdata-escaped.xml'; 
     155 
     156        foreach( array( 'WXR_Parser_SimpleXML', 'WXR_Parser_XML', 'WXR_Parser_Regex' ) as $p ) { 
     157            $message = 'Parser ' . $p; 
     158            $parser = new $p; 
     159            $result = $parser->parse( $file ); 
     160 
     161            $post = $result['posts'][0]; 
     162            $this->assertEquals( 'Content with nested <![CDATA[ tags ]]> :)', $post['post_content'], $message ); 
     163            foreach ( $post['postmeta'] as $meta ) { 
     164                switch ( $meta['key'] ) { 
     165                    case 'Plain string': $value = 'Foo'; break; 
     166                    case 'Closing CDATA': $value = ']]>'; break; 
     167                    case 'Alot of CDATA': $value = 'This has <![CDATA[ opening and ]]> closing <![CDATA[ tags like this: ]]>'; break; 
     168                    default: $this->fail( 'Unknown postmeta (' . $meta['key'] . ') was parsed out by' . $p ); 
     169                } 
     170                $this->assertEquals( $value, $meta['value'], $message ); 
     171            } 
     172        } 
     173    } 
     174 
     175    /** 
     176     * Ensure that the regex parser can still parse invalid CDATA blocks (i.e. those 
     177     * with "]]>" unescaped within a CDATA section). 
     178     */ 
     179    function test_unescaped_cdata_closing_sequence() { 
     180        $file = DIR_TESTDATA . '/export/crazy-cdata.xml'; 
     181 
     182        $parser = new WXR_Parser_Regex; 
     183        $result = $parser->parse( $file ); 
     184 
     185        $post = $result['posts'][0]; 
     186        $this->assertEquals( 'Content with nested <![CDATA[ tags ]]> :)', $post['post_content'], $message ); 
     187        foreach ( $post['postmeta'] as $meta ) { 
     188            switch ( $meta['key'] ) { 
     189                case 'Plain string': $value = 'Foo'; break; 
     190                case 'Closing CDATA': $value = ']]>'; break; 
     191                case 'Alot of CDATA': $value = 'This has <![CDATA[ opening and ]]> closing <![CDATA[ tags like this: ]]>'; break; 
     192                default: $this->fail( 'Unknown postmeta (' . $meta['key'] . ') was parsed out by' . $p ); 
     193            } 
     194            $this->assertEquals( $value, $meta['value'], $message ); 
    144195        } 
    145196    } 
Note: See TracChangeset for help on using the changeset viewer.