format-boost-1 revision 1.1.1.1 1 #! /bin/sh
2
3 # Test recognition of Boost format strings.
4
5 tmpfiles=""
6 trap 'rm -fr $tmpfiles' 1 2 3 15
7
8 tmpfiles="$tmpfiles f-bo-1.data"
9 cat <<\EOF > f-bo-1.data
10 # Valid: no argument
11 "abc%%"
12 # Valid: one character argument
13 "abc%c"
14 # Valid: one character argument
15 "abc%|c|"
16 # Valid: one string argument
17 "abc%s"
18 # Valid: one string argument
19 "abc%|s|"
20 # Valid: one integer argument
21 "abc%i"
22 # Valid: one integer argument
23 "abc%|i|"
24 # Valid: one integer argument
25 "abc%d"
26 # Valid: one integer argument
27 "abc%|d|"
28 # Valid: one integer argument
29 "abc%o"
30 # Valid: one integer argument
31 "abc%|o|"
32 # Valid: one integer argument
33 "abc%u"
34 # Valid: one integer argument
35 "abc%|u|"
36 # Valid: one integer argument
37 "abc%x"
38 # Valid: one integer argument
39 "abc%|x|"
40 # Valid: one integer argument
41 "abc%X"
42 # Valid: one integer argument
43 "abc%|X|"
44 # Valid: one floating-point argument
45 "abc%e"
46 # Valid: one floating-point argument
47 "abc%|e|"
48 # Valid: one floating-point argument
49 "abc%E"
50 # Valid: one floating-point argument
51 "abc%|E|"
52 # Valid: one floating-point argument
53 "abc%f"
54 # Valid: one floating-point argument
55 "abc%|f|"
56 # Valid: one floating-point argument
57 "abc%g"
58 # Valid: one floating-point argument
59 "abc%|g|"
60 # Valid: one floating-point argument
61 "abc%G"
62 # Valid: one floating-point argument
63 "abc%|G|"
64 # Valid: one pointer argument
65 "abc%p"
66 # Valid: one pointer argument
67 "abc%|p|"
68 # Valid: no argument
69 "abc%n"
70 # Valid: no argument
71 "abc%|n|"
72 # Valid: one argument with flags
73 "abc%0#g"
74 # Valid: one argument with flags
75 "abc%|0#g|"
76 # Valid: one argument with width
77 "abc%2g"
78 # Valid: one argument with width
79 "abc%|2g|"
80 # Valid: one argument with width
81 "abc%*g"
82 # Valid: one argument with width
83 "abc%|*g|"
84 # Valid: one argument with precision
85 "abc%.4g"
86 # Valid: one argument with precision
87 "abc%|.4g|"
88 # Valid: one argument with precision
89 "abc%.*g"
90 # Valid: one argument with precision
91 "abc%|.*g|"
92 # Valid: one argument with width and precision
93 "abc%14.4g"
94 # Valid: one argument with width and precision
95 "abc%|14.4g|"
96 # Valid: one argument with width and precision
97 "abc%14.*g"
98 # Valid: one argument with width and precision
99 "abc%|14.*g|"
100 # Valid: one argument with width and precision
101 "abc%*.4g"
102 # Valid: one argument with width and precision
103 "abc%|*.4g|"
104 # Valid: one argument with width and precision
105 "abc%*.*g"
106 # Valid: one argument with width and precision
107 "abc%|*.*g|"
108 # Valid: one argument with size specifier
109 "abc%hhi"
110 # Valid: one argument with size specifier
111 "abc%|hhi|"
112 # Valid: one argument with size specifier
113 "abc%hi"
114 # Valid: one argument with size specifier
115 "abc%|hi|"
116 # Valid: one argument with size specifier
117 "abc%li"
118 # Valid: one argument with size specifier
119 "abc%|li|"
120 # Valid: one argument with size specifier
121 "abc%lli"
122 # Valid: one argument with size specifier
123 "abc%|lli|"
124 # Valid: one argument with size specifier
125 "abc%Lg"
126 # Valid: one argument with size specifier
127 "abc%|Lg|"
128 # Invalid: unknown size specifier
129 "abc%qi"
130 # Invalid: unknown size specifier
131 "abc%|qi|"
132 # Invalid: unknown size specifier
133 "abc%ji"
134 # Invalid: unknown size specifier
135 "abc%|ji|"
136 # Invalid: unknown size specifier
137 "abc%zi"
138 # Invalid: unknown size specifier
139 "abc%|zi|"
140 # Invalid: unterminated
141 "abc%"
142 # Invalid: unterminated
143 "abc%|"
144 # Invalid: unterminated
145 "abc%|d"
146 # Invalid: unknown format specifier
147 "abc%a"
148 # Invalid: unknown format specifier
149 "abc%|a|"
150 # Invalid: unknown format specifier
151 "abc%A"
152 # Invalid: unknown format specifier
153 "abc%|A|"
154 # Invalid: unknown format specifier
155 "abc%F"
156 # Invalid: unknown format specifier
157 "abc%|F|"
158 # Invalid: unknown format specifier
159 "abc%y"
160 # Invalid: unknown format specifier
161 "abc%|y|"
162 # Invalid: flags after width
163 "abc%*0g"
164 # Invalid: flags after width
165 "abc%|*0g|"
166 # Invalid: twice precision
167 "abc%.4.2g"
168 # Invalid: twice precision
169 "abc%|.4.2g|"
170 # Valid: three arguments
171 "abc%d%u%u"
172 # Valid: three arguments, mixed syntax
173 "abc%|d|%u%u"
174 # Valid: three arguments, mixed syntax
175 "abc%d%u%|u|"
176 # Valid: a numbered argument
177 "abc%1$d"
178 # Valid: a numbered argument
179 "abc%|1$d|"
180 # Valid: a numbered argument
181 "abc%1%"
182 # Invalid: zero
183 "abc%0$d"
184 # Invalid: zero
185 "abc%|0$d|"
186 # Invalid: zero
187 "abc%0%def"
188 # Valid: two-digit numbered arguments
189 "abc%11$def%10$dgh%9$dij%8$dkl%7$dmn%6$dop%5$dqr%4$dst%3$duv%2$dwx%1$dyz"
190 # Valid: two-digit numbered arguments
191 "abc%|11$d|ef%|10$d|gh%|9$d|ij%|8$d|kl%|7$d|mn%|6$d|op%|5$d|qr%|4$d|st%|3$d|uv%|2$d|wx%|1$d|yz"
192 # Invalid: unterminated number
193 "abc%1"
194 # Valid: omitted directive number
195 "abc%|1|"
196 # Invalid: flags before number
197 "abc%+1$d"
198 # Invalid: flags before number
199 "abc%|+1$d|"
200 # Valid: three arguments, two with same number
201 "abc%1$4x,%2$c,%1$u"
202 # Valid: three arguments, two with same number
203 "abc%|1$4x|,%|2$c|,%|1$u|"
204 # Invalid: argument with conflicting types
205 "abc%1$4x,%2$c,%1$p"
206 # Invalid: argument with conflicting types
207 "abc%|1$4x|,%|2$c|,%|1$p|"
208 # Valid: no conflict
209 "abc%1$4x,%2$c,%1$s"
210 # Valid: no conflict
211 "abc%|1$4x|,%|2$c|,%|1$s|"
212 # Valid: no conflict
213 "abc%1$4x,%2$c,%1$u"
214 # Valid: no conflict
215 "abc%|1$4x|,%|2$c|,%|1$u|"
216 # Invalid: mixing of numbered and unnumbered arguments
217 "abc%d%2$x"
218 # Invalid: mixing of numbered and unnumbered arguments
219 "abc%|d|%|2$x|"
220 # Invalid: mixing of numbered and unnumbered arguments
221 "abc%|d|%2%"
222 # Valid: numbered argument with constant precision
223 "abc%1$.9x"
224 # Valid: numbered argument with constant precision
225 "abc%|1$.9x|"
226 # Invalid: mixing of numbered and unnumbered arguments
227 "abc%1$.*x"
228 # Invalid: mixing of numbered and unnumbered arguments
229 "abc%|1$.*x|"
230 # Valid: missing non-final argument
231 "abc%2$x%3$s"
232 # Valid: missing non-final argument
233 "abc%|2$x|%|3$s|"
234 # Valid: missing non-final argument
235 "abc%2%%3%"
236 # Valid: permutation
237 "abc%2$ddef%1$d"
238 # Valid: permutation
239 "abc%|2$d|def%|1$d|"
240 # Valid: multiple uses of same argument
241 "abc%2$xdef%1$pghi%2$x"
242 # Valid: multiple uses of same argument
243 "abc%|2$x|def%|1$p|ghi|%2$x|"
244 # Valid: one argument with width
245 "abc%2$#*1$g"
246 # Valid: one argument with width
247 "abc%|2$#*1$g|"
248 # Valid: one argument with width and precision
249 "abc%3$*2$.*1$g"
250 # Valid: one argument with width and precision
251 "abc%|3$*2$.*1$g|"
252 # Invalid: zero
253 "abc%2$*0$.*1$g"
254 # Invalid: zero
255 "abc%|2$*0$.*1$g|"
256 # Valid: tab
257 "abc%t"
258 # Valid: tab
259 "abc%9t"
260 # Valid: tab
261 "abc%|9t|"
262 # Invalid: unterminated directive
263 "abc%T"
264 # Valid: tab
265 "abc%T "
266 # Valid: tab
267 "abc%99T "
268 # Invalid: unterminated directive
269 "abc%|99T "
270 # Invalid: unterminated directive
271 "abc%|99T|"
272 # Valid: tab
273 "abc%|99T |"
274 # Valid: tab
275 "abc%|99T||"
276 EOF
277
278 : ${XGETTEXT=xgettext}
279 n=0
280 while read comment; do
281 read string
282 n=`expr $n + 1`
283 tmpfiles="$tmpfiles f-bo-1-$n.in f-bo-1-$n.po"
284 cat <<EOF > f-bo-1-$n.in
285 gettext(${string});
286 EOF
287 ${XGETTEXT} -L C++ --boost -o f-bo-1-$n.po f-bo-1-$n.in || exit 1
288 test -f f-bo-1-$n.po || exit 1
289 fail=
290 if echo "$comment" | grep 'Valid:' > /dev/null; then
291 if grep boost-format f-bo-1-$n.po > /dev/null; then
292 :
293 else
294 fail=yes
295 fi
296 else
297 if grep boost-format f-bo-1-$n.po > /dev/null; then
298 fail=yes
299 else
300 :
301 fi
302 fi
303 if test -n "$fail"; then
304 echo "Format string recognition error:" 1>&2
305 cat f-bo-1-$n.in 1>&2
306 echo "Got:" 1>&2
307 cat f-bo-1-$n.po 1>&2
308 exit 1
309 fi
310 rm -f f-bo-1-$n.in f-bo-1-$n.po
311 done < f-bo-1.data
312
313 rm -fr $tmpfiles
314
315 exit 0
316