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