The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# Data prepend testing

use strict;
use Test::More tests => 6;
use HTML::Tabulate;
use Data::Dumper;
use FindBin qw($Bin);

# Load result strings
my %result = ();
my $test = "$Bin/t26";
die "missing data dir $test" unless -d $test;
opendir my $datadir, $test or die "can't open directory $test";
for (readdir $datadir) {
  next if m/^\./;
  open my $fh, "<$test/$_" or die "can't read $test/$_";
  { 
    local $/ = undef;
    $result{$_} = <$fh>;
  }
  close $fh;
}
close $datadir;

my $print = shift @ARGV || 0;
my $n = 1;
sub report {
  my ($data, $file, $inc) = @_;
  $inc ||= 1;
  if ($print == $n) {
    print STDERR "--> $file\n";
    print $data;
    exit 0;
  }
  $n += $inc;
}

my $d = [ 
  [ '123', 'Fred Flintstone', 'CEO', 'M', 1 ], 
  [ '456', 'Barney Rubble', 'Lackey', 'M', 2 ],
  [ '999', 'Dino', 'Pet', 'M', 0 ],
  [ '888', 'Bam Bam', 'Child', 'M', 0 ],
  [ '789', 'Wilma Flintstone   ', 'CFO', 'F', undef ], 
  [ '777', 'Betty Rubble', '', 'F', undef ],
];
my $t = HTML::Tabulate->new({ 
  fields => [ qw(emp_id emp_name emp_title emp_gender emp_xx) ],
  fields_omit => [ qw(emp_gender emp_xx) ],
});
my $table;
my @prepend;

# No data_prepend
$table = $t->render($d);
report $table, "simple1";
is($table, $result{simple1}, "no data_prepend");

# Empty data_prepend
$table = $t->render($d, {
  data_prepend => [],
});
report $table, "simple1";
is($table, $result{simple1}, "empty data_prepend");

# Single-row data_prepend
@prepend = ( shift @$d );
$table = $t->render($d, {
  data_prepend => \@prepend,
});
report $table, "simple1";
is($table, $result{simple1}, "single-row data_prepend");

# Multi-row data_prepend
push @prepend, shift @$d;
push @prepend, shift @$d;
is(scalar @prepend, 3, "three rows to data_prepend");
$table = $t->render($d, {
  data_prepend => \@prepend,
});
report $table, "simple1";
is($table, $result{simple1}, "multi-row data_prepend");

# Hashref rows in data_prepend
my @prepend2 = ();
for my $row (@prepend) {
  my $new_row = {};
  for (qw(emp_id emp_name emp_title emp_gender emp_xx)) {
    $new_row->{$_} = shift @$row;
  }
  push @prepend2, $new_row;
}
$table = $t->render($d, {
  data_prepend => \@prepend2,
});
report $table, "simple1";
is($table, $result{simple1}, "multi-row hashref data_prepend");