1#! /bin/sh 2 3# Test recognition of Scheme format strings. 4 5tmpfiles="" 6trap 'rm -fr $tmpfiles' 1 2 3 15 7 8tmpfiles="$tmpfiles f-sc-1.data" 9cat <<\EOF > f-sc-1.data 10# Valid: no argument, ( | . *) 11"abc~~def" 12# Valid: one argument, (* | . *) 13"abc~Sdef" 14# Valid: 11 arguments, (* * * * * * * * * * * | . *) 15"abc~10@*~Sdef" 16# Invalid: unterminated 17"abc~~def~" 18# Invalid: unterminated 19"abc~~def~1" 20# Invalid: unterminated 21"abc~~def~:" 22# Invalid: unterminated 23"abc~~def~@" 24# Valid: colon 25"abc~:Sdef" 26# Valid: atsign 27"abc~@Sdef" 28# Valid: colon and atsign 29"abc~:@Sdef" 30# Valid: atsign and colon 31"abc~@:Sdef" 32# Valid: params before atsign and colon 33"abc~3,-4,,'*@:Sdef" 34# Invalid: params after atsign and colon 35"abc~@:3,-4Sdef" 36# Invalid: params after atsign and colon 37"abc~@:-4Sdef" 38# Invalid: params after atsign and colon 39"abc~@:,-4Sdef" 40# Valid: V and # params, (i() * | . *) 41"abc~#,vSdef" 42# Invalid: wrong type params 43"abc~,'*Sdef" 44# Valid: FORMAT-ASCII, (i() i() i() c() * | . *) 45"abc~v,v,v,vA" 46# Invalid: too many params 47"abc~v,v,v,v,5A" 48# Valid: FORMAT-S-EXPRESSION, (i() i() i() c() * | . *) 49"abc~v,v,v,vS" 50# Invalid: too many params 51"abc~v,v,v,v,5S" 52# Valid: FORMAT-PRETTY, (* | . *) 53"abc~Y" 54# Invalid: too many params 55"abc~3Y" 56# Valid: FORMAT-DECIMAL, (i() c() c() i() i | . *) 57"abc~v,v,v,vD" 58# Invalid: too many params 59"abc~v,v,v,v,5D" 60# Valid: FORMAT-BINARY, (i() c() c() i() i | . *) 61"abc~v,v,v,vB" 62# Invalid: too many params 63"abc~v,v,v,v,5B" 64# Valid: FORMAT-OCTAL, (i() c() c() i() i | . *) 65"abc~v,v,v,vO" 66# Invalid: too many params 67"abc~v,v,v,v,5O" 68# Valid: FORMAT-HEXADECIMAL, (i() c() c() i() i | . *) 69"abc~v,v,v,vX" 70# Invalid: too many params 71"abc~v,v,v,v,5X" 72# Valid: FORMAT-RADIX, (i() i() c() c() i() i | . *) 73"abc~v,v,v,v,vR" 74# Invalid: too many params 75"abc~v,v,v,v,v,5R" 76# Valid: FORMAT-PLURAL, (* | . *) 77"abc~P" 78# Valid: FORMAT-PLURAL, (i | . *) 79"abc~R egg~:P" 80# Invalid: too many params 81"abc~2P" 82# Valid: FORMAT-CHARACTER, (c | . *) 83"abc~C" 84# Valid: FORMAT-CHARACTER, ( | . *) 85"abc~4C" 86# Invalid: too many params 87"abc~4,4C" 88# Valid: FORMAT-FIXED-FLOAT, (i() i() i() c() c() r | . *) 89"abc~v,v,v,v,vF" 90# Invalid: too many params 91"abc~v,v,v,v,v,5F" 92# Valid: FORMAT-EXPONENTIAL-FLOAT, (i() i() i() i() c() c() c() r | . *) 93"abc~v,v,v,v,v,v,vE" 94# Invalid: too many params 95"abc~v,v,v,v,v,v,v,5E" 96# Valid: FORMAT-GENERAL-FLOAT, (i() i() i() i() c() c() c() r | . *) 97"abc~v,v,v,v,v,v,vG" 98# Invalid: too many params 99"abc~v,v,v,v,v,v,v,5G" 100# Valid: FORMAT-DOLLARS-FLOAT, (i() i() i() c() r | . *) 101"abc~v,v,v,v$" 102# Invalid: too many params 103"abc~v,v,v,v,5$" 104# Valid: FORMAT-FIXED-FLOAT-COMPLEX, (C | .*) 105"abc~I" 106# Valid: FORMAT-TERPRI, (i() | . *) 107"abc~v%" 108# Invalid: too many params 109"abc~v,5%" 110# Valid: FORMAT-FRESH-LINE, (i() | . *) 111"abc~v&" 112# Invalid: too many params 113"abc~v,5&" 114# Valid: FORMAT-SPACE, (i() | . *) 115"abc~v_" 116# Invalid: too many params 117"abc~v,5_" 118# Valid: FORMAT-TAB, (i() | . *) 119"abc~v/" 120# Invalid: too many params 121"abc~v,5/" 122# Valid: FORMAT-PAGE, (i() | . *) 123"abc~v|" 124# Invalid: too many params 125"abc~v,5|" 126# Valid: FORMAT-TILDE, (i() | . *) 127"abc~v~" 128# Invalid: too many params 129"abc~v,5~" 130# Valid: FORMAT-FORCE-OUTPUT, ( | . *) 131"abc~!" 132# Invalid: too many params 133"abc~5!" 134# Valid: FORMAT-IMPLEMENTATION, ( | . *) 135"abc~Q" 136# Invalid: too many params 137"abc~5Q" 138# Valid: FORMAT-TABULATE, (i() i() c() | . *) 139"abc~v,v,vT" 140# Invalid: too many params 141"abc~v,v,v,5T" 142# Valid: FORMAT-GOTO absolute, (* r c | . *) 143"abc~S~F~S~2@*~C" 144# Invalid: type incompatibility 145"abc~S~F~S~1@*~C" 146# Valid: FORMAT-GOTO backward, (* c r | . *) 147"abc~S~S~F~2:*~C" 148# Invalid: type incompatibility 149"abc~S~S~F~1:*~C" 150# Invalid: too many params 151"abc~v,4*" 152# Valid: FORMAT-GOTO with large number 153"abc~S~F~S~1000000@*~C" 154# Valid: FORMAT-INDIRECTION, (~ ( | . *) | . *) 155"abc~?" 156# Valid: FORMAT-INDIRECTION, (~ | . *) 157"abc~@?" 158# Invalid: too many params 159"abc~4?" 160# Valid: FORMAT-INDIRECTION, (~ ( | . *) | . *) 161"abc~K" 162# Valid: FORMAT-INDIRECTION, (~ | . *) 163"abc~@K" 164# Invalid: too many params 165"abc~4K" 166# Valid: FORMAT-CASE-CONVERSION, (* | . *) 167"abc~(~S~)" 168# Invalid: too many params 169"abc~4(~S~)" 170# Invalid: too many params 171"abc~(~S~4)" 172# Invalid: unterminated 173"abc~(~S" 174# Invalid: separator 175"abc~(~S~;~S~)" 176# Valid: FORMAT-CONDITIONAL, (i() c | . *) 177"abc~@[~D~]~C" 178# Valid: FORMAT-CONDITIONAL, (i() | . *) 179"abc~@[~D~D~]~C" 180# Invalid: separator 181"abc~@[~D~;~D~]~C" 182# Valid: FORMAT-CONDITIONAL, (* i c | . *) 183"abc~:[~X~;~D~]~C" 184# Invalid: missing separator 185"abc~:[~D~]~C" 186# Invalid: too many separators 187"abc~:[~X~;~D~;~E~]~C" 188# Valid: FORMAT-CONDITIONAL, (* | . *) 189"abc~[~D~;~X~]~C" 190# Valid: FORMAT-CONDITIONAL, (* i c | . *) 191"abc~[~D~;~X~:;~R~]~C" 192# Invalid: default clause not last 193"abc~[~D~;~X~:;~R~;~R~]~C" 194# Invalid: too many params 195"abc~4@[~D~]" 196# Invalid: too many params 197"abc~@[~D~4]" 198# Invalid: too many params 199"abc~4:[~D~;~X~]" 200# Invalid: too many params 201"abc~:[~D~4;~X~]" 202# Invalid: too many params 203"abc~:[~D~;~X~4]" 204# Valid: FORMAT-CONDITIONAL, one param, without colon or atsign 205"abc~4[~D~;~X~]" 206# Invalid: too many params 207"abc~4,4[~D~;~X~]" 208# Invalid: too many params 209"abc~[~D~4;~X~]" 210# Invalid: too many params 211"abc~[~D~;~X~4]" 212# Valid: FORMAT-ITERATION, (( | . *) | . *) 213"abc~{~~~}" 214# Valid: FORMAT-ITERATION, (( | . ( | . *)) | . *) 215"abc~:{~~~}" 216# Valid: FORMAT-ITERATION, ( | . *) 217"abc~@{~~~}" 218# Valid: FORMAT-ITERATION, ( | . ( | . *)) 219"abc~:@{~~~}" 220# Valid: FORMAT-ITERATION with indirection, (~ ( | . *) | . *) 221"abc~{~}" 222# Valid: FORMAT-ITERATION with indirection, (~ ( | . ( | . *)) | . *) 223"abc~:{~}" 224# Valid: FORMAT-ITERATION with indirection, (~ | . *) 225"abc~@{~}" 226# Valid: FORMAT-ITERATION with indirection, (~ | . ( | . *)) 227"abc~:@{~}" 228# Valid: FORMAT-ITERATION with loop, (( | . i c) | . *) 229"abc~{~D ~C~}" 230# Valid: FORMAT-ITERATION with loop, (( | . (i c | . *)) | . *) 231"abc~:{~D ~C~}" 232# Valid: FORMAT-ITERATION with loop, ( | . i c) 233"abc~@{~D ~C~}" 234# Valid: FORMAT-ITERATION with loop, ( | . (i c | . *)) 235"abc~:@{~D ~C~}" 236# Valid: FORMAT-ITERATION with variable-advance loop, (( | . *) | . *) 237"abc~{~[~D~]~}" 238# Valid: FORMAT-ITERATION with variable-advance loop, (( | . (* | . *)) | . *) 239"abc~:{~[~D~]~}" 240# Valid: FORMAT-ITERATION with variable-advance loop, ( | . *) 241"abc~@{~[~D~]~}" 242# Valid: FORMAT-ITERATION with variable-advance loop, ( | . (* | . *)) 243"abc~:@{~[~D~]~}" 244# Invalid: separator 245"abc~{~D~;~C~}" 246# Invalid: wrongly nested 247"abc~{~(~}~)" 248# Valid: any number of arguments 249"abc~v,v,v,v,v!" 250# Invalid: type incompatibility between integer and list 251"abc~D~:*~{~D~}" 252# Invalid: type incompatibility between real and list 253"abc~{~S~}~:*~F" 254# Valid: list must be empty 255"abc~{~C~}~:*~{~D~}" 256EOF 257 258: ${XGETTEXT=xgettext} 259n=0 260while read comment; do 261 read string 262 n=`expr $n + 1` 263 tmpfiles="$tmpfiles f-sc-1-$n.in f-sc-1-$n.po" 264 cat <<EOF > f-sc-1-$n.in 265(gettext ${string}) 266EOF 267 ${XGETTEXT} -L Scheme -o f-sc-1-$n.po f-sc-1-$n.in || exit 1 268 test -f f-sc-1-$n.po || exit 1 269 fail= 270 if echo "$comment" | grep 'Valid:' > /dev/null; then 271 if grep scheme-format f-sc-1-$n.po > /dev/null; then 272 : 273 else 274 fail=yes 275 fi 276 else 277 if grep scheme-format f-sc-1-$n.po > /dev/null; then 278 fail=yes 279 else 280 : 281 fi 282 fi 283 if test -n "$fail"; then 284 echo "Format string recognition error:" 1>&2 285 cat f-sc-1-$n.in 1>&2 286 echo "Got:" 1>&2 287 cat f-sc-1-$n.po 1>&2 288 exit 1 289 fi 290 rm -f f-sc-1-$n.in f-sc-1-$n.po 291done < f-sc-1.data 292 293rm -fr $tmpfiles 294 295exit 0 296