Imported Upstream version 0.19.7
[platform/upstream/gettext.git] / gettext-tools / tests / xgettext-its-1
1 #!/bin/sh
2 . "${srcdir=.}/init.sh"; path_prepend_ . ../src
3
4 # Test of ITS support.
5
6 : ${XGETTEXT=xgettext}
7
8 GETTEXTDATADIR=.
9 export GETTEXTDATADIR
10
11 cat <<\EOF > empty.xml
12 <?xml version="1.0"?>
13 <empty></empty>
14 EOF
15
16 ${XGETTEXT} --itstool -o empty.pot empty.xml 2>empty.err || { cat empty.err; exit 1; }
17
18 test -d its || mkdir its
19
20 cat <<\EOF > its/empty-1.loc
21 <?xml version="1.0"?>
22 <locatingRules/>
23 EOF
24
25 ${XGETTEXT} --itstool -o empty.pot empty.xml 2>empty.err || { cat empty.err; exit 1; }
26
27 cat <<\EOF > its/empty-2.loc
28 <?xml version="1.0"?>
29 <locatingRules>
30   <locatingRule pattern="*.xml">
31     <documentRule prefix="" localName="empty" target="empty.its"/>
32   </locatingRule>
33 </locatingRules>
34 EOF
35
36 ${XGETTEXT} --itstool -o empty.pot empty.xml 2>empty.err || { cat empty.err; exit 1; }
37
38 cat <<\EOF > its/empty.its
39 <?xml version="1.0"?>
40 <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
41 </its:rules>
42 EOF
43
44 ${XGETTEXT} --itstool -o empty.pot empty.xml 2>empty.err || { cat empty.err; exit 1; }
45
46 cat <<\EOF > its/messages.loc
47 <?xml version="1.0"?>
48 <locatingRules>
49   <locatingRule pattern="*.xml">
50     <documentRule localName="messages" target="messages.its"/>
51   </locatingRule>
52   <locatingRule pattern="*.msg">
53     <documentRule localName="messages" target="messages.its"/>
54   </locatingRule>
55 </locatingRules>
56 EOF
57
58 cat <<\EOF > its/messages.its
59 <?xml version="1.0"?>
60 <its:rules xmlns:its="http://www.w3.org/2005/11/its"
61            xmlns:gt="https://www.gnu.org/s/gettext/ns/its/extensions/1.0"
62            xmlns:msg="http://www.gnu.org/s/gettext/ns/messages/1.0"
63            version="1.0">
64   <!-- Invalid: no selector -->
65   <its:translateRule translate="yes"/>
66   <!-- Invalid: no translate -->
67   <its:translateRule selector="/"/>
68
69   <its:translateRule selector="//msg:message/@comment" translate="yes"/>
70   <its:translateRule selector="//msg:note" translate="no"/>
71   <its:translateRule selector="//msg:p[@translatable = 'no']"
72     translate="no"/>
73
74   <!-- Invalid: no selector -->
75   <its:locNoteRule locNoteType="alert"/>
76   <!-- Invalid: no locNoteType -->
77   <its:locNoteRule selector="/"/>
78   <its:locNoteRule selector="//msg:message/*" locNoteType="alert"
79     locNotePointer="../msg:note"/>
80   <its:locNoteRule selector="//msg:code" locNoteType="alert">
81     <its:locNote>This is code</its:locNote>
82   </its:locNoteRule>
83   <its:locNoteRule selector="//msg:message/@comment" locNoteType="alert">
84     <its:locNote>This is a comment</its:locNote>
85   </its:locNoteRule>
86
87   <!-- Invalid: no selector -->
88   <its:withinTextRule withinText="yes"/>
89   <!-- Invalid: no withinText -->
90   <its:withinTextRule selector="/"/>
91   <its:withinTextRule selector="//msg:span | //msg:link" withinText="yes"/>
92
93   <!-- Invalid: no selector -->
94   <its:preserveSpaceRule space="preserve"/>
95   <!-- Invalid: no space -->
96   <its:preserveSpaceRule selector="/"/>
97   <its:preserveSpaceRule selector="//msg:code" space="preserve"/>
98
99   <gt:contextRule selector="//msg:p[@context = 'yes']"
100                   contextPointer="substring-before(., '|')"
101                   textPointer="substring-after(., '|')"/>
102
103   <gt:escapeRule selector="//msg:message/*[@unescape = 'yes']" escape="no"/>
104
105   <its:translateRule selector="//msg:message/@unescaped" translate="yes"/>
106   <gt:escapeRule selector="//msg:message/@unescaped" escape="no"/>
107 </its:rules>
108 EOF
109
110 cat <<\EOF >messages.xml
111 <?xml version="1.0"?>
112 <!DOCTYPE messages PUBLIC "" "" [
113 <!ENTITY foo "bar">
114 ]>
115 <messages xmlns="http://www.gnu.org/s/gettext/ns/messages/1.0"
116           xmlns:its="http://www.w3.org/2005/11/its">
117   <message>
118     <p>This is a test message &foo;&gt;&lt;&amp;&quot;"</p>
119   </message>
120   <message>
121     <p its:translate="no">This is a non-translatable message</p>
122   </message>
123   <message>
124     <p>This is a test message, with an <span>element</span> in a <link href="http://www.gnu.org/s/gettext">text</link></p>
125   </message>
126   <message>
127     <code>  $ echo '  ' &gt;&gt; /dev/null
128   $ cat &lt; /dev/yes
129   $ sleep 10 &amp;
130 </code>
131   </message>
132   <message comment="This is a comment &lt;&gt;&amp;&quot;">
133     <p>This is a test message, with an attribute</p>
134   </message>
135   <message>
136     <note>
137       This is a localization note
138     </note>
139     <p>This is a test message, with a localization note</p>
140   </message>
141   <message>
142     <p its:locNote="This is a local localization note" its:locNoteType="alert">
143       This is a test message, with a local localization note
144     </p>
145   </message>
146   <message>
147     <!-- empty element, which shouldn't be extracted -->
148     <p></p>
149   </message>
150   <message>
151     <p xml:space="preserve"> This is a message with  space  preserved</p>
152   </message>
153   <message>
154     <p translatable="no">This is a non-translatable string</p>
155   </message>
156   <message its:translate="no">
157     <p>This is a non-translatable string</p>
158   </message>
159   <message>
160     <!-- This is a comment -->
161     <p context="yes">context|A translatable string with a context prefixed</p>
162   </message>
163   <message>
164     <p xml:space="trim"> Leading/trailing  whitespaces are  removed,
165       but not middle  
166     </p>
167   </message>
168   <message>
169     <p unescape="yes">This is an unescaped element &lt;&gt;&amp;&quot;</p>
170   </message>
171   <message unescaped="This is an unescaped attribute &lt;&gt;&amp;&quot;">
172     <p></p>
173   </message>
174 </messages>
175 EOF
176
177 cat <<\EOF >messages.ok
178 #. (itstool) path: message/p
179 #: messages.xml:8
180 msgid "This is a test message &foo;&gt;&lt;&amp;\"\""
181 msgstr ""
182
183 #. (itstool) path: message/p
184 #: messages.xml:14
185 msgid "This is a test message, with an <span>element</span> in a <link href=\"http://www.gnu.org/s/gettext\">text</link>"
186 msgstr ""
187
188 #. This is code
189 #. (itstool) path: message/code
190 #: messages.xml:17
191 #, no-wrap
192 msgid ""
193 "  $ echo '  ' &gt;&gt; /dev/null\n"
194 "  $ cat &lt; /dev/yes\n"
195 "  $ sleep 10 &amp;\n"
196 msgstr ""
197
198 #. This is a comment
199 #. (itstool) path: messages/message@comment
200 #: messages.xml:22
201 msgid "This is a comment &lt;&gt;&amp;&quot;"
202 msgstr ""
203
204 #. (itstool) path: message/p
205 #: messages.xml:23
206 msgid "This is a test message, with an attribute"
207 msgstr ""
208
209 #. This is a localization note
210 #. (itstool) path: message/p
211 #: messages.xml:29
212 msgid "This is a test message, with a localization note"
213 msgstr ""
214
215 #. This is a local localization note
216 #. (itstool) path: message/p
217 #: messages.xml:32
218 msgid "This is a test message, with a local localization note"
219 msgstr ""
220
221 #. (itstool) path: message/p
222 #: messages.xml:41
223 #, no-wrap
224 msgid " This is a message with  space  preserved"
225 msgstr ""
226
227 #. This is a comment
228 #. (itstool) path: message/p
229 #: messages.xml:51
230 msgctxt "context"
231 msgid "A translatable string with a context prefixed"
232 msgstr ""
233
234 #. (itstool) path: message/p
235 #: messages.xml:54
236 msgid ""
237 "Leading/trailing  whitespaces are  removed,\n"
238 "      but not middle"
239 msgstr ""
240
241 #. (itstool) path: message/p
242 #: messages.xml:59
243 msgid "This is an unescaped element <>&\""
244 msgstr ""
245
246 #. (itstool) path: messages/message@unescaped
247 #: messages.xml:61
248 msgid "This is an unescaped attribute <>&\""
249 msgstr ""
250 EOF
251
252 : ${DIFF=diff}
253
254 ${XGETTEXT} --itstool --no-wrap --omit-header -o messages.pot messages.xml 2>messages.err || { cat messages.err; exit 1; }
255 ${DIFF} messages.ok messages.pot
256 result=$?
257 test $result = 0 || exit $result
258
259 # Check if locating rules can work with --directory, and extra ".in"
260 # file name extension.
261 test -d data || mkdir data
262 test -d po || mkdir po
263
264 cp messages.xml data/messages.msg.in
265
266 cd po
267 GETTEXTDATADIR=..
268 export GETTEXTDATADIR
269
270 ${XGETTEXT} --itstool --no-wrap --omit-header --directory=.. -o messages.pot.in data/messages.msg.in 2>messages.err || { cat messages.err; exit 1; }
271 sed -e 's!^#: data/messages.msg.in!#: messages.xml!' \
272   < messages.pot.in > messages.pot
273
274 ${DIFF} ../messages.ok messages.pot
275 result=$?
276 test $result = 0 || exit $result