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