Merge branch 'bc/object-id'
[git] / t / t0202 / test.pl
1 #!/usr/bin/perl
2 use 5.008;
3 use lib (split(/:/, $ENV{GITPERLLIB}));
4 use strict;
5 use warnings;
6 use POSIX qw(:locale_h);
7 use Test::More tests => 13;
8 use Git::I18N;
9
10 my $has_gettext_library = $Git::I18N::__HAS_LIBRARY;
11
12 ok(1, "Testing Git::I18N with " .
13          ($has_gettext_library
14           ? (defined $Locale::Messages::VERSION
15                  ? "Locale::Messages version $Locale::Messages::VERSION"
16                  # Versions of Locale::Messages before 1.17 didn't have a
17                  # $VERSION variable.
18                  : "Locale::Messages version <1.17")
19           : "NO Perl gettext library"));
20 ok(1, "Git::I18N is located at $INC{'Git/I18N.pm'}");
21
22 {
23         my $exports = @Git::I18N::EXPORT;
24         ok($exports, "sanity: Git::I18N has $exports export(s)");
25 }
26 is_deeply(\@Git::I18N::EXPORT, \@Git::I18N::EXPORT_OK, "sanity: Git::I18N exports everything by default");
27
28 # prototypes
29 {
30         # Add prototypes here when modifying the public interface to add
31         # more gettext wrapper functions.
32         my %prototypes = (qw(
33                 __      $
34                 __n     $$$
35                 N__     $
36         ));
37         while (my ($sub, $proto) = each %prototypes) {
38                 is(prototype(\&{"Git::I18N::$sub"}), $proto, "sanity: $sub has a $proto prototype");
39         }
40 }
41
42 # Test basic passthrough in the C locale
43 {
44         local $ENV{LANGUAGE} = 'C';
45         local $ENV{LC_ALL}   = 'C';
46         local $ENV{LANG}     = 'C';
47
48         my ($got, $expect) = (('TEST: A Perl test string') x 2);
49
50         is(__($got), $expect, "Passing a string through __() in the C locale works");
51
52         my ($got_singular, $got_plural, $expect_singular, $expect_plural) =
53                 (('TEST: 1 file', 'TEST: n files') x 2);
54
55         is(__n($got_singular, $got_plural, 1), $expect_singular,
56                 "Get singular string through __n() in C locale");
57         is(__n($got_singular, $got_plural, 2), $expect_plural,
58                 "Get plural string through __n() in C locale");
59
60         is(N__($got), $expect, "Passing a string through N__() in the C locale works");
61 }
62
63 # Test a basic message on different locales
64 SKIP: {
65         unless ($ENV{GETTEXT_LOCALE}) {
66                 # Can't reliably test __() with a non-C locales because the
67                 # required locales may not be installed on the system.
68                 #
69                 # We test for these anyway as part of the shell
70                 # tests. Skipping these here will eliminate failures on odd
71                 # platforms with incomplete locale data.
72
73                 skip "GETTEXT_LOCALE must be set by lib-gettext.sh for exhaustive Git::I18N tests", 2;
74         }
75
76         # The is_IS UTF-8 locale passed from lib-gettext.sh
77         my $is_IS_locale = $ENV{is_IS_locale};
78
79         my $test = sub {
80                 my ($got, $expect, $msg, $locale) = @_;
81                 # Maybe this system doesn't have the locale we're trying to
82                 # test.
83                 my $locale_ok = setlocale(LC_ALL, $locale);
84                 is(__($got), $expect, "$msg a gettext library + <$locale> locale <$got> turns into <$expect>");
85         };
86
87         my $env_C = sub {
88                 $ENV{LANGUAGE} = 'C';
89                 $ENV{LC_ALL}   = 'C';
90         };
91
92         my $env_is = sub {
93                 $ENV{LANGUAGE} = 'is';
94                 $ENV{LC_ALL}   = $is_IS_locale;
95         };
96
97         # Translation's the same as the original
98         my ($got, $expect) = (('TEST: A Perl test string') x 2);
99
100         if ($has_gettext_library) {
101                 {
102                         local %ENV; $env_C->();
103                         $test->($got, $expect, "With", 'C');
104                 }
105
106                 {
107                         my ($got, $expect) = ($got, 'TILRAUN: Perl tilraunastrengur');
108                         local %ENV; $env_is->();
109                         $test->($got, $expect, "With", $is_IS_locale);
110                 }
111         } else {
112                 {
113                         local %ENV; $env_C->();
114                         $test->($got, $expect, "Without", 'C');
115                 }
116
117                 {
118                         local %ENV; $env_is->();
119                         $test->($got, $expect, "Without", 'is');
120                 }
121         }
122 }