1#!/usr/bin/perl 2use5.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{ 23my$exports=@Git::I18N::EXPORT; 24 ok($exports,"sanity: Git::I18N has$exportsexport(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. 32my%prototypes= (qw( 33 __ $ 34 __n$$$ 35 N__ $ 36 )); 37while(my($sub,$proto) =each%prototypes) { 38is(prototype(\&{"Git::I18N::$sub"}),$proto,"sanity:$subhas a$protoprototype"); 39} 40} 41 42# Test basic passthrough in the C locale 43{ 44local$ENV{LANGUAGE} ='C'; 45local$ENV{LC_ALL} ='C'; 46local$ENV{LANG} ='C'; 47 48my($got,$expect) = (('TEST: A Perl test string') x 2); 49 50is(__($got),$expect,"Passing a string through __() in the C locale works"); 51 52my($got_singular,$got_plural,$expect_singular,$expect_plural) = 53(('TEST: 1 file','TEST: n files') x 2); 54 55is(__n($got_singular,$got_plural,1),$expect_singular, 56"Get singular string through __n() in C locale"); 57is(__n($got_singular,$got_plural,2),$expect_plural, 58"Get plural string through __n() in C locale"); 59 60is(N__($got),$expect,"Passing a string through N__() in the C locale works"); 61} 62 63# Test a basic message on different locales 64SKIP: { 65unless($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 77my$is_IS_locale=$ENV{is_IS_locale}; 78 79my$test=sub{ 80my($got,$expect,$msg,$locale) =@_; 81# Maybe this system doesn't have the locale we're trying to 82# test. 83my$locale_ok= setlocale(LC_ALL,$locale); 84is(__($got),$expect,"$msga gettext library + <$locale> locale <$got> turns into <$expect>"); 85}; 86 87my$env_C=sub{ 88$ENV{LANGUAGE} ='C'; 89$ENV{LC_ALL} ='C'; 90}; 91 92my$env_is=sub{ 93$ENV{LANGUAGE} ='is'; 94$ENV{LC_ALL} =$is_IS_locale; 95}; 96 97# Translation's the same as the original 98my($got,$expect) = (('TEST: A Perl test string') x 2); 99 100if($has_gettext_library) { 101{ 102local%ENV;$env_C->(); 103$test->($got,$expect,"With",'C'); 104} 105 106{ 107my($got,$expect) = ($got,'TILRAUN: Perl tilraunastrengur'); 108local%ENV;$env_is->(); 109$test->($got,$expect,"With",$is_IS_locale); 110} 111}else{ 112{ 113local%ENV;$env_C->(); 114$test->($got,$expect,"Without",'C'); 115} 116 117{ 118local%ENV;$env_is->(); 119$test->($got,$expect,"Without",'is'); 120} 121} 122}