The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

#! /usr/local/bin/perl -w
# vim: tabstop=4
# Portable character conversion for Perl.
# Copyright (C) 2002-2017 Guido Flohr <guido.flohr@cantanea.com>,
# all rights reserved.
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# This is a safe wrapper for systems that lack a POSIX shell or have
# a too low limit on the length of the command line.
use strict;
sub test_harness;
my $here = dirname ($0);
my $test_dir = $here . '/tests';
my @lib_dirs = ($here . '/blib/lib', $here . '/blib/arch');
local *DIR;
opendir DIR, $test_dir or die "cannot open test directory '$test_dir': $!";
@ARGV = sort map $test_dir . '/' . $_, grep /\.t$/, readdir DIR;
closedir DIR;
eval {
require Encode;
};
unless ($@) {
print "# Encode revision used is $Encode::VERSION.\n";
}
test_harness ($ENV{TEST_HARNESS} || 0, @lib_dirs);
sub test_harness
{
$Test::Harness::verbose = shift;
local @INC = @INC;
unshift @INC, map { File::Spec->rel2abs($_) } @_;
my $name = $0;
$name =~ s,test\.pl$,xs_disabled,;
local *HANDLE;
open HANDLE, "<$name" or die "cannot open '$name': $!";
my $xs_disabled = <HANDLE>;
close HANDLE;
eval {
require POSIX;
POSIX::setlocale(POSIX::LC_ALL());
};
my $has_locales = !$@;
if (!$has_locales) {
$xs_disabled = 1;
print <<EOF;
The translation features of libintl-perl cannot be tested on your system
because it lacks locale support.
EOF
}
if (!$xs_disabled && !$ENV{TEST_LIBINTL_PERL_XS_VERSION}) {
$xs_disabled = 1;
print <<EOF;
The XS version of libintl-perl will normally not be tested extensively
because it depends on local configurations not under control of the module
installation. You can enable them by setting the environment variable
"TEST_LIBINTL_PERL_XS_VERSION" to a Perl truth variable.
EOF
}
if (!$xs_disabled && $has_locales) {
# It is pointless to test the XS extension, if no German
# locales are installed on the system. The results
# vary in almost arbitrary ways.
# FIXME: Do not rely on the de, resp. de_AT locales only.
# We can simply try other combinations (fr_CA,
# en_GB, pt_BR, and so on), since the actual
# translations are not meaningful in our case.
# We could therefore just test here for certain
# combinations, and then create the mo files on
# the fly by copying.
require POSIX;
Locale::Messages::nl_putenv ("LANGUAGE=de_AT");
Locale::Messages::nl_putenv ("LC_ALL=de_AT");
Locale::Messages::nl_putenv ("LANG=de_AT");
Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT");
Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1");
my $has_de_locale = POSIX::setlocale (POSIX::LC_ALL() => '');
unless ($has_de_locale) {
require Locale::Util;
$has_de_locale =
Locale::Util::set_locale (POSIX::LC_ALL(),
'de');
undef $has_de_locale
unless ($has_de_locale
&& $has_de_locale =~ /(?:germany|de)/i);
}
unless ($has_de_locale) {
$xs_disabled = 1;
print <<EOF;
The translation features of libintl-perl cannot be tested on your
system because the locale definitions for German do not exist.
EOF
}
$xs_disabled = !$has_de_locale;
}
if (!$has_locales) {
Test::Harness::runtests (grep { ! /0[34][a-z_]+_(?:pp|xs)\.t$/ } sort
{lc $a cmp lc $b } @ARGV);
} elsif ($xs_disabled) {
Test::Harness::runtests (grep { ! /0[34][a-z_]+_xs\.t$/ } sort
{lc $a cmp lc $b } @ARGV);
} else {
Test::Harness::runtests (sort {lc $a cmp lc $b } @ARGV);
}
}
__END__
Local Variables:
mode: perl
perl-indent-level: 4
perl-continued-statement-offset: 4
perl-continued-brace-offset: 0
perl-brace-offset: -4
perl-brace-imaginary-offset: 0
perl-label-offset: -4
cperl-indent-level: 4
cperl-continued-statement-offset: 2
tab-width: 4
End: