xref: /openbsd-src/gnu/usr.bin/perl/cpan/Module-Metadata/t/lib/GeneratePackage.pm (revision f3efcd0145415b7d44d9da97e0ad5c21b186ac61)
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