зеркало из https://github.com/microsoft/git.git
111 строки
2.8 KiB
Perl
111 строки
2.8 KiB
Perl
|
#!/usr/bin/perl
|
||
|
use 5.008;
|
||
|
use lib (split(/:/, $ENV{GITPERLLIB}));
|
||
|
use strict;
|
||
|
use warnings;
|
||
|
use POSIX qw(:locale_h);
|
||
|
use Test::More tests => 8;
|
||
|
use Git::I18N;
|
||
|
|
||
|
my $has_gettext_library = $Git::I18N::__HAS_LIBRARY;
|
||
|
|
||
|
ok(1, "Testing Git::I18N with " .
|
||
|
($has_gettext_library
|
||
|
? (defined $Locale::Messages::VERSION
|
||
|
? "Locale::Messages version $Locale::Messages::VERSION"
|
||
|
# Versions of Locale::Messages before 1.17 didn't have a
|
||
|
# $VERSION variable.
|
||
|
: "Locale::Messages version <1.17")
|
||
|
: "NO Perl gettext library"));
|
||
|
ok(1, "Git::I18N is located at $INC{'Git/I18N.pm'}");
|
||
|
|
||
|
{
|
||
|
my $exports = @Git::I18N::EXPORT;
|
||
|
ok($exports, "sanity: Git::I18N has $exports export(s)");
|
||
|
}
|
||
|
is_deeply(\@Git::I18N::EXPORT, \@Git::I18N::EXPORT_OK, "sanity: Git::I18N exports everything by default");
|
||
|
|
||
|
# prototypes
|
||
|
{
|
||
|
# Add prototypes here when modifying the public interface to add
|
||
|
# more gettext wrapper functions.
|
||
|
my %prototypes = (qw(
|
||
|
__ $
|
||
|
));
|
||
|
while (my ($sub, $proto) = each %prototypes) {
|
||
|
is(prototype(\&{"Git::I18N::$sub"}), $proto, "sanity: $sub has a $proto prototype");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# Test basic passthrough in the C locale
|
||
|
{
|
||
|
local $ENV{LANGUAGE} = 'C';
|
||
|
local $ENV{LC_ALL} = 'C';
|
||
|
local $ENV{LANG} = 'C';
|
||
|
|
||
|
my ($got, $expect) = (('TEST: A Perl test string') x 2);
|
||
|
|
||
|
is(__($got), $expect, "Passing a string through __() in the C locale works");
|
||
|
}
|
||
|
|
||
|
# Test a basic message on different locales
|
||
|
SKIP: {
|
||
|
unless ($ENV{GETTEXT_LOCALE}) {
|
||
|
# Can't reliably test __() with a non-C locales because the
|
||
|
# required locales may not be installed on the system.
|
||
|
#
|
||
|
# We test for these anyway as part of the shell
|
||
|
# tests. Skipping these here will eliminate failures on odd
|
||
|
# platforms with incomplete locale data.
|
||
|
|
||
|
skip "GETTEXT_LOCALE must be set by lib-gettext.sh for exhaustive Git::I18N tests", 2;
|
||
|
}
|
||
|
|
||
|
# The is_IS UTF-8 locale passed from lib-gettext.sh
|
||
|
my $is_IS_locale = $ENV{is_IS_locale};
|
||
|
|
||
|
my $test = sub {
|
||
|
my ($got, $expect, $msg, $locale) = @_;
|
||
|
# Maybe this system doesn't have the locale we're trying to
|
||
|
# test.
|
||
|
my $locale_ok = setlocale(LC_ALL, $locale);
|
||
|
is(__($got), $expect, "$msg a gettext library + <$locale> locale <$got> turns into <$expect>");
|
||
|
};
|
||
|
|
||
|
my $env_C = sub {
|
||
|
$ENV{LANGUAGE} = 'C';
|
||
|
$ENV{LC_ALL} = 'C';
|
||
|
};
|
||
|
|
||
|
my $env_is = sub {
|
||
|
$ENV{LANGUAGE} = 'is';
|
||
|
$ENV{LC_ALL} = $is_IS_locale;
|
||
|
};
|
||
|
|
||
|
# Translation's the same as the original
|
||
|
my ($got, $expect) = (('TEST: A Perl test string') x 2);
|
||
|
|
||
|
if ($has_gettext_library) {
|
||
|
{
|
||
|
local %ENV; $env_C->();
|
||
|
$test->($got, $expect, "With", 'C');
|
||
|
}
|
||
|
|
||
|
{
|
||
|
my ($got, $expect) = ($got, 'TILRAUN: Perl tilraunastrengur');
|
||
|
local %ENV; $env_is->();
|
||
|
$test->($got, $expect, "With", $is_IS_locale);
|
||
|
}
|
||
|
} else {
|
||
|
{
|
||
|
local %ENV; $env_C->();
|
||
|
$test->($got, $expect, "Without", 'C');
|
||
|
}
|
||
|
|
||
|
{
|
||
|
local %ENV; $env_is->();
|
||
|
$test->($got, $expect, "Without", 'is');
|
||
|
}
|
||
|
}
|
||
|
}
|