1de8cc8edSafresh1use strict; 2de8cc8edSafresh1use warnings; 3de8cc8edSafresh1 4de8cc8edSafresh1use Test::More; 5de8cc8edSafresh1 6de8cc8edSafresh1{ 7de8cc8edSafresh1package DumpAsXML::Enh; 8de8cc8edSafresh1 9*5486feefSafresh1use Pod::Simple::DumpAsXML (); 10*5486feefSafresh1our @ISA = qw(Pod::Simple::DumpAsXML); 11de8cc8edSafresh1 12de8cc8edSafresh1sub new { 13de8cc8edSafresh1 my ( $class ) = @_; 14de8cc8edSafresh1 my $self = $class->SUPER::new(); 15de8cc8edSafresh1 $self->code_handler( sub { pop( @_ )->_handle_line( 'code', @_ ); } ); 16de8cc8edSafresh1 $self->cut_handler( sub { pop( @_ )->_handle_line( 'cut', @_ ); } ); 17de8cc8edSafresh1 $self->pod_handler( sub { pop( @_ )->_handle_line( 'pod', @_ ); } ); 18de8cc8edSafresh1 $self->whiteline_handler( sub { pop( @_ )->_handle_line( 'white', @_ ); } ); 19de8cc8edSafresh1 return $self; 20de8cc8edSafresh1}; 21de8cc8edSafresh1 22de8cc8edSafresh1sub _handle_line { 23de8cc8edSafresh1 my ( $self, $elem, $text, $line ) = @_; 24de8cc8edSafresh1 my $fh = $self->{ output_fh }; 25*5486feefSafresh1 print { $fh } ' ' x $self->{ indent }, "<$elem start_line=\"$line\"/>\n"; 26de8cc8edSafresh1}; 27de8cc8edSafresh1 28de8cc8edSafresh1} 29de8cc8edSafresh1 30de8cc8edSafresh1my $output = ''; 31de8cc8edSafresh1my $parser = DumpAsXML::Enh->new(); 32de8cc8edSafresh1$parser->output_string( \$output ); 33de8cc8edSafresh1 34de8cc8edSafresh1my $input = [ 35de8cc8edSafresh1 '=head1 DESCRIPTION', 36de8cc8edSafresh1 '', 37de8cc8edSafresh1 ' Verbatim paragraph.', 38de8cc8edSafresh1 '', 39de8cc8edSafresh1 '=cut', 40de8cc8edSafresh1]; 41*5486feefSafresh1my $expected_output = join "\n", 42de8cc8edSafresh1 '<Document start_line="1">', 43de8cc8edSafresh1 ' <head1 start_line="1">', 44de8cc8edSafresh1 ' DESCRIPTION', 45de8cc8edSafresh1 ' </head1>', 46de8cc8edSafresh1 ' <VerbatimFormatted start_line="3" xml:space="preserve">', 47de8cc8edSafresh1 ' Verbatim paragraph.', 48de8cc8edSafresh1 ' </VerbatimFormatted>', 49de8cc8edSafresh1 ' <cut start_line="5"/>', 50de8cc8edSafresh1 '</Document>', 51*5486feefSafresh1 '', 52*5486feefSafresh1; 53de8cc8edSafresh1 54de8cc8edSafresh1$parser->parse_lines( @$input, undef ); 55de8cc8edSafresh1 56*5486feefSafresh1is($output, $expected_output); 57de8cc8edSafresh1 58de8cc8edSafresh1done_testing; 59