You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
3.2 KiB
122 lines
3.2 KiB
#!/usr/bin/perl |
|
use 5.008; |
|
use lib (split(/:/, $ENV{GITPERLLIB})); |
|
use strict; |
|
use warnings; |
|
use POSIX qw(:locale_h); |
|
use Test::More tests => 13; |
|
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( |
|
__ $ |
|
__n $$$ |
|
N__ $ |
|
)); |
|
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"); |
|
|
|
my ($got_singular, $got_plural, $expect_singular, $expect_plural) = |
|
(('TEST: 1 file', 'TEST: n files') x 2); |
|
|
|
is(__n($got_singular, $got_plural, 1), $expect_singular, |
|
"Get singular string through __n() in C locale"); |
|
is(__n($got_singular, $got_plural, 2), $expect_plural, |
|
"Get plural string through __n() in C locale"); |
|
|
|
is(N__($got), $expect, "Passing a string through N__() 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'); |
|
} |
|
} |
|
}
|
|
|