3 # Selftest for intltool
5 # Copyright (C) 2000 Free Software Foundation.
7 # This library is free software; you can redistribute it and/or
8 # modify it under the terms of the GNU General Public License as
9 # published by the Free Software Foundation; either version 2 of the
10 # License, or (at your option) any later version.
12 # This script is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 # General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this library; if not, write to the Free Software
19 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 # Author(s): Kenneth Christiansen
24 ## Unset LINGUAS environment variable
27 ## Release information
28 my $PROGRAM = "selftest";
36 ## Always print as the first thing
41 my $srcdir = $ENV{"srcdir"} || ".";
43 my $strip_trailing_cr = ($^O eq 'MSWin32' || $^O eq 'msys') ? '--strip-trailing-cr' : '';
45 sub check_command_result
47 my ($command) = shift;
48 my ($testcase) = shift;
50 my $result =`$command`;
52 if ($? == 0 && ($result eq "" || $result =~ /^No differences/)) {
53 print "[OK]\n"; ## diff was empty, ie. files were equal
55 print "[FAILED] ($testcase)\n";
63 sub check_extract_result($)
66 check_command_result("diff -u $strip_trailing_cr $srcdir/results/$testcase.h cases/$testcase.h", $testcase);
69 sub check_merge_result($)
73 $testcase =~ s/\.in$//;
74 check_command_result("diff -u $strip_trailing_cr $srcdir/results/$testcase cases/$testcase", $testcase);
78 sub check_multimerge_result
80 my ($testcase) = shift;
81 my ($language) = shift;
83 $testcase =~ s/\.in$//;
84 check_command_result("diff -u $strip_trailing_cr $srcdir/results/multi.$testcase $language/$testcase", $testcase);
90 my $INTLTOOL_MERGE="env LC_ALL=C @PERL@ ../intltool-merge";
91 my $INTLTOOL_EXTRACT="env LC_ALL=C @PERL@ ../intltool-extract";
95 print "Running self test of the intltool module\n\n";
98 system("cp $srcdir/cases/*.* cases") if $srcdir ne ".";
100 print " 1. Extract messages from simple desktop file: ";
101 $case = "extract1.desktop";
102 system("$INTLTOOL_EXTRACT --type=gettext/ini --quiet --update cases/$case") == 0 or $failed = 1;
103 check_extract_result($case);
105 print " 2. Merge translations into a Bonobo UI style file: ";
106 $case = "merge1.xml";
107 system("$INTLTOOL_MERGE -o --quiet cases cases/$case.in cases/$case") == 0 or $failed = 1;
108 check_merge_result($case);
110 print " 3. Extract messages from a multi-line XML file: ";
111 $case = "extract7.xml";
112 system("$INTLTOOL_EXTRACT --type=gettext/xml --quiet --update cases/$case") == 0 or $failed = 1;
113 check_extract_result($case);
115 print " 4. Merge translations into a multi-line XML file: ";
116 $case = "merge7.xml";
117 system("$INTLTOOL_MERGE -x --quiet cases cases/$case.in cases/$case") == 0 or $failed = 1;
118 check_merge_result($case);
120 print " 5. Extract messages with unusual characters in the XML tag: ";
121 $case = "extract3.xml.in";
122 system("$INTLTOOL_EXTRACT --type=gettext/xml --quiet --update cases/$case") == 0 or $failed = 1;
123 check_extract_result($case);
125 print " 6. Merge translations into a pong style XML file: ";
126 $case = "merge4.xml";
127 system("$INTLTOOL_MERGE -x --quiet cases cases/$case.in cases/$case") == 0 or $failed = 1;
128 check_merge_result($case);
130 print " 7. Extract messages from a glade style XML file: ";
131 $case = "extract6.glade";
132 system("$INTLTOOL_EXTRACT --type=gettext/glade --quiet --update cases/$case") == 0 or $failed = 1;
133 check_extract_result($case);
135 print " 8. Merge translations into a dia sheet style XML file: ";
136 $case = "merge5u.sheet";
137 system("$INTLTOOL_MERGE -x --quiet cases cases/$case.in cases/$case") == 0 or $failed = 1;
138 check_merge_result($case);
140 print " 9. Merge translations into a dia sheet style XML file [broken XML]: ";
141 $case = "merge5p.sheet";
142 system("$INTLTOOL_MERGE -x --quiet cases cases/$case.in cases/$case") == 0 or $failed = 1;
143 check_merge_result($case);
145 print "10. Merge translations that include escaped .po strings: ";
146 $case = "merge6.xml";
147 system("$INTLTOOL_MERGE -x --quiet cases cases/$case.in cases/$case") == 0 or $failed = 1;
148 check_merge_result($case);
150 print "11. Merge translations into a .keys file: ";
151 $case = "merge8.keys";
152 system("$INTLTOOL_MERGE -k --quiet cases cases/$case.in cases/$case") == 0 or $failed = 1;
153 check_merge_result($case);
155 print "12. Extract messages from a glade 2.0 style XML file: ";
156 $case = "extract8.glade";
157 system("$INTLTOOL_EXTRACT --type=gettext/glade --quiet --update cases/$case") == 0 or $failed = 1;
158 check_extract_result($case);
160 print "13. Extract messages from an rfc822 style file: ";
161 $case = "extract10.templates_";
162 system("$INTLTOOL_EXTRACT --type=gettext/rfc822deb --quiet --update cases/$case") == 0 or $failed = 1;
163 check_extract_result($case);
165 print "14. Merge translations into an rfc822 style file: ";
166 $case = "merge10.templates";
167 system("$INTLTOOL_MERGE -r --quiet cases cases/${case}_ cases/$case") == 0 or $failed = 1;
168 check_merge_result($case);
170 print "15. Extract messages from a gconf schema style file: ";
171 $case = "test.schemas.in";
172 system("$INTLTOOL_EXTRACT --type=gettext/schemas --quiet --update cases/$case") == 0 or $failed = 1;
173 check_extract_result($case);
175 print "16. Merge translations into a gconf schema style file: ";
176 $case = "test.schemas";
177 system("$INTLTOOL_MERGE -s --quiet cases cases/$case.in cases/$case") == 0 or $failed = 1;
178 check_merge_result($case);
180 print "17. Extract messages from a xml file using the xml:space attribute: ";
181 $case = "extract9.xml.in";
182 system("$INTLTOOL_EXTRACT --type=gettext/xml --quiet --update cases/$case") == 0 or $failed = 1;
183 check_extract_result($case);
185 print "18. Merge messages into xml file using the xml:space attribute: ";
186 $case = "extract9.xml";
187 system("$INTLTOOL_MERGE -x --quiet cases cases/$case.in cases/$case") == 0 or $failed = 1;
188 check_merge_result($case);
190 print "19. Merge translations into multiple files: ";
191 $case = "merge6.xml";
192 system("$INTLTOOL_MERGE -x -s --quiet --multiple-output cases cases/$case.in $case") == 0 or $failed = 1;
193 check_multimerge_result($case, "merge6");
195 print "20. Extract comments for translators from XML file: ";
196 $case = "extract-comments.xml";
197 system("$INTLTOOL_EXTRACT --type=gettext/xml --quiet --update cases/$case") == 0 or $failed = 1;
198 check_extract_result($case);
200 print "21. Merge into file with CDATA sections: ";
201 $case = "merge-cdata.xml";
202 system("$INTLTOOL_MERGE -x --quiet cases cases/$case.in cases/$case") == 0 or $failed = 1;
203 check_merge_result($case);
205 print "22. Merge into XML file with deep translation/attribute nesting: ";
206 $case = "merge-deepattr.xml";
207 system("$INTLTOOL_MERGE -x --quiet cases cases/$case.in cases/$case") == 0 or $failed = 1;
208 check_merge_result($case);
210 print "23. Ignore empty strings from XML file ";
211 $case = "extract12.xml.in";
212 system("$INTLTOOL_EXTRACT --type=gettext/xml --quiet --update cases/$case") == 0 or $failed = 1;
213 check_extract_result($case);
215 print "24. Extract messages from a xml file using inherited xml:space: ";
216 $case = "space-preserve.xml.in";
217 system("$INTLTOOL_EXTRACT --type=gettext/xml --quiet --update cases/$case") == 0 or $failed = 1;
218 check_extract_result($case);
220 print "25. Merge messages into xml file using inherited xml:space: ";
221 $case = "space-preserve.xml";
222 system("$INTLTOOL_MERGE -x --quiet cases cases/$case.in cases/$case") == 0 or $failed = 1;
223 check_merge_result($case);
225 print "26. Merge non-well-formed translations into xml file: ";
226 $case = "merge11.xml";
227 system("$INTLTOOL_MERGE -x --quiet cases cases/$case.in cases/$case") == 0 or $failed = 1;
228 check_merge_result($case);
230 print "27. Extract UTF-8 encoded messages/comments from xml file: ";
231 $case = "unicodetext.xml.in";
232 system("$INTLTOOL_EXTRACT --type=gettext/xml --quiet --update cases/$case") == 0 or $failed = 1;
233 check_extract_result($case);
235 print "28. Extract iso-8859-1 encoded messages/comments from xml file: ";
236 $case = "iso88591text.xml.in";
237 system("$INTLTOOL_EXTRACT --type=gettext/xml --quiet --update cases/$case") == 0 or $failed = 1;
238 check_extract_result($case);
240 print "29. Extract messages from a quoted style file: ";
241 $case = "test-quoted.dtd";
242 system("$INTLTOOL_EXTRACT --type=gettext/quoted --quiet --update cases/$case") == 0 or $failed = 1;
243 check_extract_result($case);
245 print "30. Merge translations into multiple quoted style files: ";
246 $case = "test-quoted.dtd";
247 system("$INTLTOOL_MERGE --quoted-style --quiet --multiple-output cases cases/$case $case") == 0 or $failed = 1;
248 check_multimerge_result($case, "test-quoted");
250 print "31. Extract comments for translators from a .desktop.in file: ";
251 $case = "extract13.desktop.in";
252 system("$INTLTOOL_EXTRACT --type=gettext/ini --quiet --update cases/$case") == 0 or $failed = 1;
253 check_extract_result($case);
255 print "32. Merge translations from a .desktop.in file: ";
256 $case = "extract13.desktop.in";
258 ($result = $case) =~ s/\.in//;
259 system("$INTLTOOL_MERGE -d --quiet cases cases/$case cases/$result") == 0 or $failed = 1;
260 check_merge_result($case);
262 print "33. Decode XML entities in the right order when extracting: ";
263 $case = "extract14.xml.in";
264 system("$INTLTOOL_EXTRACT --type=gettext/xml --quiet --update cases/$case") == 0 or $failed = 1;
265 check_extract_result($case);
267 print "34. Merge XML translations, decoding entities in the right order: ";
268 $case = "merge12.xml";
269 system("$INTLTOOL_MERGE -x --quiet cases cases/$case.in cases/$case") == 0 or $failed = 1;
270 check_merge_result($case);
272 print "35. Extract messages from an XML file with msgctxts: ";
273 $case = "context.xml.in";
274 system("$INTLTOOL_EXTRACT --type=gettext/xml --quiet --update cases/$case") == 0 or $failed = 1;
275 check_extract_result($case);
277 print "36. Merge translations into an XML file with msgctxts: ";
278 $case = "context.xml";
279 system("$INTLTOOL_MERGE -x --quiet cases cases/$case.in cases/$case") == 0 or $failed = 1;
280 check_merge_result($case);
282 print "37. Extract messages from an GtkBuilder XML file with msgctxts: ";
283 $case = "extract-gtkbuilder.ui";
284 system("$INTLTOOL_EXTRACT --type=gettext/glade --quiet --update cases/$case") == 0 or $failed = 1;
285 check_extract_result($case);
287 print "38. Extract messages from an GSettings gschema XML file: ";
288 $case = "gsettings.gschema.xml";
289 system("$INTLTOOL_EXTRACT --type=gettext/gsettings --quiet --update cases/$case") == 0 or $failed = 1;
290 check_extract_result($case);
292 system("rm -f cases/*.*") if $srcdir ne ".";
293 system("rm -rf C az extract9 fr fr_BE fr_FR merge6 schemasmerge1 schemasmerge2 spacepreserve test test-quoted merge6.xml");