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