t / t0202 / test.plon commit Merge branch 'master' of https://github.com/vnwildman/git (26a567e)
   1#!/usr/bin/perl
   2use 5.008;
   3use lib (split(/:/, $ENV{GITPERLLIB}));
   4use strict;
   5use warnings;
   6use POSIX qw(:locale_h);
   7use Test::More tests => 13;
   8use Git::I18N;
   9
  10my $has_gettext_library = $Git::I18N::__HAS_LIBRARY;
  11
  12ok(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"));
  20ok(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}
  26is_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
  64SKIP: {
  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}