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