Imported Upstream version 0.19.7
[platform/upstream/gettext.git] / gettext-tools / tests / format-scheme-2
1 #! /bin/sh
2 . "${srcdir=.}/init.sh"; path_prepend_ . ../src
3
4 # Test checking of Lisp format strings.
5
6 cat <<\EOF > f-sc-2.data
7 # Valid: ~~ doesn't count
8 msgid  "abc~~def"
9 msgstr "xyz"
10 # Invalid: invalid msgstr
11 msgid  "abc~~def"
12 msgstr "xyz~"
13 # Valid: ~! doesn't count
14 msgid  "abc~!def"
15 msgstr "xyz"
16 # Valid: ~Q doesn't count
17 msgid  "abc~Qdef"
18 msgstr "xyz"
19 # Valid: same argument
20 msgid  "abc~Ddef"
21 msgstr "xyz~D"
22 # Valid: same arguments
23 msgid  "abc~1000000@*~Ddef"
24 msgstr "~1000000@*xyz~D"
25 # Valid: permutation
26 msgid  "abc~D~C~Fdef"
27 msgstr "xyz~2@*~F~2:*~C~2:*~D"
28 # Invalid: too few arguments
29 msgid  "abc~1@*~Sdef~0@*~S"
30 msgstr "xyz~S"
31 # Invalid: too many arguments
32 msgid  "abc~Ddef"
33 msgstr "xyz~Duvw~C"
34 # Invalid: missing non-final argument
35 msgid  "abc~1@*~Sdef~0@*~F"
36 msgstr "xyz~1@*~S"
37 # Invalid: added non-final argument
38 msgid  "abc~1@*~Ddef"
39 msgstr "xyz~F~D"
40 # Valid: formatting variations
41 msgid  "abc~Sdef"
42 msgstr "xyz~:S"
43 # Valid: formatting variations
44 msgid  "abc~4Sdef"
45 msgstr "xyz~7S"
46 # Valid: type compatibility
47 msgid  "abc~Sdef"
48 msgstr "xyz~Y"
49 # Valid: type compatibility
50 msgid  "abc~Ddef"
51 msgstr "xyz~B"
52 # Valid: type compatibility
53 msgid  "abc~Ddef"
54 msgstr "xyz~O"
55 # Valid: type compatibility
56 msgid  "abc~Ddef"
57 msgstr "xyz~X"
58 # Valid: type compatibility
59 msgid  "abc~Ddef"
60 msgstr "xyz~R"
61 # Valid: optional plural
62 msgid  "~D egg~:P"
63 msgstr "~D Eier"
64 # Valid: type compatibility
65 msgid  "abc~Fdef"
66 msgstr "xyz~E"
67 # Valid: type compatibility
68 msgid  "abc~Fdef"
69 msgstr "xyz~G"
70 # Valid: type compatibility
71 msgid  "abc~Fdef"
72 msgstr "xyz~$"
73 # Invalid: type incompatibility
74 msgid  "abc~Fdef"
75 msgstr "xyz~D"
76 # Invalid: type incompatibility
77 msgid  "abc~Ddef"
78 msgstr "xyz~C"
79 # Invalid: type incompatibility
80 msgid  "abc~Fdef"
81 msgstr "xyz~C"
82 # Invalid: type incompatibility
83 msgid  "abc~Sdef"
84 msgstr "xyz~D"
85 # Invalid: type incompatibility
86 msgid  "abc~Sdef"
87 msgstr "xyz~F"
88 # Invalid: type incompatibility
89 msgid  "abc~Sdef"
90 msgstr "xyz~C"
91 # Invalid: type incompatibility
92 msgid  "abc~Fdef"
93 msgstr "xyz~I"
94 # Invalid: type incompatibility
95 msgid  "abc~Ddef"
96 msgstr "xyz~I"
97 # Invalid: type incompatibility
98 msgid  "abc~Sdef"
99 msgstr "xyz~I"
100 # Invalid: type incompatibility
101 msgid  "abc~Cdef"
102 msgstr "xyz~I"
103 # Valid: extra formatting
104 msgid  "abc~Ddef~S"
105 msgstr "xyz~D~_d~/ef~%~S"
106 # Valid: extra force-output
107 msgid  "abc~Ddef~S"
108 msgstr "xyz~Ddef~S~!"
109 # Valid: FORMAT-GOTO doesn't consume an argument by itself
110 msgid  "abc~5@*~Ddef~C"
111 msgstr "xyz~6@*~C~2@*uvw~5@*~R"
112 # Valid: ~? and ~K are equivalent
113 msgid  "abc~?"
114 msgstr "xyz~K"
115 # Invalid: @ matters
116 msgid  "abc~?"
117 msgstr "xyz~@?"
118 # Valid: case conversion is optional
119 msgid  "abc~(~S~)"
120 msgstr "xyz~S"
121 # Valid: case conversion is optional
122 msgid  "abc~(~D~^ ~D~)"
123 msgstr "xyz~D~^ ~D"
124 # Invalid: ~^ matters
125 msgid  "abc~(~D~^ ~D~)"
126 msgstr "xyz~(~D ~D~)"
127 # Valid: case conversion is optional, and it doesn't catch ~^
128 msgid  "abc~(~D~^ ~D~)def~C"
129 msgstr "xyz~D~^ ~Duvw~C"
130 # Valid: synonymous conditionals
131 msgid  "abc~@[~D~]def~C"
132 msgstr "xyz~:[~;~:*~D~]~C"
133 # Valid: synonymous conditionals
134 msgid  "abc~Ddef"
135 msgstr "abc~[null~;eins~:;~:*~D~]def"
136 # Valid: conditionals are optional and don't catch ~^
137 msgid  "abc~:[~;~]~^~D~C"
138 msgstr "xyz~:[uvw~^~R~;~:*~S~^~D~]~C"
139 # Invalid: ~:[ requires an argument, ~1@* doesn't
140 msgid  "abc~1@*~^~D~C"
141 msgstr "xyz~:[uvw~^~R~;~:*~S~^~D~]~C"
142 # Invalid: ~{~} is special
143 msgid  "abc~{ ~}"
144 msgstr "xyz~{~}"
145 # Invalid: @ matters
146 msgid  "abc~{~S~}"
147 msgstr "xyz~@{~S~}"
148 # Invalid: @ matters
149 msgid  "abc~:{~S~}"
150 msgstr "xyz~@:{~S~}"
151 # Invalid: : matters
152 msgid  "abc~{~S~}"
153 msgstr "xyz~:{~S~}"
154 # Invalid: : matters
155 msgid  "abc~@{~S~}"
156 msgstr "xyz~@:{~S~}"
157 # Invalid: @: matters
158 msgid  "abc~{~S~}"
159 msgstr "xyz~@:{~S~}"
160 # Valid: permutation inside iteration
161 msgid  "abc~{~D ~C~}"
162 msgstr "xyz~{~1@*~C~2:*~D~1*~}"
163 # Invalid: permutation inside iteration, but wrong position at iteration end
164 msgid  "abc~{~D ~C~}"
165 msgstr "xyz~{~1@*~C~2:*~D~}"
166 # Invalid: ~^ inside iteration matters
167 msgid  "abc~{~D ~^~C~}"
168 msgstr "xyz~{~D ~C~}"
169 # Invalid: ~^ inside iteration depends on position
170 msgid  "abc~{~D ~^~C~}"
171 msgstr "xyz~{~1@*~C~^~2:*~D~1*~}"
172 # Invalid: ~^ inside iteration depends on position
173 msgid  "abc~{~D ~^~C~}"
174 msgstr "xyz~{~1@*~C~2:*~^~D~1*~}"
175 # Invalid: ~^ inside iteration depends on position
176 msgid  "abc~{~D ~^~C~}"
177 msgstr "xyz~{~1@*~C~2:*~D~^~1*~}"
178 # Invalid: ~^ inside iteration depends on position
179 msgid  "abc~{~D ~^~C~}"
180 msgstr "xyz~{~1@*~C~2:*~D~1*~^~}"
181 # Invalid: type compatibility with non-strict checking
182 msgid "abc~{~c~c~}"
183 msgid_plural "abc~{~c~c~}"
184 msgstr[0] "xyz~{~c~d~}"
185 msgstr[1] "xyz~{~c~d~}"
186 EOF
187
188 : ${MSGFMT=msgfmt}
189 n=0
190 while read comment; do
191   read msgid_line
192   read msgstr_line
193   msgid_plural_line=""
194   if echo "$msgstr_line" | grep '^msgid_plural' > /dev/null; then
195     msgid_plural_line="$msgstr_line"
196     read msgstr0_line
197     read msgstr1_line
198   fi
199   n=`expr $n + 1`
200   if test -z "$msgid_plural_line"; then
201     cat <<EOF > f-sc-2-$n.po
202 #, scheme-format
203 ${msgid_line}
204 ${msgstr_line}
205 EOF
206   else
207     cat <<EOF > f-l-2-$n.po
208 #, lisp-format
209 ${msgid_line}
210 ${msgid_plural_line}
211 ${msgstr0_line}
212 ${msgstr1_line}
213 EOF
214   fi
215   fail=
216   if echo "$comment" | grep 'Valid:' > /dev/null; then
217     if ${MSGFMT} --check-format -o f-sc-2-$n.mo f-sc-2-$n.po; then
218       :
219     else
220       fail=yes
221     fi
222   else
223     ${MSGFMT} --check-format -o f-sc-2-$n.mo f-sc-2-$n.po 2> /dev/null
224     if test $? = 1; then
225       :
226     else
227       fail=yes
228     fi
229   fi
230   if test -n "$fail"; then
231     echo "Format string checking error:" 1>&2
232     cat f-sc-2-$n.po 1>&2
233     exit 1
234   fi
235   rm -f f-sc-2-$n.po f-sc-2-$n.mo
236 done < f-sc-2.data
237
238 exit 0