#!perl use Test::More; use File::Temp (); use File::Spec::Functions qw(catfile catdir file_name_is_absolute splitdir); use TAP::Harness::Archive; use Archive::Tar; plan(tests => 10); # a temp directory to put everything in my $temp_dir = File::Temp->tempdir('tap-archive-XXXXXXXX', CLEANUP => 1); my @testfiles = (catfile('t', 'foo.t'), catfile('t', 'bar.t')); my @extra_files = ( catfile('t', 'extra_files', 'log1.txt'), catfile('t', 'extra_files', 'log2.txt'), catfile('t', 'extra_files', 'stuff', 'svk.info'), ); # create an archive with extra files $file = catfile($temp_dir, 'archive.tar.gz'); $harness = TAP::Harness::Archive->new( { archive => $file, verbosity => -2, extra_files => \@extra_files, } ); $harness->runtests(@testfiles); ok(-e $file, 'archive.tar.gz created'); check_archive($file); sub check_archive { my $archive_file = shift; my %tap_files; my $aggregator = TAP::Harness::Archive->aggregator_from_archive( { archive => $archive_file, meta_yaml_callback => sub { my $yaml = shift; $yaml = $yaml->[0]; # did we have all of the extra files? my $x_files = $yaml->{extra_files}; cmp_ok(ref $x_files, 'eq', 'ARRAY', 'extra_files is an array'); cmp_ok(scalar(@$x_files), '==', 3, '3 extra_files recorded'); }, } ); isa_ok($aggregator, 'TAP::Parser::Aggregator'); cmp_ok($aggregator->total, '==', 5, "aggregator has correct total"); my @parsers = $aggregator->parsers(); cmp_ok(scalar @parsers, '==', 2, "correct # of parsers"); } my $tar = Archive::Tar->new($file); isa_ok($tar, 'Archive::Tar'); my @contents = $tar->list_files(); foreach my $extra_file (@extra_files) { # Archive::Tar returns file names with "/" path separator. # Passing it through catdir(splitdir()) will give us the # correct system path separator (e.g. "\" on Win32). my $count = grep { catdir(splitdir($_)) eq $extra_file } @contents; ok($count == 1, "Archive contains extra file $extra_file"); }