1b8851fccSafresh1use strict; 2b8851fccSafresh1use warnings; 3b8851fccSafresh1package GeneratePackage; 4b8851fccSafresh1# vim:ts=8:sw=2:et:sta:sts=2 5b8851fccSafresh1 6*f3efcd01Safresh1our @ISA = ('Exporter'); 7b8851fccSafresh1our @EXPORT = qw(tmpdir generate_file); 8b8851fccSafresh1 9b8851fccSafresh1use Cwd; 10b8851fccSafresh1use File::Spec; 11b8851fccSafresh1use File::Path; 12b8851fccSafresh1use File::Temp; 13b8851fccSafresh1use IO::File; 14b8851fccSafresh1 15*f3efcd01Safresh1BEGIN { 16*f3efcd01Safresh1 my $cwd = File::Spec->rel2abs(Cwd::cwd); 17*f3efcd01Safresh1 sub _original_cwd { return $cwd } 18b8851fccSafresh1} 19b8851fccSafresh1 20*f3efcd01Safresh1my @tmpdirs; 21*f3efcd01Safresh1sub tmpdir { 22*f3efcd01Safresh1 my (@args) = @_; 23*f3efcd01Safresh1 my $tmpdir = File::Temp::tempdir( 24*f3efcd01Safresh1 'MMD-XXXXXXXX', 25*f3efcd01Safresh1 CLEANUP => 0, 26*f3efcd01Safresh1 DIR => ($ENV{PERL_CORE} ? _original_cwd : File::Spec->tmpdir), 27*f3efcd01Safresh1 @args, 28*f3efcd01Safresh1 ); 29*f3efcd01Safresh1 Test::More::note "using temp dir $tmpdir"; 30*f3efcd01Safresh1 push @tmpdirs, $tmpdir; 31*f3efcd01Safresh1 return $tmpdir; 32*f3efcd01Safresh1} 33*f3efcd01Safresh1 34*f3efcd01Safresh1my $tmp; 35*f3efcd01Safresh1 36b8851fccSafresh1sub generate_file { 37b8851fccSafresh1 my ($dir, $rel_filename, $content) = @_; 38b8851fccSafresh1 39b8851fccSafresh1 File::Path::mkpath($dir) or die "failed to create '$dir'"; 40b8851fccSafresh1 my $abs_filename = File::Spec->catfile($dir, $rel_filename); 41b8851fccSafresh1 42b8851fccSafresh1 Test::More::note("working on $abs_filename"); 43b8851fccSafresh1 44b8851fccSafresh1 my $fh = IO::File->new(">$abs_filename") or die "Can't write '$abs_filename'\n"; 45b8851fccSafresh1 print $fh $content; 46b8851fccSafresh1 close $fh; 47b8851fccSafresh1 48b8851fccSafresh1 return $abs_filename; 49b8851fccSafresh1} 50b8851fccSafresh1 51*f3efcd01Safresh1END { 52*f3efcd01Safresh1 die "tests failed; leaving temp dir $tmp behind" 53*f3efcd01Safresh1 if $ENV{AUTHOR_TESTING} and not Test::Builder->new->is_passing; 54*f3efcd01Safresh1 chdir _original_cwd; 55*f3efcd01Safresh1 foreach my $tmp (@tmpdirs) { 56*f3efcd01Safresh1 Test::More::note "removing temp dir $tmp"; 57*f3efcd01Safresh1 File::Path::rmtree($tmp); 58*f3efcd01Safresh1 } 59*f3efcd01Safresh1} 60*f3efcd01Safresh1 61b8851fccSafresh11; 62