• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#! /bin/sh
2. "${srcdir=.}/init.sh"; path_prepend_ . ../src
3
4# Test recognition of Ruby format strings.
5
6(rxgettext --version) >/dev/null 2>/dev/null \
7  || { echo "Skipping test: rxgettext not found"; Exit 77; }
8
9cat <<\EOF > f-r-1.data
10# Valid: no argument
11"abc%%"
12# Valid: one string argument (unnumbered)
13"abc%s"
14# Valid: one string argument (numbered)
15"abc%1$s"
16# Valid: one string argument (named)
17"abc%<foo>s"
18# Valid: one string argument (named)
19"abc%{foo}"
20# Valid: one escaped string argument (unnumbered)
21"abc%p"
22# Valid: one escaped string argument (numbered)
23"abc%1$p"
24# Valid: one escaped string argument (named)
25"abc%<foo>p"
26# Valid: one character argument (unnumbered)
27"abc%c"
28# Valid: one character argument (numbered)
29"abc%1$c"
30# Valid: one character argument (named)
31"abc%<foo>c"
32# Valid: one integer argument (unnumbered)
33"abc%d"
34# Valid: one integer argument (numbered)
35"abc%1$d"
36# Valid: one integer argument (named)
37"abc%<foo>d"
38# Valid: one integer argument (unnumbered)
39"abc%i"
40# Valid: one integer argument (numbered)
41"abc%1$i"
42# Valid: one integer argument (named)
43"abc%<foo>i"
44# Valid: one integer argument (unnumbered)
45"abc%u"
46# Valid: one integer argument (numbered)
47"abc%1$u"
48# Valid: one integer argument (named)
49"abc%<foo>u"
50# Valid: one integer argument (unnumbered)
51"abc%o"
52# Valid: one integer argument (numbered)
53"abc%1$o"
54# Valid: one integer argument (named)
55"abc%<foo>o"
56# Valid: one integer argument (unnumbered)
57"abc%x"
58# Valid: one integer argument (numbered)
59"abc%1$x"
60# Valid: one integer argument (named)
61"abc%<foo>x"
62# Valid: one integer argument (unnumbered)
63"abc%X"
64# Valid: one integer argument (numbered)
65"abc%1$X"
66# Valid: one integer argument (named)
67"abc%<foo>X"
68# Valid: one integer argument (unnumbered)
69"abc%b"
70# Valid: one integer argument (numbered)
71"abc%1$b"
72# Valid: one integer argument (named)
73"abc%<foo>b"
74# Valid: one integer argument (unnumbered)
75"abc%B"
76# Valid: one integer argument (numbered)
77"abc%1$B"
78# Valid: one integer argument (named)
79"abc%<foo>B"
80# Valid: one floating-point argument (unnumbered)
81"abc%f"
82# Valid: one floating-point argument (numbered)
83"abc%1$f"
84# Valid: one floating-point argument (named)
85"abc%<foo>f"
86# Valid: one floating-point argument (unnumbered)
87"abc%g"
88# Valid: one floating-point argument (numbered)
89"abc%1$g"
90# Valid: one floating-point argument (named)
91"abc%<foo>g"
92# Valid: one floating-point argument (unnumbered)
93"abc%G"
94# Valid: one floating-point argument (numbered)
95"abc%1$G"
96# Valid: one floating-point argument (named)
97"abc%<foo>G"
98# Valid: one floating-point argument (unnumbered)
99"abc%e"
100# Valid: one floating-point argument (numbered)
101"abc%1$e"
102# Valid: one floating-point argument (named)
103"abc%<foo>e"
104# Valid: one floating-point argument (unnumbered)
105"abc%E"
106# Valid: one floating-point argument (numbered)
107"abc%1$E"
108# Valid: one floating-point argument (named)
109"abc%<foo>E"
110# Valid: one floating-point argument (unnumbered)
111"abc%a"
112# Valid: one floating-point argument (numbered)
113"abc%1$a"
114# Valid: one floating-point argument (named)
115"abc%<foo>a"
116# Valid: one floating-point argument (unnumbered)
117"abc%A"
118# Valid: one floating-point argument (numbered)
119"abc%1$A"
120# Valid: one floating-point argument (named)
121"abc%<foo>A"
122# Valid: one argument with flags (unnumbered)
123"abc%0#g"
124# Valid: one argument with flags (numbered)
125"abc%1$0#g"
126# Valid: one argument with flags (numbered)
127"abc%0#1$g"
128# Valid: one argument with flags (named)
129"abc%<foo>0#g"
130# Valid: one argument with flags (named)
131"abc%0#<foo>g"
132# Valid: one argument with width (unnumbered)
133"abc%2g"
134# Valid: one argument with width (numbered)
135"abc%1$2g"
136# Valid: one argument with width (named)
137"abc%<foo>2g"
138# Valid: one argument with width (named)
139"abc%2<foo>g"
140# Valid: one argument with width (unnumbered)
141"abc%*g"
142# Valid: one argument with width (numbered)
143"abc%2$*1$g"
144# Valid: one argument with precision (unnumbered)
145"abc%.4g"
146# Valid: one argument with precision (numbered)
147"abc%1$.4g"
148# Valid: one argument with precision (named)
149"abc%<foo>.4g"
150# Valid: one argument with precision (named)
151"abc%.4<foo>g"
152# Valid: one argument with precision (unnumbered)
153"abc%.*g"
154# Valid: one argument with precision (numbered)
155"abc%2$.*1$g"
156# Valid: one argument with width and precision (unnumbered)
157"abc%14.4g"
158# Valid: one argument with width and precision (numbered)
159"abc%1$14.4g"
160# Valid: one argument with width and precision (named)
161"abc%<foo>14.4g"
162# Valid: one argument with width and precision (named)
163"abc%14<foo>.4g"
164# Valid: one argument with width and precision (named)
165"abc%14.4<foo>g"
166# Valid: one argument with width and precision (unnumbered)
167"abc%14.*g"
168# Valid: one argument with width and precision (numbered)
169"abc%2$14.*1$g"
170# Valid: one argument with width and precision (unnumbered)
171"abc%*.4g"
172# Valid: one argument with width and precision (numbered)
173"abc%2$*1$.4g"
174# Valid: one argument with width and precision (unnumbered)
175"abc%*.*g"
176# Valid: one argument with width and precision (numbered)
177"abc%3$*1$.*2$g"
178# Invalid: unterminated directive
179"abc%"
180# Invalid: unterminated name
181"abc%<value"
182# Invalid: unterminated name
183"abc%{value"
184# Invalid: unterminated directive
185"abc%<value>"
186# Invalid: unknown format specifier (unnumbered)
187"abc%y"
188# Invalid: mixing unnumbered and numbered in the same directive
189"abc%2$*g"
190# Invalid: mixing unnumbered and numbered in the same directive
191"abc%*1$g"
192# Invalid: mixing unnumbered and numbered in the same directive
193"abc%2$.*g"
194# Invalid: mixing unnumbered and numbered in the same directive
195"abc%.*1$g"
196# Invalid: mixing unnumbered and numbered in different directives
197"abc%d%2$g"
198# Invalid: mixing unnumbered and numbered in different directives
199"abc%1$d%g"
200# Invalid: mixing unnumbered and named in the same directive
201"abc%*<foo>g"
202# Invalid: mixing unnumbered and named in the same directive
203"abc%.*<foo>g"
204# Invalid: mixing unnumbered and named in different directives
205"abc%d%<foo>g"
206# Invalid: mixing unnumbered and named in different directives
207"abc%<foo>d%g"
208# Invalid: mixing numbered and named in the same directive
209"abc%*1$<foo>g"
210# Invalid: mixing numbered and named in the same directive
211"abc%.*1$<foo>g"
212# Invalid: mixing numbered and named in different directives
213"abc%2$d%<foo>g"
214# Invalid: mixing numbered and named in different directives
215"abc%<foo>d%2$g"
216# Invalid: flags after width (unnumbered)
217"abc%*0g"
218# Invalid: flags after width (numbered)
219"abc%2$*1$0g"
220# Invalid: flags after precision (unnumbered)
221"abc%.*0g"
222# Invalid: flags after precision (numbered)
223"abc%2$.*1$0g"
224# Invalid: width after precision (unnumbered)
225"abc%.*14g"
226# Invalid: width after precision (unnumbered)
227"abc%.4*g"
228# Invalid: width after precision (unnumbered)
229"abc%.**g"
230# Invalid: width after precision (numbered)
231"abc%2$.*1$14g"
232# Invalid: width after precision (numbered)
233"abc%2$.4*1$g"
234# Invalid: width after precision (numbered)
235"abc%3$.*1$*2$g"
236# Invalid: twice width (unnumbered)
237"abc%2*g"
238# Invalid: twice width (unnumbered)
239"abc%*2g"
240# Invalid: twice width (numbered)
241"abc%2$2*1$g"
242# Invalid: twice width (numbered)
243"abc%2$*1$2g"
244# Invalid: twice precision (unnumbered)
245"abc%.4.2g"
246# Invalid: twice precision (numbered)
247"abc%1$.4.2g"
248# Valid: three arguments
249"abc%d%u%u"
250# Valid: an unused argument
251"abc%2$d%3$u"
252# Valid: a named argument
253"abc%<value>d"
254# Valid: a named argument
255"abc%{value}"
256# Valid: an empty name
257"abc%<>d"
258# Valid: an empty name
259"abc%{}"
260# Valid: ignored named argument
261"abc%<dummy>%"
262# Valid: three arguments, two with equal names
263"abc%<addr>4x,%<char>c,%<addr>u"
264# Invalid: argument with conflicting types
265"abc%<addr>4x,%<char>c,%<addr>s"
266# Valid: no conflict
267"abc%<addr>s,%{addr}"
268EOF
269
270: ${XGETTEXT=xgettext}
271n=0
272while read comment; do
273  read string
274  n=`expr $n + 1`
275  cat <<EOF > f-r-1-$n.in
276gettext(${string});
277EOF
278  ${XGETTEXT} -L Ruby -o f-r-1-$n.po f-r-1-$n.in || Exit 1
279  test -f f-r-1-$n.po || Exit 1
280  fail=
281  if echo "$comment" | grep 'Valid:' > /dev/null; then
282    if grep ruby-format f-r-1-$n.po > /dev/null; then
283      :
284    else
285      fail=yes
286    fi
287  else
288    if grep ruby-format f-r-1-$n.po > /dev/null; then
289      fail=yes
290    else
291      :
292    fi
293  fi
294  if test -n "$fail"; then
295    echo "Format string recognition error:" 1>&2
296    cat f-r-1-$n.in 1>&2
297    echo "Got:" 1>&2
298    cat f-r-1-$n.po 1>&2
299    Exit 1
300  fi
301  rm -f f-r-1-$n.in f-r-1-$n.po
302done < f-r-1.data
303
304Exit 0
305