1
2
3
4 from translate.tools import pomerge
5 from translate.storage import factory
6 from translate.storage import po
7 from translate.storage import xliff
8 from translate.misc import wStringIO
9
11 xliffskeleton = '''<?xml version="1.0" ?>
12 <xliff version="1.1" xmlns="urn:oasis:names:tc:xliff:document:1.1">
13 <file original="filename.po" source-language="en-US" datatype="po">
14 <body>
15 %s
16 </body>
17 </file>
18 </xliff>'''
19
20 - def mergestore(self, templatesource, inputsource):
29
30 - def mergexliff(self, templatesource, inputsource):
31 """merges the sources of the given files and returns a new xlifffile object"""
32 templatefile = wStringIO.StringIO(templatesource)
33 inputfile = wStringIO.StringIO(inputsource)
34 outputfile = wStringIO.StringIO()
35 assert pomerge.mergestore(inputfile, outputfile, templatefile)
36 outputxliffstring = outputfile.getvalue()
37 print "Generated XML:"
38 print outputxliffstring
39 outputxlifffile = xliff.xlifffile(outputxliffstring)
40 return outputxlifffile
41
48
50 """checks that the pofile contains a single non-header unit, and returns it"""
51 assert self.countunits(pofile) == 1
52 return pofile.units[-1]
53
55 """checks that a simple po entry merges OK"""
56 templatepo = '''#: simple.test\nmsgid "Simple String"\nmsgstr ""\n'''
57 inputpo = '''#: simple.test\nmsgid "Simple String"\nmsgstr "Dimpled Ring"\n'''
58 pofile = self.mergestore(templatepo, inputpo)
59 pounit = self.singleunit(pofile)
60 assert pounit.source == "Simple String"
61 assert pounit.target == "Dimpled Ring"
62
64 """checks that a simple po entry merges OK"""
65 templatepo = '''#: simple.test\nmsgid "Simple String"\nmsgstr "Dimpled Ring"\n'''
66 inputpo = '''#: simple.test\nmsgid "Simple String"\nmsgstr "Dimpled King"\n'''
67 pofile = self.mergestore(templatepo, inputpo)
68 pounit = self.singleunit(pofile)
69 assert pounit.source == "Simple String"
70 assert pounit.target == "Dimpled King"
71
73 """check that locations on seperate lines are output in Gettext form of all on one line"""
74 templatepo = '''#: location.c:1\n#: location.c:2\nmsgid "Simple String"\nmsgstr ""\n'''
75 inputpo = '''#: location.c:1\n#: location.c:2\nmsgid "Simple String"\nmsgstr "Dimpled Ring"\n'''
76 expectedpo = '''#: location.c:1%slocation.c:2\nmsgid "Simple String"\nmsgstr "Dimpled Ring"\n''' % po.lsep
77 pofile = self.mergestore(templatepo, inputpo)
78 print pofile
79 assert str(pofile) == expectedpo
80
90
106
116
132
155
157 """The last entry in a PO file is usualy not followed by an empty line. Test that we preserve this"""
158 templatepo = '''msgid "First"\nmsgstr ""\n\nmsgid "Second"\nmsgstr ""\n'''
159 mergepo = '''msgid "First"\nmsgstr "Eerste"\n\nmsgid "Second"\nmsgstr "Tweede"\n'''
160 expectedpo = '''msgid "First"\nmsgstr "Eerste"\n\nmsgid "Second"\nmsgstr "Tweede"\n'''
161 pofile = self.mergestore(templatepo, mergepo)
162 print "Expected:\n%s\n\nMerged:\n%s" % (expectedpo, str(pofile))
163 assert str(pofile) == expectedpo
164
165 templatepo = '''msgid "First"\nmsgstr ""\n\nmsgid "Second"\nmsgstr ""\n\n'''
166 mergepo = '''msgid "First"\nmsgstr "Eerste"\n\nmsgid "Second"\nmsgstr "Tweede"\n'''
167 expectedpo = '''msgid "First"\nmsgstr "Eerste"\n\nmsgid "Second"\nmsgstr "Tweede"\n'''
168 pofile = self.mergestore(templatepo, mergepo)
169 print "Expected:\n%s\n\nMerged:\n%s" % (expectedpo, str(pofile))
170 assert str(pofile) == expectedpo
171
173 """Ensure that input tabs are escaped in the output, like gettext does."""
174
175
176 templatepo = '''msgid "First Second"\nmsgstr ""\n\n'''
177 mergepo = '''msgid "First Second"\nmsgstr "Eerste Tweede"\n'''
178 expectedpo = r'''imsgid "First\tSecond"
179 msgstr "Eerste\tTweede"
180 '''
181 pofile = self.mergestore(templatepo, mergepo)
182 print "Expected:\n%s\n\nMerged:\n%s" % (expectedpo, str(pofile))
183 assert str(pofile) == expectedpo
184
193
195 """Test that merging a comment line with dos newlines doesn't add a new line"""
196 templatepo = '''# User comment\n# (pofilter) Translate Toolkit comment\n#. Automatic comment\n#: location_comment.c:110\nmsgid "File"\nmsgstr "File"\n\n'''
197 mergepo = '''# User comment\r\n# (pofilter) Translate Toolkit comment\r\n#. Automatic comment\r\n#: location_comment.c:110\r\nmsgid "File"\r\nmsgstr "Ifayile"\r\n\r\n'''
198 expectedpo = '''# User comment\n# (pofilter) Translate Toolkit comment\n#. Automatic comment\n#: location_comment.c:110\nmsgid "File"\nmsgstr "Ifayile"\n'''
199 pofile = self.mergestore(templatepo, mergepo)
200 assert str(pofile) == expectedpo
201
202
203 templatepo = '''# Lonely comment\n\n#: location_comment.c:110\nmsgid "Bob"\nmsgstr "Toolmaker"\n'''
204 mergepo = '''# Lonely comment\r\n\r\n#: location_comment.c:110\r\nmsgid "Bob"\r\nmsgstr "Builder"\r\n\r\n'''
205 expectedpo = '''# Lonely comment\n\n#: location_comment.c:110\nmsgid "Bob"\nmsgstr "Builder"\n'''
206 pofile = self.mergestore(templatepo, mergepo)
207 assert str(pofile) == expectedpo
208
209
210 templatepo = '''#: location_comment.c:110\nmsgid "File"\nmsgstr "File"\n\n'''
211 mergepo = '''# User comment\r\n# (pofilter) Translate Toolkit comment\r\n#: location_comment.c:110\r\nmsgid "File"\r\nmsgstr "Ifayile"\r\n\r\n'''
212 expectedpo = '''# User comment\n# (pofilter) Translate Toolkit comment\n#: location_comment.c:110\nmsgid "File"\nmsgstr "Ifayile"\n'''
213 pofile = self.mergestore(templatepo, mergepo)
214 assert str(pofile) == expectedpo
215
230
242
244 templatepo = '# my comment\nmsgid "red"\nmsgstr ""'
245 mergexliff = self.xliffskeleton % '''<trans-unit>
246 <source>red</source>
247 <target>rooi</target>
248 </trans-unit>'''
249 expectedpo = '# my comment\nmsgid "red"\nmsgstr "rooi"\n'
250 pofile = self.mergestore(templatepo, mergexliff)
251 assert str(pofile) == expectedpo
252
275
277 """test merging untranslated messages that are the same except for KDE disambiguation"""
278 templatepo = r'''#: sendMsgTitle
279 #: sendMsgTitle.accesskey
280 msgid "_: sendMsgTitle sendMsgTitle.accesskey\n"
281 "Send Message"
282 msgstr ""
283
284 #: sendMessageCheckWindowTitle
285 #: sendMessageCheckWindowTitle.accesskey
286 msgid "_: sendMessageCheckWindowTitle sendMessageCheckWindowTitle.accesskey\n"
287 "Send Message"
288 msgstr ""
289 '''
290 mergepo = r'''#: sendMsgTitle%ssendMsgTitle.accesskey
291 msgid ""
292 "_: sendMsgTitle sendMsgTitle.accesskey\n"
293 "Send Message"
294 msgstr "Stuur"
295
296 #: sendMessageCheckWindowTitle%ssendMessageCheckWindowTitle.accesskey
297 msgid ""
298 "_: sendMessageCheckWindowTitle sendMessageCheckWindowTitle.accesskey\n"
299 "Send Message"
300 msgstr "Stuur"
301 ''' % (po.lsep, po.lsep)
302 expectedpo = mergepo
303 pofile = self.mergestore(templatepo, mergepo)
304 print "Expected:\n%s\n---\nMerged:\n%s\n---" % (expectedpo, str(pofile))
305 assert str(pofile) == expectedpo
306
308 """Check that we do the right thing if we have header entries in the input PO."""
309
310 templatepo = r'''#, fuzzy
311 msgid ""
312 msgstr ""
313 "Project-Id-Version: PACKAGE VERSION\n"
314 "Report-Msgid-Bugs-To: new@example.com\n"
315 "POT-Creation-Date: 2006-11-11 11:11+0000\n"
316 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
317 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
318 "Language-Team: LANGUAGE <LL@li.org>\n"
319 "MIME-Version: 1.0\n"
320 "Content-Type: text/plain; charset=UTF-8\n"
321 "Content-Transfer-Encoding: 8bit\n"
322 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
323 "X-Generator: Translate Toolkit 0.10rc2\n"
324
325 #: simple.test
326 msgid "Simple String"
327 msgstr ""
328 '''
329 mergepo = r'''msgid ""
330 msgstr ""
331 "Project-Id-Version: Pootle 0.10\n"
332 "Report-Msgid-Bugs-To: old@example.com\n"
333 "POT-Creation-Date: 2006-01-01 01:01+0100\n"
334 "PO-Revision-Date: 2006-09-09 09:09+0900\n"
335 "Last-Translator: Joe Translate <joe@example.com>\n"
336 "Language-Team: Pig Latin <piglatin@example.com>\n"
337 "MIME-Version: 1.0\n"
338 "Content-Type: text/plain; charset=UTF-8\n"
339 "Content-Transfer-Encoding: 8bit\n"
340 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
341 "X-Generator: Translate Toolkit 0.9\n"
342
343 #: simple.test
344 msgid "Simple String"
345 msgstr "Dimpled Ring"
346 '''
347 expectedpo = r'''msgid ""
348 msgstr ""
349 "Project-Id-Version: Pootle 0.10\n"
350 "Report-Msgid-Bugs-To: new@example.com\n"
351 "POT-Creation-Date: 2006-11-11 11:11+0000\n"
352 "PO-Revision-Date: 2006-09-09 09:09+0900\n"
353 "Last-Translator: Joe Translate <joe@example.com>\n"
354 "Language-Team: Pig Latin <piglatin@example.com>\n"
355 "MIME-Version: 1.0\n"
356 "Content-Type: text/plain; charset=UTF-8\n"
357 "Content-Transfer-Encoding: 8bit\n"
358 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
359 "X-Generator: Translate Toolkit 0.10rc2\n"
360
361 #: simple.test
362 msgid "Simple String"
363 msgstr "Dimpled Ring"
364 '''
365 pofile = self.mergestore(templatepo, mergepo)
366 print "Expected:\n%s\n---\nMerged:\n%s\n---" % (expectedpo, str(pofile))
367 assert str(pofile) == expectedpo
368