Imported Upstream version 0.50.2
[platform/upstream/intltool.git] / tests / selftest.pl.in
1 #!@PERL@ -w
2
3 #  Selftest for intltool
4 #
5 #  Copyright (C) 2000 Free Software Foundation.
6 #
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.
11 #
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.
16 #
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.
20 #
21 #  Author(s): Kenneth Christiansen
22 #             Rodney Dawes
23
24 ## Unset LINGUAS environment variable
25 $ENV{"LINGUAS"} = "";
26
27 ## Release information
28 my $PROGRAM  = "selftest";
29 my $VERSION  = "0.1";
30 my $result;
31 my $case;
32
33 ## Loaded modules
34 use strict;
35
36 ## Always print as the first thing
37 $| = 1;
38
39 my $failed = 0;
40
41 my $srcdir = $ENV{"srcdir"} || ".";
42
43 my $strip_trailing_cr = ($^O eq 'MSWin32' || $^O eq 'msys') ? '--strip-trailing-cr' : '';
44
45 sub check_command_result
46 {
47     my ($command) = shift;
48     my ($testcase) = shift;
49
50     my $result =`$command`;
51     
52     if ($? == 0 && ($result eq "" || $result =~ /^No differences/)) { 
53         print "[OK]\n"; ## diff was empty, ie. files were equal
54     } else { 
55         print "[FAILED] ($testcase)\n"; 
56         open OUT, ">>errors";
57         print OUT $result;
58         close OUT;
59         $failed = 1;
60     }
61 }
62
63 sub check_extract_result($)
64 {
65     my ($testcase) = @_;
66     check_command_result("diff -u $strip_trailing_cr $srcdir/results/$testcase.h cases/$testcase.h", $testcase);
67 }
68
69 sub check_merge_result($)
70 {
71     my ($testcase) = @_;
72
73     $testcase =~ s/\.in$//;
74     check_command_result("diff -u $strip_trailing_cr $srcdir/results/$testcase cases/$testcase", $testcase);
75 }
76
77
78 sub check_multimerge_result
79 {
80     my ($testcase) = shift;
81     my ($language) = shift;
82
83     $testcase =~ s/\.in$//;
84     check_command_result("diff -u $strip_trailing_cr $srcdir/results/multi.$testcase $language/$testcase", $testcase);
85 }
86
87
88 ## SELFTESTS
89
90 my $INTLTOOL_MERGE="env LC_ALL=C @PERL@ ../intltool-merge";
91 my $INTLTOOL_EXTRACT="env LC_ALL=C @PERL@ ../intltool-extract";
92
93 ## Welcome notice
94
95 print "Running self test of the intltool module\n\n";
96 unlink "errors";
97
98 system("cp $srcdir/cases/*.* cases") if $srcdir ne ".";
99
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);
104
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);
109
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);
114
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);
119
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);
124
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);
129
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);
134
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);
139
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);
144
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);
149
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);
154
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);
159
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);
164
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);
169
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);
174
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);
179
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);
184
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);
189
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");
194
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);
199
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);
204
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);
209
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);
214
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);
219
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);
224
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);
229  
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);
234
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);
239
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);
244
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");
249
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);
254
255 print "32. Merge translations from a .desktop.in file:                      ";
256 $case = "extract13.desktop.in";
257 $result = $case;
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);
261
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);
266
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);
271
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);
276
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);
281
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);
286
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);
291
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");
294
295 exit $failed;