| #! /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; |
| use File::Basename; |
| use Test::Harness; |
| use File::Spec; |
| |
| 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; |
| require Locale::Messages; |
| 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: |
| |