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