1#! /bin/sh 2. "${srcdir=.}/init.sh"; path_prepend_ . ../src 3 4# Test recognition of C format strings. 5 6cat <<\EOF > f-c-1.data 7# Valid: no argument 8"abc%%" 9# Valid: one character argument 10"abc%c" 11# Valid: one string argument 12"abc%s" 13# Valid: one integer argument 14"abc%i" 15# Valid: one integer argument 16"abc%d" 17# Valid: one integer argument 18"abc%o" 19# Valid: one integer argument 20"abc%u" 21# Valid: one integer argument 22"abc%x" 23# Valid: one integer argument 24"abc%X" 25# Valid: one floating-point argument 26"abc%e" 27# Valid: one floating-point argument 28"abc%E" 29# Valid: one floating-point argument 30"abc%f" 31# Valid: one floating-point argument 32"abc%F" 33# Valid: one floating-point argument 34"abc%g" 35# Valid: one floating-point argument 36"abc%G" 37# Valid: one floating-point argument 38"abc%a" 39# Valid: one floating-point argument 40"abc%A" 41# Valid: one pointer argument 42"abc%p" 43# Valid: one argument with flags 44"abc%0#g" 45# Valid: one argument with width 46"abc%2g" 47# Valid: one argument with width 48"abc%*g" 49# Valid: one argument with precision 50"abc%.4g" 51# Valid: one argument with precision 52"abc%.*g" 53# Valid: one argument with width and precision 54"abc%14.4g" 55# Valid: one argument with width and precision 56"abc%14.*g" 57# Valid: one argument with width and precision 58"abc%*.4g" 59# Valid: one argument with width and precision 60"abc%*.*g" 61# Valid: one argument with size specifier 62"abc%hhi" 63# Valid: one argument with size specifier 64"abc%hi" 65# Valid: one argument with size specifier 66"abc%li" 67# Valid: one argument with size specifier 68"abc%lli" 69# Valid: one argument with size specifier 70"abc%Lg" 71# Valid: one argument with size specifier 72"abc%qi" 73# Valid: one argument with size specifier 74"abc%ji" 75# Valid: one argument with size specifier 76"abc%zi" 77# Valid: one argument with size specifier 78"abc%ti" 79# Invalid: unterminated 80"abc%" 81# Invalid: unknown format specifier 82"abc%y" 83# Invalid: flags after width 84"abc%*0g" 85# Invalid: twice precision 86"abc%.4.2g" 87# Valid: three arguments 88"abc%d%u%u" 89# Valid: a numbered argument 90"abc%1$d" 91# Invalid: zero 92"abc%0$d" 93# Valid: two-digit numbered arguments 94"abc%11$def%10$dgh%9$dij%8$dkl%7$dmn%6$dop%5$dqr%4$dst%3$duv%2$dwx%1$dyz" 95# Invalid: unterminated number 96"abc%1" 97# Invalid: flags before number 98"abc%+1$d" 99# Valid: three arguments, two with same number 100"abc%1$4x,%2$c,%1$u" 101# Invalid: argument with conflicting types 102"abc%1$4x,%2$c,%1$s" 103# Valid: no conflict 104"abc%1$4x,%2$c,%1$u" 105# Invalid: mixing of numbered and unnumbered arguments 106"abc%d%2$x" 107# Valid: numbered argument with constant precision 108"abc%1$.9x" 109# Invalid: mixing of numbered and unnumbered arguments 110"abc%1$.*x" 111# Invalid: missing non-final argument 112"abc%2$x%3$s" 113# Valid: permutation 114"abc%2$ddef%1$d" 115# Valid: multiple uses of same argument 116"abc%2$xdef%1$pghi%2$x" 117# Valid: one argument with width 118"abc%2$#*1$g" 119# Valid: one argument with width and precision 120"abc%3$*2$.*1$g" 121# Invalid: zero 122"abc%2$*0$.*1$g" 123EOF 124 125: ${XGETTEXT=xgettext} 126n=0 127while read comment; do 128 read string 129 n=`expr $n + 1` 130 cat <<EOF > f-c-1-$n.in 131gettext(${string}); 132EOF 133 ${XGETTEXT} -L C -o f-c-1-$n.po f-c-1-$n.in || Exit 1 134 test -f f-c-1-$n.po || Exit 1 135 fail= 136 if echo "$comment" | grep 'Valid:' > /dev/null; then 137 if grep c-format f-c-1-$n.po > /dev/null; then 138 : 139 else 140 fail=yes 141 fi 142 else 143 if grep c-format f-c-1-$n.po > /dev/null; then 144 fail=yes 145 else 146 : 147 fi 148 fi 149 if test -n "$fail"; then 150 echo "Format string recognition error:" 1>&2 151 cat f-c-1-$n.in 1>&2 152 echo "Got:" 1>&2 153 cat f-c-1-$n.po 1>&2 154 Exit 1 155 fi 156 rm -f f-c-1-$n.in f-c-1-$n.po 157done < f-c-1.data 158 159Exit 0 160