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