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