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

use Data::Dumper;

plan tests => 5;

require_ok( 'XHTML::Instrumented' );

my $data = <<DATA;
<div>
 <table>
  <tbody id="list">
   <tr>
    <td class=":data">
     <span id="x.1">left</span>
    </td>
    <td>
     <span id="x.2">right</span>
    </td>
   </tr>
  </tbody>
 </table>
</div>
DATA

my $cmp = <<DATA;
<div>
<table>
</table>
</div>
DATA

my $x = XHTML::Instrumented->new(name => \$data, type => '');

my $output = $x->output(
    list => $x->loop(),
);

is_xml($output, $cmp);

$output = $x->output(
    list => $x->loop(inclusive => 1),
);

is_xml($output, $cmp);

$output = $x->output(
    list => $x->loop( headers => [ 'x' ], data => [['one'], ['two'], ['three'], ['four'], ['five']], default => 'empty'),
);

$cmp = <<DATA;
<div>
 <table>
  <tbody id="list">
   <tr>
    <td class=":data">
     <span id="x.1.1">one</span>
    </td>
    <td>
     <span id="x.2.2">two</span>
    </td>
   </tr>
   <tr>
    <td class=":data">
     <span id="x.1.3">three</span>
    </td>
    <td>
     <span id="x.2.4">four</span>
    </td>
   </tr>
   <tr>
    <td class=":data">
     <span id="x.1.5">five</span>
    </td>
    <td>
     <span id="x.2.6">empty</span>
    </td>
   </tr>
  </tbody>
 </table>
</div>
DATA

{
    is_xml($output, $cmp);
}

$output = $x->output(
    list => $x->loop( headers => [ 'x' ], data => [['one'], ['two'], ['three'], ['four'], ['five']]),
);

$cmp = <<DATA;
<div>
 <table>
  <tbody id="list">
   <tr>
    <td class=":data">
     <span id="x.1.1">one</span>
    </td>
    <td>
     <span id="x.2.2">two</span>
    </td>
   </tr>
   <tr>
    <td class=":data">
     <span id="x.1.3">three</span>
    </td>
    <td>
     <span id="x.2.4">four</span>
    </td>
   </tr>
   <tr>
    <td class=":data">
     <span id="x.1.5">five</span>
    </td>
    <td>
     <span id="x.2.6">N/A</span>
    </td>
   </tr>
  </tbody>
 </table>
</div>
DATA

{
    is_xml($output, $cmp);
}