1#! /usr/local/bin/perl -w 2 3# vim: syntax=perl 4# vim: tabstop=4 5 6use strict; 7 8use Test; 9 10use constant NUM_TESTS => 95; 11 12use Locale::Messages qw (bindtextdomain dcnpgettext LC_MESSAGES); 13require POSIX; 14require File::Spec; 15 16BEGIN { 17 my $package; 18 if ($0 =~ /_pp\.t$/) { 19 $package = 'gettext_pp'; 20 } else { 21 $package = 'gettext_xs'; 22 } 23 24 my $selected = Locale::Messages->select_package ($package); 25 if ($selected ne $package && 'gettext_xs' eq $package) { 26 print "1..0 # Skip: Locale::$package not available here.\n"; 27 exit 0; 28 } 29 plan tests => NUM_TESTS; 30} 31 32Locale::Messages::nl_putenv ("LANGUAGE=C"); 33Locale::Messages::nl_putenv ("LC_ALL=C"); 34Locale::Messages::nl_putenv ("LANG=C"); 35Locale::Messages::nl_putenv ("LC_MESSAGES=C"); 36Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); 37Locale::Messages::setlocale (POSIX::LC_ALL() => ''); 38 39my $locale_dir = $0; 40$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; 41$locale_dir .= '/LocaleData'; 42 43bindtextdomain not_here => $locale_dir; 44 45# make sure it works with distinct key (where context doesn't matter) 46my $context3 = "Context here (3)"; 47my @strings3 = ("Singular 3", "Plural 3"); 48for (0 .. 9) { 49 # Prototype checking fails here if you pass the list @strings. 50 my $translation = dcnpgettext (not_here => $context3, $strings3[0], $strings3[1], $_, LC_MESSAGES); 51 my $expected = $_ == 1 ? 'Singular 3' : 'Plural 3'; 52 ok $translation, $expected; 53} 54 55# not try a msgid that matches existing one 56my $context = "Context here (2)"; 57my @strings = qw (Singular Plural); 58for (0 .. 9) { 59 # Prototype checking fails here if you pass the list @strings. 60 my $translation = dcnpgettext (not_here => $context, $strings[0], $strings[1], $_, LC_MESSAGES); 61 my $expected = $_ == 1 ? 'Singular' : 'Plural'; 62 ok $translation, $expected; 63} 64 65Locale::Messages::nl_putenv ("LANGUAGE=C"); 66Locale::Messages::nl_putenv ("LC_ALL=C"); 67Locale::Messages::nl_putenv ("LANG=C"); 68Locale::Messages::nl_putenv ("LC_MESSAGES=C"); 69 70Locale::Messages::setlocale (POSIX::LC_ALL() => ''); 71 72my $bound_dir = bindtextdomain existing => $locale_dir; 73 74ok defined $bound_dir; 75ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); 76 77for (0 .. 9) { 78 my $translation = dcnpgettext (existing => $context, $strings[0], $strings[1], $_, LC_MESSAGES); 79 my $expected = $_ == 1 ? 'Singular' : 'Plural'; 80 ok $translation, $expected; 81} 82 83Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); 84Locale::Messages::nl_putenv ("LC_ALL=de_AT"); 85Locale::Messages::nl_putenv ("LANG=de_AT"); 86Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); 87my $missing_locale = Locale::Messages::setlocale (POSIX::LC_ALL() => '') ? 88 '' : 'locale de_AT missing'; 89 90for (0 .. 9) { 91 my $translation = dcnpgettext (existing => $context, $strings[0], $strings[1], $_, LC_MESSAGES); 92 my $expected = $_ == 1 ? 'Einzahl 2' : 'Mehrzahl 2'; 93 skip $missing_locale, $translation, $expected; 94} 95 96Locale::Messages::nl_putenv ("LANGUAGE=C"); 97Locale::Messages::nl_putenv ("LC_ALL=C"); 98Locale::Messages::nl_putenv ("LANG=C"); 99Locale::Messages::nl_putenv ("LC_MESSAGES=C"); 100 101Locale::Messages::setlocale (POSIX::LC_ALL() => ''); 102 103$bound_dir = bindtextdomain additional => $locale_dir; 104 105ok defined $bound_dir; 106ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); 107 108for (0 .. 9) { 109 my $translation = dcnpgettext (additional => $context, $strings[0], $strings[1], $_, LC_MESSAGES); 110 my $expected = $_ == 1 ? 'Singular' : 'Plural'; 111 ok $translation, $expected; 112} 113 114Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); 115Locale::Messages::nl_putenv ("LC_ALL=de_AT"); 116Locale::Messages::nl_putenv ("LANG=de_AT"); 117Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); 118 119Locale::Messages::setlocale (POSIX::LC_ALL() => ''); 120 121for (0 .. 40) { 122 my $translation = dcnpgettext (additional => $context, $strings[0], $strings[1], $_, LC_MESSAGES); 123 my $plural = ($_ == 1 ? 0 : 124 $_ % 10 == 2 ? 1 : 125 $_ % 10 == 3 || $_ %10 == 4 ? 2 : 3); 126 skip $missing_locale, $translation, "Numerus 2:$plural"; 127} 128 129__END__ 130 131Local Variables: 132mode: perl 133perl-indent-level: 4 134perl-continued-statement-offset: 4 135perl-continued-brace-offset: 0 136perl-brace-offset: -4 137perl-brace-imaginary-offset: 0 138perl-label-offset: -4 139cperl-indent-level: 4 140cperl-continued-statement-offset: 2 141tab-width: 4 142End: 143 144