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 => 88;
11
12use Locale::Messages qw (bindtextdomain textdomain ngettext);
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");
37
38Locale::Messages::setlocale (POSIX::LC_ALL() => '');
39
40my $locale_dir = $0;
41$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.';
42$locale_dir .= '/LocaleData';
43
44bindtextdomain not_here => $locale_dir;
45textdomain 'not_here';
46
47my @strings = qw (Singular Plural);
48for (0 .. 9) {
49	# Prototype checking fails here if you pass the list @strings.
50	my $translation = ngettext ($strings[0], $strings[1], $_);
51	my $expected = $_ == 1 ? 'Singular' : 'Plural';
52	ok $translation, $expected;
53}
54
55my $textdomain = 'existing';
56Locale::Messages::nl_putenv ("LANGUAGE=C");
57Locale::Messages::nl_putenv ("LC_ALL=C");
58Locale::Messages::nl_putenv ("LANG=C");
59Locale::Messages::nl_putenv ("LC_MESSAGES=C");
60
61Locale::Messages::setlocale (POSIX::LC_ALL() => '');
62
63my $bound_dir = bindtextdomain $textdomain => $locale_dir;
64
65ok defined $bound_dir;
66ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir));
67
68my $bound_domain = textdomain $textdomain;
69
70ok  defined $bound_domain && $textdomain eq $bound_domain;
71
72for (0 .. 9) {
73	my $translation = ngettext ($strings[0], $strings[1], $_);
74	my $expected = $_ == 1 ? 'Singular' : 'Plural';
75	ok $translation, $expected;
76}
77
78Locale::Messages::nl_putenv ("LANGUAGE=de_AT");
79Locale::Messages::nl_putenv ("LC_ALL=de_AT");
80Locale::Messages::nl_putenv ("LANG=de_AT");
81Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT");
82
83my $missing_locale = 'locale de_AT missing';
84my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => '');
85if ($setlocale && $setlocale =~ /(?:austria|at)/i) {
86	$missing_locale = '';
87} else {
88	require Locale::Util;
89
90	$setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT');
91	if ($setlocale && $setlocale =~ /(?:austria|at)/i) {
92		$missing_locale = '';
93	}
94}
95
96for (0 .. 9) {
97	my $translation = ngettext ($strings[0], $strings[1], $_);
98	my $expected = $_ == 1 ? 'Einzahl' : 'Mehrzahl';
99	skip $missing_locale, $translation, $expected;
100}
101
102$textdomain = 'additional';
103Locale::Messages::nl_putenv ("LANGUAGE=C");
104Locale::Messages::nl_putenv ("LC_ALL=C");
105Locale::Messages::nl_putenv ("LANG=C");
106Locale::Messages::nl_putenv ("LC_MESSAGES=C");
107
108Locale::Messages::setlocale (POSIX::LC_ALL() => '');
109
110$bound_dir = bindtextdomain $textdomain => $locale_dir;
111
112ok defined $bound_dir;
113ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($bound_dir));
114
115$bound_domain = textdomain $textdomain;
116
117ok defined $bound_domain;
118ok $bound_domain, $textdomain;
119
120for (0 .. 9) {
121	my $translation = ngettext ($strings[0], $strings[1], $_);
122	my $expected = $_ == 1 ? 'Singular' : 'Plural';
123	ok $translation, $expected;
124}
125
126Locale::Messages::nl_putenv ("LANGUAGE=de_AT");
127Locale::Messages::nl_putenv ("LC_ALL=de_AT");
128Locale::Messages::nl_putenv ("LANG=de_AT");
129Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT");
130
131Locale::Messages::setlocale (POSIX::LC_ALL() => $setlocale) unless $missing_locale;
132
133for (0 .. 40) {
134	my $translation = ngettext ($strings[0], $strings[1], $_);
135	my $plural = ($_ == 1 ? 0 :
136				  $_ % 10 == 2 ? 1 :
137				  $_ % 10 == 3 || $_ %10 == 4 ? 2 : 3);
138	skip $missing_locale, $translation, "Numerus $plural";
139}
140
141__END__
142
143Local Variables:
144mode: perl
145perl-indent-level: 4
146perl-continued-statement-offset: 4
147perl-continued-brace-offset: 0
148perl-brace-offset: -4
149perl-brace-imaginary-offset: 0
150perl-label-offset: -4
151cperl-indent-level: 4
152cperl-continued-statement-offset: 2
153tab-width: 4
154End:
155
156