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