1*946379e7Schristos#! /bin/sh 2*946379e7Schristos 3*946379e7Schristos# Test checking of Python format strings. 4*946379e7Schristos 5*946379e7Schristostmpfiles="" 6*946379e7Schristostrap 'rm -fr $tmpfiles' 1 2 3 15 7*946379e7Schristos 8*946379e7Schristostmpfiles="$tmpfiles f-p-2.data" 9*946379e7Schristoscat <<\EOF > f-p-2.data 10*946379e7Schristos# Valid: %% doesn't count 11*946379e7Schristosmsgid "abc%%def" 12*946379e7Schristosmsgstr "xyz" 13*946379e7Schristos# Invalid: invalid msgstr 14*946379e7Schristosmsgid "abc%%def" 15*946379e7Schristosmsgstr "xyz%" 16*946379e7Schristos# Valid: same arguments, with different widths 17*946379e7Schristosmsgid "abc%2sdef" 18*946379e7Schristosmsgstr "xyz%3s" 19*946379e7Schristos# Invalid: too few arguments 20*946379e7Schristosmsgid "abc%sdef%u" 21*946379e7Schristosmsgstr "xyz%s" 22*946379e7Schristos# Invalid: too many arguments 23*946379e7Schristosmsgid "abc%udef" 24*946379e7Schristosmsgstr "xyz%uvw%c" 25*946379e7Schristos# Valid: same named arguments, with different widths 26*946379e7Schristosmsgid "abc%(date)5s%(time)4s" 27*946379e7Schristosmsgstr "xyz%(date)4s%(time)5s" 28*946379e7Schristos# Valid: permutation 29*946379e7Schristosmsgid "abc%(3)d%(1)c%(2)sdef" 30*946379e7Schristosmsgstr "xyz%(2)s%(1)c%(3)d" 31*946379e7Schristos# Invalid: missing argument 32*946379e7Schristosmsgid "abc%(2)sdef%(1)u" 33*946379e7Schristosmsgstr "xyz%(1)u" 34*946379e7Schristos# Invalid: missing argument 35*946379e7Schristosmsgid "abc%(1)sdef%(2)u" 36*946379e7Schristosmsgstr "xyz%(2)u" 37*946379e7Schristos# Invalid: added argument 38*946379e7Schristosmsgid "abc%(foo)udef" 39*946379e7Schristosmsgstr "xyz%(foo)uvw%(char)c" 40*946379e7Schristos# Invalid: added argument 41*946379e7Schristosmsgid "abc%(foo)udef" 42*946379e7Schristosmsgstr "xyz%(foo)uvw%(zoo)c" 43*946379e7Schristos# Invalid: unnamed vs. named arguments 44*946379e7Schristosmsgid "abc%sdef" 45*946379e7Schristosmsgstr "xyz%(value)s" 46*946379e7Schristos# Invalid: named vs. unnamed arguments 47*946379e7Schristosmsgid "abc%(value)sdef" 48*946379e7Schristosmsgstr "xyz%s" 49*946379e7Schristos# Valid: type compatibility 50*946379e7Schristosmsgid "abc%s" 51*946379e7Schristosmsgstr "xyz%r" 52*946379e7Schristos# Valid: type compatibility 53*946379e7Schristosmsgid "abc%r" 54*946379e7Schristosmsgstr "xyz%s" 55*946379e7Schristos# Valid: type compatibility 56*946379e7Schristosmsgid "abc%i" 57*946379e7Schristosmsgstr "xyz%d" 58*946379e7Schristos# Valid: type compatibility 59*946379e7Schristosmsgid "abc%i" 60*946379e7Schristosmsgstr "xyz%u" 61*946379e7Schristos# Valid: type compatibility 62*946379e7Schristosmsgid "abc%i" 63*946379e7Schristosmsgstr "xyz%o" 64*946379e7Schristos# Valid: type compatibility 65*946379e7Schristosmsgid "abc%i" 66*946379e7Schristosmsgstr "xyz%x" 67*946379e7Schristos# Valid: type compatibility 68*946379e7Schristosmsgid "abc%i" 69*946379e7Schristosmsgstr "xyz%X" 70*946379e7Schristos# Valid: type compatibility 71*946379e7Schristosmsgid "abc%e" 72*946379e7Schristosmsgstr "xyz%E" 73*946379e7Schristos# Valid: type compatibility 74*946379e7Schristosmsgid "abc%e" 75*946379e7Schristosmsgstr "xyz%f" 76*946379e7Schristos# Valid: type compatibility 77*946379e7Schristosmsgid "abc%e" 78*946379e7Schristosmsgstr "xyz%g" 79*946379e7Schristos# Valid: type compatibility 80*946379e7Schristosmsgid "abc%e" 81*946379e7Schristosmsgstr "xyz%G" 82*946379e7Schristos# Invalid: type incompatibility 83*946379e7Schristosmsgid "abc%c" 84*946379e7Schristosmsgstr "xyz%s" 85*946379e7Schristos# Invalid: type incompatibility 86*946379e7Schristosmsgid "abc%c" 87*946379e7Schristosmsgstr "xyz%i" 88*946379e7Schristos# Invalid: type incompatibility 89*946379e7Schristosmsgid "abc%c" 90*946379e7Schristosmsgstr "xyz%e" 91*946379e7Schristos# Invalid: type incompatibility 92*946379e7Schristosmsgid "abc%s" 93*946379e7Schristosmsgstr "xyz%i" 94*946379e7Schristos# Invalid: type incompatibility 95*946379e7Schristosmsgid "abc%s" 96*946379e7Schristosmsgstr "xyz%e" 97*946379e7Schristos# Invalid: type incompatibility 98*946379e7Schristosmsgid "abc%i" 99*946379e7Schristosmsgstr "xyz%e" 100*946379e7Schristos# Invalid: type incompatibility for width 101*946379e7Schristosmsgid "abc%g%*g" 102*946379e7Schristosmsgstr "xyz%*g%g" 103*946379e7SchristosEOF 104*946379e7Schristos 105*946379e7Schristos: ${MSGFMT=msgfmt} 106*946379e7Schristosn=0 107*946379e7Schristoswhile read comment; do 108*946379e7Schristos read msgid_line 109*946379e7Schristos read msgstr_line 110*946379e7Schristos n=`expr $n + 1` 111*946379e7Schristos tmpfiles="$tmpfiles f-p-2-$n.po f-p-2-$n.mo" 112*946379e7Schristos cat <<EOF > f-p-2-$n.po 113*946379e7Schristos#, python-format 114*946379e7Schristos${msgid_line} 115*946379e7Schristos${msgstr_line} 116*946379e7SchristosEOF 117*946379e7Schristos fail= 118*946379e7Schristos if echo "$comment" | grep 'Valid:' > /dev/null; then 119*946379e7Schristos if ${MSGFMT} --check-format -o f-p-2-$n.mo f-p-2-$n.po; then 120*946379e7Schristos : 121*946379e7Schristos else 122*946379e7Schristos fail=yes 123*946379e7Schristos fi 124*946379e7Schristos else 125*946379e7Schristos ${MSGFMT} --check-format -o f-p-2-$n.mo f-p-2-$n.po 2> /dev/null 126*946379e7Schristos if test $? = 1; then 127*946379e7Schristos : 128*946379e7Schristos else 129*946379e7Schristos fail=yes 130*946379e7Schristos fi 131*946379e7Schristos fi 132*946379e7Schristos if test -n "$fail"; then 133*946379e7Schristos echo "Format string checking error:" 1>&2 134*946379e7Schristos cat f-p-2-$n.po 1>&2 135*946379e7Schristos exit 1 136*946379e7Schristos fi 137*946379e7Schristos rm -f f-p-2-$n.po f-p-2-$n.mo 138*946379e7Schristosdone < f-p-2.data 139*946379e7Schristos 140*946379e7Schristosrm -fr $tmpfiles 141*946379e7Schristos 142*946379e7Schristosexit 0 143