The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More tests => 2;
use Builder;

# local test lib
use lib 't/lib';
use IO::Scalar;

my $got;

# below only works in 5.8.* and greater
# open my $fh, '>', \$got or die $!;  
 
my $fh = IO::Scalar->new( \$got );   # so use IO::Scalar insteead
my $builder = Builder->new( output => $fh );

my $xm  = $builder->block( 'Builder::XML', { indent => 4, newline => 1 } );

my $expected = 
q{<body>
    <em>emphasized</em>
    <div id="mydiv">
        <bold>hello</bold>
        <em>world</em>
    </div>
</body>
};

##############################################################
# test 1
$xm->body( sub {
    $xm->em("emphasized");
    $xm->div( { id => 'mydiv' }, $xm->bold('hello'), $xm->em('world') );
});

is $got, $expected, "xml ouput test 1 failed";


##############################################################
# test 2

$expected.= 
q{<body>
    <em>emphasized</em>
    <div id="mydiv">
        <li>
            <em>1</em>
        </li>
        <li>
            <em>2</em>
        </li>
        <li>
            <em>3</em>
        </li>
    </div>
</body>
};

$xm->body( sub {
    $xm->em("emphasized");
    $xm->div( { id => 'mydiv' }, sub {
       for my $numb ( 1..3 ) {
           $xm->li( $xm->em( $numb ) );
       }
    });
});

is $got, $expected, "xml ouput test 2 failed";


close $fh;