#!/usr/bin/perl -w
# $Id: 30_dump.t 189 2006-12-05 02:41:46Z fil $
use strict;
use Test::More ( tests=>55 );
use Data::Tabular::Dumper;
pass( 'loaded' );
my %params=( CSV=>["t/test-30-test.csv", {eol=>"\n", binary=>1}],
XML=>["t/test-30-test.xml", "table", "record" ],
Excel=>["t/test-30-test.xls" ]
);
my $allowed=Data::Tabular::Dumper->available();
foreach my $t ( qw( CSV XML Excel ) ) {
delete $params{$t} unless $allowed->{$t};
}
my %tests = (
#############################################
dataLoL => {
data=>[
[1..3],
[4..5],
],
CSV=>[
qq(1,2,3\n),
qq(4,5\n),
],
XML=>[
qq(\n),
qq(
\n),
qq( \n),
qq( <0>10>\n),
qq( <1>21>\n),
qq( <2>32>\n),
qq( \n),
qq( \n),
qq( <0>40>\n),
qq( <1>51>\n),
qq( \n),
qq(
\n),
]
},
#############################################
dataHoL => {
data => {
honk => [ qw( dealing card games ) ],
bonk => [ qw( no one keeping score )]
},
CSV=>[
qq(bonk,no,one,keeping,score\n),
qq(honk,dealing,card,games\n),
],
XML=>[
qq(\n),
qq(\n),
qq( \n),
qq( <0>bonk0>\n),
qq( <1>no1>\n),
qq( <2>one2>\n),
qq( <3>keeping3>\n),
qq( <4>score4>\n),
qq( \n),
qq( \n),
qq( <0>honk0>\n),
qq( <1>dealing1>\n),
qq( <2>card2>\n),
qq( <3>games3>\n),
qq( \n),
qq(
\n),
],
},
#############################################
dataLoH => {
data=> [
{ honk => 42, bonk=>17 },
{ honk => 12, blurf=>36 }
],
CSV=>[
qq(blurf,bonk,honk\n),
qq(,17,42\n),
qq(36,,12\n),
],
XML=>[
qq(\n),
qq(\n),
qq( \n),
qq( 17\n),
qq( 42\n),
qq( \n),
qq( \n),
qq( 36\n),
qq( 12\n),
qq( \n),
qq(
\n),
]
},
#############################################
dataHoH => {
data=> {
monday => { honk => 42, bonk=>17 },
wednesday => { honk => 12, blurf=>36 }
},
CSV => [
qq(,blurf,bonk,honk\n),
qq(monday,,17,42\n),
qq(wednesday,36,,12\n)
],
XML => [
qq(\n),
qq(\n),
qq( \n),
qq( 17\n),
qq( 42\n),
qq( \n),
qq( \n),
qq( 36\n),
qq( 12\n),
qq( \n),
qq(
\n),
]
},
#############################################
## 3-dimentional
dataLoLoL => {
data=> [
[ [15..20], [4..5] ],
[ [11..13], [4..5] ]
],
CSV=>[
qq(Page 1\n),
qq(15,16,17,18,19,20\n),
qq(4,5\n),
qq(\n),
qq(Page 2\n),
qq(11,12,13\n),
qq(4,5\n),
qq(\n),
],
XML=>[
qq(\n),
qq(\n),
qq( \n),
qq( \n),
qq( <0>150>\n),
qq( <1>161>\n),
qq( <2>172>\n),
qq( <3>183>\n),
qq( <4>194>\n),
qq( <5>205>\n),
qq( \n),
qq( \n),
qq( <0>40>\n),
qq( <1>51>\n),
qq( \n),
qq( \n),
qq( \n),
qq( \n),
qq( <0>110>\n),
qq( <1>121>\n),
qq( <2>132>\n),
qq( \n),
qq( \n),
qq( <0>40>\n),
qq( <1>51>\n),
qq( \n),
qq( \n),
qq(
\n),
]
},
#############################################
dataHoLoL => {
data=>{
honk => [ [15..20], [4..5] ],
bonk => [ [11..13], [4..5] ]
},
CSV=>[
qq(bonk\n),
qq(11,12,13\n),
qq(4,5\n),
qq(\n),
qq(honk\n),
qq(15,16,17,18,19,20\n),
qq(4,5\n),
qq(\n),
],
XML=>[
qq(\n),
qq(\n),
qq( \n),
qq( \n),
qq( <0>110>\n),
qq( <1>121>\n),
qq( <2>132>\n),
qq( \n),
qq( \n),
qq( <0>40>\n),
qq( <1>51>\n),
qq( \n),
qq( \n),
qq( \n),
qq( \n),
qq( <0>150>\n),
qq( <1>161>\n),
qq( <2>172>\n),
qq( <3>183>\n),
qq( <4>194>\n),
qq( <5>205>\n),
qq( \n),
qq( \n),
qq( <0>40>\n),
qq( <1>51>\n),
qq( \n),
qq( \n),
qq(
\n),
]
},
#############################################
dataHoLoH => {
data=> {
honk => [ { biff=>17, boff=>18 }, {qw(who has all the mst3ks man)} ],
bonk => [ { billy=>1, bobby=>42 } ]
},
CSV=>[
qq(bonk\n),
qq(billy,bobby\n),
qq(1,42\n),
qq(\n),
qq(honk\n),
qq(all,biff,boff,mst3ks,who\n),
qq(,17,18,,\n),
qq(the,,,man,has\n),
qq(\n),
],
XML=>[
qq(\n),
qq(\n),
qq( \n),
qq( \n),
qq( 1\n),
qq( 42\n),
qq( \n),
qq( \n),
qq( \n),
qq( \n),
qq( 17\n),
qq( 18\n),
qq( \n),
qq( \n),
qq( the\n),
qq( man\n),
qq( has\n),
qq( \n),
qq( \n),
qq(
\n),
]
},
#############################################
dataHoHoH => {
data=> {
honk => { one=>{ biff=>17, boff=>18 },
two=>{qw(who has all the mst3ks man)}
},
bonk => { one=>{ billy=>1, bobby=>42 },
two=>{ zin=>1, bin=>1 } }
},
CSV => [
qq(bonk\n),
qq(,billy,bin,bobby,zin\n),
qq(one,1,,42,\n),
qq(two,,1,,1\n),
qq(\n),
qq(honk\n),
qq(,all,biff,boff,mst3ks,who\n),
qq(one,,17,18,,\n),
qq(two,the,,,man,has\n),
qq(\n),
],
XML => [
qq(\n),
qq(\n),
qq( \n),
qq( \n),
qq( 1\n),
qq( 42\n),
qq( \n),
qq( \n),
qq( 1\n),
qq( 1\n),
qq( \n),
qq( \n),
qq( \n),
qq( \n),
qq( 17\n),
qq( 18\n),
qq( \n),
qq( \n),
qq( the\n),
qq( man\n),
qq( has\n),
qq( \n),
qq( \n),
qq(
\n),
],
},
#############################################
dataLoLoH => {
data=>[
[ { biff=>17, boff=>18 }, {qw(who has all the mst3ks man)},
{ biff=>42, boff=>42 }, {qw(who 42 all 42 mst3ks 42)}
],
[ { billy=>1, bobby=>42 }, { zin=>1, bin=>1 } ]
],
CSV=>[
qq(Page 1\n),
qq(all,biff,boff,mst3ks,who\n),
qq(,17,18,,\n),
qq(the,,,man,has\n),
qq(,42,42,,\n),
qq(42,,,42,42\n),
qq(\n),
qq(Page 2\n),
qq(billy,bin,bobby,zin\n),
qq(1,,42,\n),
qq(,1,,1\n),
qq(\n),
],
XML=>[
qq(\n),
qq(\n),
qq( \n),
qq( \n),
qq( 17\n),
qq( 18\n),
qq( \n),
qq( \n),
qq( the\n),
qq( man\n),
qq( has\n),
qq( \n),
qq( \n),
qq( 42\n),
qq( 42\n),
qq( \n),
qq( \n),
qq( 42\n),
qq( 42\n),
qq( 42\n),
qq( \n),
qq( \n),
qq( \n),
qq( \n),
qq( 1\n),
qq( 42\n),
qq( \n),
qq( \n),
qq( 1\n),
qq( 1\n),
qq( \n),
qq( \n),
qq(
\n),
]
},
# dataHoHoL
);
##################################################################
foreach my $name ( sort keys %tests ) {
my $test = $tests{$name};
foreach my $p ( values %params ) {
next unless ref $p;
$p->[0] =~ s/30-\w+/30-$name/;
}
# diag( $name );
my $dumper = Data::Tabular::Dumper->open( %params );
$dumper->dump( $test->{data} );
$dumper->close;
foreach my $t ( qw( CSV XML Excel ) ) {
SKIP: {
skip "$t support not available", 2 unless $params{$t};
ok( (-f $params{$t}[0]), "Created $name ($t)" );
if( $t eq 'Excel' ) {
unlink( $params{ $t }[0] );
skip "Can't verify $t files", 1;
}
my @content = eval {
local @ARGV = ( $params{$t}[0] );
<>;
};
die $@ if $@;
is_deeply( \@content, $test->{$t}, "OK" )
or die "$params{$t}[0]";
unlink( $params{$t}[0] );
}
}
}