Data-Tabular-Dumper

 view release on metacpan or  search on metacpan

t/31_master_key.t  view on Meta::CPAN

        qq(</catalog>\n),
    ],
},

##########################
HoH => {
    data => {
       EOS2000     => { mfg =>'Canon', price=>12000 },
       FinePix1300 => { mfg =>'Fuji', price=>150 }
    },
    CSV => [
        qq(SKU,mfg,price\n),
        qq(EOS2000,Canon,12000\n),
        qq(FinePix1300,Fuji,150\n),
    ],
    XML=>[
        qq(<?xml version="1.0" encoding="iso-8859-1"?>\n),
        qq(<catalog>\n),
        qq(  <camera>\n),
        qq(    <SKU>EOS2000</SKU>\n),
        qq(    <mfg>Canon</mfg>\n),
        qq(    <price>12000</price>\n),
        qq(  </camera>\n),
        qq(  <camera>\n),
        qq(    <SKU>FinePix1300</SKU>\n),
        qq(    <mfg>Fuji</mfg>\n),
        qq(    <price>150</price>\n),
        qq(  </camera>\n),
        qq(</catalog>\n),
    ]
}
);

##################################################################
foreach my $name ( sort keys %tests ) {
    my $test = $tests{$name};

    foreach my $p ( values %params ) {
        next unless ref $p;
        $p->[0] =~ s/31-\w+/31-$name/;
    }

    # diag( $name );
    my $dumper = Data::Tabular::Dumper->open( %params, master_key=>'SKU' );
    $dumper->dump( $test->{data} );
    $dumper->close;

    foreach my $t ( qw( CSV XML ) ) {

        SKIP: {
            skip "$t support not installed", 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] );
        }
    }
}



( run in 1.232 second using v1.01-cache-2.11-cpan-5c0b1e786e0 )