xref: /netbsd-src/external/gpl2/gettext/dist/gettext-tools/tests/xgettext-perl-1 (revision 946379e7b37692fc43f68eb0d1c10daa0a7f3b6c)
1*946379e7Schristos#!/bin/sh
2*946379e7Schristos
3*946379e7Schristos# Test of Perl support.
4*946379e7Schristos
5*946379e7Schristostmpfiles=""
6*946379e7Schristostrap 'rm -fr $tmpfiles' 1 2 3 15
7*946379e7Schristos
8*946379e7Schristostmpfiles="$tmpfiles xg-pl-1.pl"
9*946379e7Schristoscat <<\EOF > xg-pl-1.pl
10*946379e7Schristosuse Locale::Messages qw (textdomain bindtextdomain gettext ngettext dngettext);
11*946379e7Schristos
12*946379e7Schristostextdomain "prog";
13*946379e7Schristosbindtextdomain "prog", "./";
14*946379e7Schristos
15*946379e7Schristoss/foo/
16*946379e7Schristos          # stress test for string extraction /xe;
17*946379e7Schristos
18*946379e7Schristosprint _"'Your command, please?', asked the waiter.";
19*946379e7Schristos
20*946379e7Schristosprintf ngettext ("a piece of cake", "%d pieces of cake", $n), $n;
21*946379e7Schristos
22*946379e7Schristosprintf _"%s is replaced by %s.", "FF", "EUR";
23*946379e7Schristos
24*946379e7Schristos# Should be found.
25*946379e7Schristosprintf dngettext prog => ("one file deleted", "%d files deleted"), $n, $n;
26*946379e7Schristos
27*946379e7Schristos# Should not be found.
28*946379e7Schristosprintf dngettext ("prog"), ("one file created", "%d files created"), $n, $n;
29*946379e7Schristos
30*946379e7Schristosprintf dngettext "prog", <<PERL, <<PERL;
31*946379e7SchristosSingular
32*946379e7SchristosPERL
33*946379e7SchristosPlural
34*946379e7SchristosPERL
35*946379e7Schristos
36*946379e7Schristosprint <<PERL
37*946379e7Schristostied hash $__{   Bareword
38*946379e7Schristos}
39*946379e7Schristostied hash $__->{"quoted string"}
40*946379e7Schristostied hash $__->{  "weird
41*946379e7Schristosformatting"}
42*946379e7SchristosPERL
43*946379e7Schristos
44*946379e7Schristosprint $__  # Welcome
45*946379e7Schristos   ->   # to the
46*946379e7Schristos { # Republic of
47*946379e7Schristos 'Welcome to the Republic of Perl!' #
48*946379e7Schristos# Perl!
49*946379e7Schristos};
50*946379e7Schristos
51*946379e7Schristos$! ? ?$__{"pattern match"}? : s  # This is no delimiter.
52*946379e7Schristos{$__{substitution}}<$__-\>{"find me"}>;
53*946379e7Schristos
54*946379e7Schristos# No interpolation!
55*946379e7Schristosm'$__{secret}';
56*946379e7Schristos
57*946379e7Schristos# Multiple here documents invoked from the same line.
58*946379e7Schristosprint gettext <<PERL; print gettext <<PERL;
59*946379e7SchristosFirst here document.
60*946379e7SchristosPERL
61*946379e7SchristosSecond here document.
62*946379e7SchristosPERL
63*946379e7Schristos
64*946379e7Schristos# These are not invalid interpolations, because the dollar is backslashed.
65*946379e7Schristosprintf "%s\n", gettext "abc\$def";
66*946379e7Schristosprintf "%s\n", gettext "abc\\\$def";
67*946379e7Schristos
68*946379e7Schristos# These are not interpolations.
69*946379e7Schristosprintf "%s\n", gettext 'abc$defg';
70*946379e7Schristosprintf "%s\n", gettext 'abc\$defg';
71*946379e7Schristosprintf "%s\n", gettext 'abc\\$defg';
72*946379e7Schristosprintf "%s\n", gettext 'abc\\\$defg';
73*946379e7Schristos
74*946379e7Schristos# Two consecutive backslashes count as one inside single-quote strings.
75*946379e7Schristosprintf "%s\n", gettext 'ecs\tasy';
76*946379e7Schristosprintf "%s\n", gettext 'ecs\\tasy';
77*946379e7Schristosprintf "%s\n", gettext 'ecs\\\tasy';
78*946379e7Schristosprintf "%s\n", gettext 'ecs\\\\tasy';
79*946379e7Schristosprintf "%s\n", gettext 'ecs\\\\\tasy';
80*946379e7Schristosprintf "%s\n", gettext q(ecs\tasy);
81*946379e7Schristosprintf "%s\n", gettext q(ecs\\tasy);
82*946379e7Schristosprintf "%s\n", gettext q(ecs\\\tasy);
83*946379e7Schristosprintf "%s\n", gettext q(ecs\\\\tasy);
84*946379e7Schristosprintf "%s\n", gettext q(ecs\\\\\tasy);
85*946379e7Schristos
86*946379e7Schristos# Similarly, inside double-quote strings, two consecutive backslashes count
87*946379e7Schristos# as one, but the last backslash of a sequence is combined with the following
88*946379e7Schristos# character if possible.
89*946379e7Schristosprintf "%s\n", gettext "ecs\tasy";
90*946379e7Schristosprintf "%s\n", gettext "ecs\\tasy";
91*946379e7Schristosprintf "%s\n", gettext "ecs\\\tasy";
92*946379e7Schristosprintf "%s\n", gettext "ecs\\\\tasy";
93*946379e7Schristosprintf "%s\n", gettext "ecs\\\\\tasy";
94*946379e7Schristosprintf "%s\n", gettext qq(ecs\tasy);
95*946379e7Schristosprintf "%s\n", gettext qq(ecs\\tasy);
96*946379e7Schristosprintf "%s\n", gettext qq(ecs\\\tasy);
97*946379e7Schristosprintf "%s\n", gettext qq(ecs\\\\tasy);
98*946379e7Schristosprintf "%s\n", gettext qq(ecs\\\\\tasy);
99*946379e7Schristosprintf "%s\n", gettext "mari\huana";
100*946379e7Schristosprintf "%s\n", gettext "mari\\huana";
101*946379e7Schristosprintf "%s\n", gettext "mari\\\huana";
102*946379e7Schristosprintf "%s\n", gettext "mari\\\\huana";
103*946379e7Schristosprintf "%s\n", gettext "mari\\\\\huana";
104*946379e7Schristosprintf "%s\n", gettext qq(mari\huana);
105*946379e7Schristosprintf "%s\n", gettext qq(mari\\huana);
106*946379e7Schristosprintf "%s\n", gettext qq(mari\\\huana);
107*946379e7Schristosprintf "%s\n", gettext qq(mari\\\\huana);
108*946379e7Schristosprintf "%s\n", gettext qq(mari\\\\\huana);
109*946379e7Schristos
110*946379e7Schristos# Recognition of format strings.
111*946379e7Schristosgettext "This is {only} a brace formatstring.";
112*946379e7Schristosgettext "This is %s {mixed}.";
113*946379e7Schristosgettext "This is only %c.";
114*946379e7Schristosgettext "This is nothing at all.";
115*946379e7Schristosgettext "And this is %l also no format at all.";
116*946379e7Schristos
117*946379e7Schristos# xgettext: no-perl-format, perl-brace-format
118*946379e7Schristosgettext "The function '{func}' expects '%c' here.";
119*946379e7Schristos
120*946379e7Schristos# This is a contradictory case: The same string three times,
121*946379e7Schristos# with different xgettext comments.
122*946379e7Schristos# xgettext: perl-brace-format, no-perl-format
123*946379e7Schristosgettext "Left as an %exercise to {maintainer}.";
124*946379e7Schristos# xgettext: no-perl-brace-format, perl-format
125*946379e7Schristosgettext "Left as an %exercise to {maintainer}.";
126*946379e7Schristos# No xgettext comment this time.
127*946379e7Schristosgettext "Left as an %exercise to {maintainer}.";
128*946379e7Schristos
129*946379e7Schristos# Dollars inside sub argument lists have no effect.
130*946379e7Schristossub testFunc($) { }
131*946379e7Schristos=item TestBug1
132*946379e7SchristosIf you have gettext()'d foo bar test1'...
133*946379e7Schristos=cut
134*946379e7Schristos
135*946379e7Schristos# Dollars inside sub argument lists have no effect.
136*946379e7SchristostestFunc = sub ($) { }
137*946379e7Schristos=item TestBug2
138*946379e7SchristosIf you have gettext()'d foo bar test2'...
139*946379e7Schristos=cut
140*946379e7Schristos
141*946379e7Schristos# Dollars inside sub argument lists have no effect.
142*946379e7Schristossub testFunc($\$;*@) { }
143*946379e7Schristos=item TestBug3
144*946379e7SchristosIf you have gettext()'d foo bar test3'...
145*946379e7Schristos=cut
146*946379e7Schristos
147*946379e7Schristos__END__
148*946379e7Schristosgettext "Discarded!";
149*946379e7SchristosEOF
150*946379e7Schristos
151*946379e7Schristostmpfiles="$tmpfiles xg-pl-1.po"
152*946379e7Schristos: ${XGETTEXT=xgettext}
153*946379e7Schristos${XGETTEXT} --omit-header -n \
154*946379e7Schristos  -k_ --flag=_:1:pass-perl-format --flag=_:1:pass-perl-brace-format \
155*946379e7Schristos  -k%__ --flag=%__:1:pass-perl-format --flag=%__:1:pass-perl-brace-format \
156*946379e7Schristos  -k\$__ --flag=\$__:1:pass-perl-format --flag=\$__:1:pass-perl-brace-format \
157*946379e7Schristos  -d xg-pl-1 xg-pl-1.pl
158*946379e7Schristostest $? = 0 || { rm -fr $tmpfiles; exit 1; }
159*946379e7Schristos
160*946379e7Schristostmpfiles="$tmpfiles xg-pl-1.ok"
161*946379e7Schristoscat <<\EOF > xg-pl-1.ok
162*946379e7Schristos#: xg-pl-1.pl:9
163*946379e7Schristosmsgid "'Your command, please?', asked the waiter."
164*946379e7Schristosmsgstr ""
165*946379e7Schristos
166*946379e7Schristos#: xg-pl-1.pl:11
167*946379e7Schristos#, perl-format
168*946379e7Schristosmsgid "a piece of cake"
169*946379e7Schristosmsgid_plural "%d pieces of cake"
170*946379e7Schristosmsgstr[0] ""
171*946379e7Schristosmsgstr[1] ""
172*946379e7Schristos
173*946379e7Schristos#: xg-pl-1.pl:13
174*946379e7Schristos#, perl-format
175*946379e7Schristosmsgid "%s is replaced by %s."
176*946379e7Schristosmsgstr ""
177*946379e7Schristos
178*946379e7Schristos#: xg-pl-1.pl:16
179*946379e7Schristos#, perl-format
180*946379e7Schristosmsgid "one file deleted"
181*946379e7Schristosmsgid_plural "%d files deleted"
182*946379e7Schristosmsgstr[0] ""
183*946379e7Schristosmsgstr[1] ""
184*946379e7Schristos
185*946379e7Schristos#: xg-pl-1.pl:22
186*946379e7Schristos#, perl-format
187*946379e7Schristosmsgid "Singular\n"
188*946379e7Schristosmsgid_plural "Plural\n"
189*946379e7Schristosmsgstr[0] ""
190*946379e7Schristosmsgstr[1] ""
191*946379e7Schristos
192*946379e7Schristos#: xg-pl-1.pl:28
193*946379e7Schristosmsgid "Bareword"
194*946379e7Schristosmsgstr ""
195*946379e7Schristos
196*946379e7Schristos#: xg-pl-1.pl:30
197*946379e7Schristosmsgid "quoted string"
198*946379e7Schristosmsgstr ""
199*946379e7Schristos
200*946379e7Schristos#: xg-pl-1.pl:31
201*946379e7Schristosmsgid ""
202*946379e7Schristos"weird\n"
203*946379e7Schristos"formatting"
204*946379e7Schristosmsgstr ""
205*946379e7Schristos
206*946379e7Schristos#: xg-pl-1.pl:38
207*946379e7Schristosmsgid "Welcome to the Republic of Perl!"
208*946379e7Schristosmsgstr ""
209*946379e7Schristos
210*946379e7Schristos#: xg-pl-1.pl:42
211*946379e7Schristosmsgid "pattern match"
212*946379e7Schristosmsgstr ""
213*946379e7Schristos
214*946379e7Schristos#: xg-pl-1.pl:43
215*946379e7Schristosmsgid "substitution"
216*946379e7Schristosmsgstr ""
217*946379e7Schristos
218*946379e7Schristos#: xg-pl-1.pl:43
219*946379e7Schristosmsgid "find me"
220*946379e7Schristosmsgstr ""
221*946379e7Schristos
222*946379e7Schristos#: xg-pl-1.pl:50
223*946379e7Schristosmsgid "First here document.\n"
224*946379e7Schristosmsgstr ""
225*946379e7Schristos
226*946379e7Schristos#: xg-pl-1.pl:52
227*946379e7Schristosmsgid "Second here document.\n"
228*946379e7Schristosmsgstr ""
229*946379e7Schristos
230*946379e7Schristos#: xg-pl-1.pl:56
231*946379e7Schristosmsgid "abc$def"
232*946379e7Schristosmsgstr ""
233*946379e7Schristos
234*946379e7Schristos#: xg-pl-1.pl:57
235*946379e7Schristosmsgid "abc\\$def"
236*946379e7Schristosmsgstr ""
237*946379e7Schristos
238*946379e7Schristos#: xg-pl-1.pl:60
239*946379e7Schristosmsgid "abc$defg"
240*946379e7Schristosmsgstr ""
241*946379e7Schristos
242*946379e7Schristos#: xg-pl-1.pl:61 xg-pl-1.pl:62
243*946379e7Schristosmsgid "abc\\$defg"
244*946379e7Schristosmsgstr ""
245*946379e7Schristos
246*946379e7Schristos#: xg-pl-1.pl:63
247*946379e7Schristosmsgid "abc\\\\$defg"
248*946379e7Schristosmsgstr ""
249*946379e7Schristos
250*946379e7Schristos#: xg-pl-1.pl:66 xg-pl-1.pl:67 xg-pl-1.pl:71 xg-pl-1.pl:72 xg-pl-1.pl:81
251*946379e7Schristos#: xg-pl-1.pl:86
252*946379e7Schristosmsgid "ecs\\tasy"
253*946379e7Schristosmsgstr ""
254*946379e7Schristos
255*946379e7Schristos#: xg-pl-1.pl:68 xg-pl-1.pl:69 xg-pl-1.pl:73 xg-pl-1.pl:74 xg-pl-1.pl:83
256*946379e7Schristos#: xg-pl-1.pl:88
257*946379e7Schristosmsgid "ecs\\\\tasy"
258*946379e7Schristosmsgstr ""
259*946379e7Schristos
260*946379e7Schristos#: xg-pl-1.pl:70 xg-pl-1.pl:75
261*946379e7Schristosmsgid "ecs\\\\\\tasy"
262*946379e7Schristosmsgstr ""
263*946379e7Schristos
264*946379e7Schristos#: xg-pl-1.pl:80 xg-pl-1.pl:85
265*946379e7Schristosmsgid "ecs\tasy"
266*946379e7Schristosmsgstr ""
267*946379e7Schristos
268*946379e7Schristos#: xg-pl-1.pl:82 xg-pl-1.pl:87
269*946379e7Schristosmsgid "ecs\\\tasy"
270*946379e7Schristosmsgstr ""
271*946379e7Schristos
272*946379e7Schristos#: xg-pl-1.pl:84 xg-pl-1.pl:89
273*946379e7Schristosmsgid "ecs\\\\\tasy"
274*946379e7Schristosmsgstr ""
275*946379e7Schristos
276*946379e7Schristos#: xg-pl-1.pl:90 xg-pl-1.pl:95
277*946379e7Schristosmsgid "marihuana"
278*946379e7Schristosmsgstr ""
279*946379e7Schristos
280*946379e7Schristos#: xg-pl-1.pl:91 xg-pl-1.pl:92 xg-pl-1.pl:96 xg-pl-1.pl:97
281*946379e7Schristosmsgid "mari\\huana"
282*946379e7Schristosmsgstr ""
283*946379e7Schristos
284*946379e7Schristos#: xg-pl-1.pl:93 xg-pl-1.pl:94 xg-pl-1.pl:98 xg-pl-1.pl:99
285*946379e7Schristosmsgid "mari\\\\huana"
286*946379e7Schristosmsgstr ""
287*946379e7Schristos
288*946379e7Schristos#: xg-pl-1.pl:102
289*946379e7Schristos#, perl-brace-format
290*946379e7Schristosmsgid "This is {only} a brace formatstring."
291*946379e7Schristosmsgstr ""
292*946379e7Schristos
293*946379e7Schristos#: xg-pl-1.pl:103
294*946379e7Schristos#, perl-format, perl-brace-format
295*946379e7Schristosmsgid "This is %s {mixed}."
296*946379e7Schristosmsgstr ""
297*946379e7Schristos
298*946379e7Schristos#: xg-pl-1.pl:104
299*946379e7Schristos#, perl-format
300*946379e7Schristosmsgid "This is only %c."
301*946379e7Schristosmsgstr ""
302*946379e7Schristos
303*946379e7Schristos#: xg-pl-1.pl:105
304*946379e7Schristosmsgid "This is nothing at all."
305*946379e7Schristosmsgstr ""
306*946379e7Schristos
307*946379e7Schristos#: xg-pl-1.pl:106
308*946379e7Schristosmsgid "And this is %l also no format at all."
309*946379e7Schristosmsgstr ""
310*946379e7Schristos
311*946379e7Schristos#: xg-pl-1.pl:109
312*946379e7Schristos#, no-perl-format, perl-brace-format
313*946379e7Schristosmsgid "The function '{func}' expects '%c' here."
314*946379e7Schristosmsgstr ""
315*946379e7Schristos
316*946379e7Schristos#: xg-pl-1.pl:114 xg-pl-1.pl:116 xg-pl-1.pl:118
317*946379e7Schristos#, perl-format, no-perl-brace-format
318*946379e7Schristosmsgid "Left as an %exercise to {maintainer}."
319*946379e7Schristosmsgstr ""
320*946379e7SchristosEOF
321*946379e7Schristos
322*946379e7Schristos: ${DIFF=diff}
323*946379e7Schristos${DIFF} xg-pl-1.ok xg-pl-1.po
324*946379e7Schristosresult=$?
325*946379e7Schristos
326*946379e7Schristosrm -fr $tmpfiles
327*946379e7Schristos
328*946379e7Schristosexit $result
329