xref: /openbsd-src/gnu/usr.bin/perl/t/lib/common.pl (revision ae3cb403620ab940fbaabb3055fac045a63d56b7)
1# This code is used by lib/charnames.t, lib/croak.t, lib/feature.t,
2# lib/subs.t, lib/strict.t and lib/warnings.t
3#
4# On input, $::local_tests is the number of tests in the caller; or
5# 'no_plan' if unknown, in which case it is the caller's responsibility
6# to call cur_test() to find out how many this executed
7
8BEGIN {
9    require './test.pl'; require './charset_tools.pl';
10}
11
12use Config;
13use File::Path;
14use File::Spec::Functions qw(catfile curdir rel2abs);
15
16use strict;
17use warnings;
18my (undef, $file) = caller;
19my ($pragma_name) = $file =~ /([A-Za-z_0-9]+)\.t$/
20    or die "Can't identify pragama to test from file name '$file'";
21
22$| = 1;
23
24my @w_files;
25
26if (@ARGV) {
27    print "ARGV = [@ARGV]\n";
28    @w_files = map { "./lib/$pragma_name/$_" } @ARGV;
29} else {
30    @w_files = sort glob catfile(curdir(), "lib", $pragma_name, "*");
31}
32
33my ($tests, @prgs) = setup_multiple_progs(@w_files);
34
35$^X = rel2abs($^X);
36@INC = map { rel2abs($_) } @INC;
37my $tempdir = tempfile;
38
39mkdir $tempdir, 0700 or die "Can't mkdir '$tempdir': $!";
40chdir $tempdir or die die "Can't chdir '$tempdir': $!";
41my $cleanup = 1;
42
43END {
44    if ($cleanup) {
45	chdir '..' or die "Couldn't chdir .. for cleanup: $!";
46	rmtree($tempdir);
47    }
48}
49
50if ($::local_tests && $::local_tests =~ /\D/) {
51    # If input is 'no_plan', pass it on unchanged
52    plan $::local_tests;
53} else {
54    plan $tests + ($::local_tests || 0);
55}
56
57run_multiple_progs('../..', @prgs);
58
591;
60