The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More;
use File::Spec;
use Cwd;
use Papery::Pulp;

# generate full filenames
my $dir = File::Spec->catdir( 't', 'analyzer' );
my $src = cwd;

# minimum metadata
my %basic = ( _processors => {} );

# test data
my @files = (
    [   'zlonk.txt',
        { %basic, theme => 'batman', count => 3 },
        "zlott powie thwacke"
    ],
    [ 'bam.txt', {%basic}, "thwapp eee_yow ker_sploosh", ],
    [ 'kapow.txt', { %basic, theme => 'barbapapa', count => 0 } ],
);
@files = map { $_->[0] = File::Spec->catfile( $dir, $_->[0] ); $_ } @files;

plan tests => 3 * @files + 2;

# test success
for my $test (@files) {
    my ( $File, $Meta, $Text ) = @$test;
    my $pulp = Papery::Pulp->new( { %basic, __source => $src } );
    $pulp->analyze_file($File);

    # remove internal Papery variables
    delete $pulp->{meta}{$_} for grep {/^__/} keys %{ $pulp->{meta} };
    ok( delete $pulp->{meta}{_source}, "_source $File" );

    # testing one-liners to avoid \n issues
    chomp $pulp->{meta}{_text} if $pulp->{meta}{_text};
    is_deeply( delete $pulp->{meta}{_text}, $Text, "text $File" );
    is_deeply( $pulp->{meta},               $Meta, "meta $File" );
}

# test failure
my $pulp = Papery::Pulp->new( { %basic, __source => $src } );
ok( !eval { $pulp->analyze_file( 'notthere' ); 1 },
    'Fail with non-existent file' );
like( $@, qr/^Can't open notthere: /, 'Expected error message' );