The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# ----------------------------------------------------------------
    use strict;
    use Test::More;
# ----------------------------------------------------------------
{
    plan tests => 73;
    use_ok('XML::TreePP');
    &test_indent( undef );
    &test_indent( 1 );
    &test_indent( 4 );
}
# ----------------------------------------------------------------
sub test_indent {
    my $indent = shift;
    my $order = [qw( one two three four five six seven eight nine )];
    my $tpp = XML::TreePP->new( first_out => $order, indent => $indent );

    my $nine = '9';
    my $tree = {
        root    =>  {
            one =>  '1',
            two =>  {
                '#text' =>  '2',
                three   =>  undef,
            },
            four    =>  [{
                five    =>  '5',
                six     =>  {
                    '#text' =>  '6',
                },
            }, {
                seven   =>  {
                    '#text' =>  '7',
                    -eight  =>  '8',
                },
            }],
            nine    =>  \$nine,
        },
    };

    my $xml = $tpp->write( $tree );
    my $space = $indent ? '\040' x $indent : '';
    $indent ||= 0;

    like( $xml, qr{ <one>1</one> }x, "[$indent] text node" );
    like( $xml, qr{ <two><three  }x, "[$indent] child node" );
    like( $xml, qr{ />2</two>    }x, "[$indent] text node after empty node" );
    like( $xml, qr{ <six>6</six> }x, "[$indent] explicit text node" );
    like( $xml, qr{ >7</seven>   }x, "[$indent] text node after attribute" );
    like( $xml, qr{ <nine><!\[CDATA\[9\]\]></nine> }x, "[$indent] cdata node" );

    like( $xml, qr{ ^<root>        }mx, "[$indent] no-indent root" );
    like( $xml, qr{ ^$space<one>   }mx, "[$indent] indent one" );
    like( $xml, qr{ ^$space<two>   }mx, "[$indent] indent two" );
    like( $xml, qr{ ^$space<four>  }mx, "[$indent] indent four" );
    like( $xml, qr{ ^$space</four> }mx, "[$indent] indent four end" );
    like( $xml, qr{ ^$space$space<five> }mx, "[$indent] indent five" );
    like( $xml, qr{ ^$space$space<six>  }mx, "[$indent] indent six" );
    like( $xml, qr{ ^$space$space<seven }mx, "[$indent] indent seven" );
    like( $xml, qr{ ^$space<nine>  }mx, "[$indent] indent nine" );
    like( $xml, qr{ ^</root>       }mx, "[$indent] no-indent root end" );

    like( $xml, qr{ <root>\n  }x, "[$indent] line root" );
    like( $xml, qr{ </one>\n  }x, "[$indent] line one" );
    like( $xml, qr{ </two>\n  }x, "[$indent] line two" );
    like( $xml, qr{ </five>\n }x, "[$indent] line five" );
    like( $xml, qr{ </six>\n  }x, "[$indent] line six" );
    like( $xml, qr{ </four>\n }x, "[$indent] line four" );
    like( $xml, qr{ </nine>\n }x, "[$indent] line nine" );
    like( $xml, qr{ </root>\n }x, "[$indent] line root" );
}
# ----------------------------------------------------------------
=example
<root>
    <one>1</one>
    <two><three />2</two>
    <four>
        <five>5</five>
        <six>6</six>
    </four>
    <four>
        <seven eight="8">7</seven>
    </four>
    <nine><![CDATA[9]]></nine>
</root>
=cut
# ----------------------------------------------------------------
;1;
# ----------------------------------------------------------------