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