xref: /netbsd-src/external/gpl2/gettext/dist/gettext-tools/tests/format-python-2 (revision 946379e7b37692fc43f68eb0d1c10daa0a7f3b6c)
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