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