The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# ----------------------------------------------------------------
    use strict;
    use Test::More tests => 129;
    BEGIN { use_ok('XML::TreePP') };
# ----------------------------------------------------------------
{
    my $test = {
        '<xml><![CDATA[AAA]]></xml>'                            =>  'AAA',
        '<xml>AAA<![CDATA[BBB]]>CCC</xml>'                      =>  'AAABBBCCC',
        '<xml><![CDATA[AAA]]>BBB<![CDATA[CCC]]></xml>'          =>  'AAABBBCCC',
        '<xml>AAA<![CDATA[BBB]]>CCC<![CDATA[DDD]]>EEE</xml>'    =>  'AAABBBCCCDDDEEE',

        '<xml><!-- AAA --></xml>'                               =>  '',
        '<xml>AAA<!-- BBB -->CCC</xml>'                         =>  'AAACCC',
        '<xml><!-- AAA -->BBB<!-- CCC --></xml>'                =>  'BBB',
        '<xml>AAA<!-- BBB -->CCC<!-- DDD -->EEE</xml>'          =>  'AAACCCEEE',

        '<xml><!-- AAA -->BBB<![CDATA[CCC]]></xml>'                     =>  'BBBCCC',
        '<xml><![CDATA[AAA]]>BBB<!-- CCC --></xml>'                     =>  'AAABBB',

        '<xml><!-- AAA -->BBB<![CDATA[CCC]]>DDD<!-- EEE --></xml>'      =>  'BBBCCCDDD',
        '<xml><![CDATA[AAA]]>BBB<!-- CCC -->DDD<![CDATA[EEE]]></xml>'   =>  'AAABBBDDDEEE',

        '<xml><![CDATA[<!-- AAA -->]]></xml>'                           =>  '<!-- AAA -->',
        '<xml><!-- <![CDATA[AAA]]> --></xml>'                           =>  '',

        '<xml><![CDATA[<!-- AAA -->]]><!-- <![CDATA[BBB]]> --></xml>'   =>  '<!-- AAA -->',
        '<xml><!-- <![CDATA[AAA]]> --><![CDATA[<!-- BBB -->]]></xml>'   =>  '<!-- BBB -->',
    };
    &cdata_cdsect( $test );
    &cdata_cdsect( $test, { cdata_scalar_ref=>1 } );
}
# ----------------------------------------------------------------
sub cdata_cdsect {
    my $list = shift;
    my $opt  = shift;
    my $tpp  = XML::TreePP->new( %$opt );
	my $memo = exists $opt->{cdata_scalar_ref} ? 'cdata_scalar_ref ' : 'default ';

    foreach my $src ( keys %$list ) {
        my $val = $list->{$src};
        my $tree = $tpp->parse( $src );
        ok( exists $tree->{xml}, $memo.'exists' );

        my $cdata = $tree->{xml};
        $cdata = $$cdata if ( ref $cdata eq 'SCALAR' );
        ok( ! ref $cdata, $memo.'invalid ref' );
        is( $cdata, $val, $memo.$val );

        my $xml = $tpp->write( $tree );
        my $again = $tpp->parse( $xml );
        my $cdat2 = $again->{xml};
        $cdat2 = $$cdat2 if ( ref $cdat2 eq 'SCALAR' );
        is( $cdat2, $cdata, $memo.'round trip' );
    }
}
# ----------------------------------------------------------------
;1;
# ----------------------------------------------------------------