package Test::Analizo;
use strict;
use warnings;
use parent qw( Exporter );
our @EXPORT = qw(
on_dir
on_tmpdir
mock
tmpdir
unpack_sample_git_repository
readfile
);
use Test::MockObject::Extends;
use File::Path qw(remove_tree);
sub on_dir {
my ($dir, $code) = @_;
my $previous_pwd = `pwd`;
chomp $previous_pwd;
chdir $dir;
if (wantarray()) {
my @list = &$code();
chdir $previous_pwd;
return @list;
}
my $result = &$code();
chdir $previous_pwd;
return $result;
}
sub mock {
my ($object) = @_;
Test::MockObject::Extends->new($object);
}
sub tmpdir {
my ($package, $filename, $line) = caller;
return tmpdir_for($filename);
}
use Cwd 'abs_path';
sub tmpdir_for {
my ($filename) = @_;
$filename = abs_path($filename);
return $filename . '.tmpdir';
}
sub on_tmpdir {
my ($code) = @_;
my $tmpdir = tmpdir;
mkdir $tmpdir;
my $result = on_dir($tmpdir, $code);
remove_tree $tmpdir;
return $result;
}
sub unpack_sample_git_repository {
my ($code, @repos) = @_;
if (!@repos) {
@repos = ('evolution');
}
my ($package, $filename, $line) = caller;
my $tmpdir = tmpdir_for($filename);
system("mkdir -p $tmpdir");
for my $repo (@repos) {
system("tar xzf t/samples/$repo.tar.gz -C $tmpdir --no-same-owner");
}
&$code();
system("rm -rf $tmpdir");
}
sub readfile {
my ($filename) = @_;
open INPUT, $filename;
my @lines = <INPUT>;
close INPUT;
chomp @lines;
return @lines;
}
1;