1#! /bin/sh 2 3# Test recognition of Boost format strings. 4 5tmpfiles="" 6trap 'rm -fr $tmpfiles' 1 2 3 15 7 8tmpfiles="$tmpfiles f-bo-1.data" 9cat <<\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||" 276EOF 277 278: ${XGETTEXT=xgettext} 279n=0 280while 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 285gettext(${string}); 286EOF 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 311done < f-bo-1.data 312 313rm -fr $tmpfiles 314 315exit 0 316