Package translate :: Package convert :: Module test_po2xliff

[hide private]
[frames] | no frames]

# Source Code for Module translate.convert.test_po2xliff

      1  #!/usr/bin/env python
      2
      3  from translate.convert import po2xliff
      4  from translate.storage import po
      5  from translate.storage import poxliff
      6  from translate.storage import lisa
      7
      8 -class TestPO2XLIFF:
      9
     10 -    def po2xliff(self, posource, sourcelanguage='en', targetlanguage=None):
     11          """helper that converts po source to xliff source without requiring files"""
     12          postore = po.pofile(posource)
     13          convertor = po2xliff.po2xliff()
     14          outputxliff = convertor.convertstore(postore, None, sourcelanguage=sourcelanguage, targetlanguage=targetlanguage)
     15          return poxliff.PoXliffFile(outputxliff)
     16
     17 -    def getnode(self, xliff):
     18          """Retrieves the trans-unit node from the dom"""
     19          assert len(xliff.units) == 1
     20          unit = xliff.units[0]
     21          return unit
     22
     23 -    def test_minimal(self):
     24          minipo = '''msgid "red"\nmsgstr "rooi"\n'''
     25          xliff = self.po2xliff(minipo)
     26          print "The generated xml:"
     27          print str(xliff)
     28          assert len(xliff.units) == 1
     29          assert xliff.translate("red") == "rooi"
     30          assert xliff.translate("bla") is None
     31
     32 -    def test_basic(self):
     33          minipo = """# Afrikaans translation of program ABC
     34  #
     35  msgid ""
     36  msgstr ""
     37  "Project-Id-Version: program 2.1-branch\n"
     38  "Report-Msgid-Bugs-To: \n"
     39  "POT-Creation-Date: 2006-01-09 07:15+0100\n"
     40  "PO-Revision-Date: 2004-03-30 17:02+0200\n"
     41  "Last-Translator: Zuza Software Foundation <xxx@translate.org.za>\n"
     42  "Language-Team: Afrikaans <translate-discuss-xxx@lists.sourceforge.net>\n"
     43  "MIME-Version: 1.0\n"
     44  "Content-Type: text/plain; charset=UTF-8\n"
     45  "Content-Transfer-Encoding: 8bit\n"
     46
     47  # Please remember to do something
     48  #: ../dir/file.xml.in.h:1 ../dir/file2.xml.in.h:4
     49  msgid "Applications"
     50  msgstr "Toepassings"
     51  """
     52          xliff = self.po2xliff(minipo)
     53          print "The generated xml:"
     54          print str(xliff)
     55          assert xliff.translate("Applications") == "Toepassings"
     56          assert xliff.translate("bla") is None
     57          xmltext = str(xliff)
     58          assert xmltext.index('<xliff ') >= 0
     59          assert xmltext.index(' version="1.1"') >= 0
     60          assert xmltext.index('<file')
     61          assert xmltext.index('source-language')
     62          assert xmltext.index('datatype')
     63
     64 -    def test_multiline(self):
     65          """Test multiline po entry"""
     66          minipo = r'''msgid "First part "
     67  "and extra"
     68  msgstr "Eerste deel "
     69  "en ekstra"'''
     70          xliff = self.po2xliff(minipo)
     71          print "The generated xml:"
     72          print str(xliff)
     73          assert xliff.translate('First part and extra') == 'Eerste deel en ekstra'
     74
     75
     76 -    def test_escapednewlines(self):
     77          """Test the escaping of newlines"""
     78          minipo = r'''msgid "First line\nSecond line"
     79  msgstr "Eerste lyn\nTweede lyn"
     80  '''
     81          xliff = self.po2xliff(minipo)
     82          print "The generated xml:"
     83          xmltext = str(xliff)
     84          print xmltext
     85          assert xliff.translate("First line\nSecond line") == "Eerste lyn\nTweede lyn"
     86          assert xliff.translate("First line\\nSecond line") is None
     87          assert xmltext.find("line\\nSecond") == -1
     88          assert xmltext.find("lyn\\nTweede") == -1
     89          assert xmltext.find("line\nSecond") > 0
     90          assert xmltext.find("lyn\nTweede") > 0
     91
     92 -    def test_escapedtabs(self):
     93          """Test the escaping of tabs"""
     94          minipo = r'''msgid "First column\tSecond column"
     95  msgstr "Eerste kolom\tTweede kolom"
     96  '''
     97          xliff = self.po2xliff(minipo)
     98          print "The generated xml:"
     99          xmltext = str(xliff)
    100          print xmltext
    101          assert xliff.translate("First column\tSecond column") == "Eerste kolom\tTweede kolom"
    102          assert xliff.translate("First column\\tSecond column") is None
    103          assert xmltext.find("column\\tSecond") == -1
    104          assert xmltext.find("kolom\\tTweede") == -1
    105          assert xmltext.find("column\tSecond") > 0
    106          assert xmltext.find("kolom\tTweede") > 0
    107
    108 -    def test_escapedquotes(self):
    109          """Test the escaping of quotes (and slash)"""
    110          minipo = r'''msgid "Hello \"Everyone\""
    111  msgstr "Good day \"All\""
    112
    113  msgid "Use \\\"."
    114  msgstr "Gebruik \\\"."
    115  '''
    116          xliff = self.po2xliff(minipo)
    117          print "The generated xml:"
    118          xmltext = str(xliff)
    119          print xmltext
    120          assert xliff.translate('Hello "Everyone"') == 'Good day "All"'
    121          assert xliff.translate(r'Use \".') == r'Gebruik \".'
    122          assert xmltext.find(r'\&quot;') > 0 or xmltext.find(r'\"') > 0
    123          assert xmltext.find(r"\\") == -1
    124
    125 -    def getcontexttuples(self, node, namespace):
    126          """Returns all the information in the context nodes as a list of tuples
    127          of (type, text)"""
    128          contexts = node.findall(".//{%s}context" % namespace)
    129          return [(context.get("context-type"), lisa.getText(context)) for context in contexts]
    130
    131 -    def test_locationcomments(self):
    132          minipo = r'''#: file.c:123 asdf.c
    133  msgid "one"
    134  msgstr "kunye"
    135  '''
    136          xliff = self.po2xliff(minipo)
    137          print "The generated xml:"
    138          xmltext = str(xliff)
    139          print xmltext
    140          assert xliff.translate("one") == "kunye"
    141          assert len(xliff.units) == 1
    142          node = xliff.units[0].xmlelement
    143          contextgroups = node.findall(".//%s" % xliff.namespaced("context-group"))
    144          assert len(contextgroups) == 2
    145          for group in contextgroups:
    146              assert group.get("name") == "po-reference"
    147              assert group.get("purpose") == "location"
    148          tuples = self.getcontexttuples(node, xliff.namespace)
    149          assert tuples == [("sourcefile", "file.c"), ("linenumber", "123"), ("sourcefile", "asdf.c")]
    150
    151 -    def test_othercomments(self):
    152          minipo = r'''# Translate?
    153  # How?
    154  msgid "one"
    155  msgstr "kunye"
    156  '''
    157          xliff = self.po2xliff(minipo)
    158          print "The generated xml:"
    159          xmltext = str(xliff)
    160          print xmltext
    161          assert xliff.translate("one") == "kunye"
    162          assert len(xliff.units) == 1
    163          node = xliff.units[0].xmlelement
    164          contextgroups = node.findall(".//%s" % xliff.namespaced("context-group"))
    165          assert len(contextgroups) == 1
    166          for group in contextgroups:
    167              assert group.get("name") == "po-entry"
    168              assert group.get("purpose") == "information"
    169          tuples = self.getcontexttuples(node, xliff.namespace)
    170          assert tuples == [("x-po-trancomment", "Translate?\nHow?")]
    171
    172          assert xliff.units[0].getnotes("translator") == "Translate?\nHow?"
    173
    174
    175 -    def test_automaticcomments(self):
    176          minipo = r'''#. Don't translate.
    177  #. Please
    178  msgid "one"
    179  msgstr "kunye"
    180  '''
    181          xliff = self.po2xliff(minipo)
    182          print "The generated xml:"
    183          xmltext = str(xliff)
    184          print xmltext
    185          assert xliff.translate("one") == "kunye"
    186          assert len(xliff.units) == 1
    187          node = xliff.units[0].xmlelement
    188          contextgroups = node.findall(".//%s" % xliff.namespaced("context-group"))
    189          assert len(contextgroups) == 1
    190          for group in contextgroups:
    191              assert group.get("name") == "po-entry"
    192              assert group.get("purpose") == "information"
    193          tuples = self.getcontexttuples(node, xliff.namespace)
    194          assert tuples == [("x-po-autocomment", "Don't translate.\nPlease")]
    195
    196 -    def test_header(self):
    197          minipo = r'''# Pulana  Translation for bla
    198  # Hallo Ma!
    199  #, fuzzy
    200  msgid ""
    201  msgstr ""
    202  "MIME-Version: 1.0\n"
    203  '''
    204          xliff = self.po2xliff(minipo)
    205          print "The generated xml:"
    206          xmltext = str(xliff)
    207          print xmltext
    208          assert len(xliff.units) == 1
    209          unit = xliff.units[0]
    210          assert unit.source == unit.target == "MIME-Version: 1.0\n"
    211          assert unit.xmlelement.get("restype") == "x-gettext-domain-header"
    212          assert unit.xmlelement.get("approved") != "yes"
    213          assert unit.xmlelement.get("{%s}space" % lisa.XML_NS) == "preserve"
    214          assert unit.getnotes("po-translator") == "Pulana  Translation for bla\nHallo Ma!"
    215
    216 -    def test_fuzzy(self):
    217          minipo = r'''#, fuzzy
    218  msgid "two"
    219  msgstr "pedi"
    220
    221  msgid "three"
    222  msgstr "raro"
    223  '''
    224          xliff = self.po2xliff(minipo)
    225          print "The generated xml:"
    226          xmltext = str(xliff)
    227          print xmltext
    228          assert len(xliff.units) == 2
    229          assert xliff.units[0].isfuzzy()
    230          assert not xliff.units[1].isfuzzy()
    231
    232 -    def test_germanic_plurals(self):
    233          minipo = r'''msgid "cow"
    234  msgid_plural "cows"
    235  msgstr[0] "inkomo"
    236  msgstr[1] "iinkomo"
    237  '''
    238          xliff = self.po2xliff(minipo)
    239          print "The generated xml:"
    240          xmltext = str(xliff)
    241          print xmltext
    242          assert len(xliff.units) == 1
    243          assert xliff.translate("cow") == "inkomo"
    244
    245 -    def test_funny_plurals(self):
    246          minipo = r'''msgid "cow"
    247  msgid_plural "cows"
    248  msgstr[0] "inkomo"
    249  msgstr[1] "iinkomo"
    250  msgstr[2] "iiinkomo"
    251  '''
    252          xliff = self.po2xliff(minipo)
    253          print "The generated xml:"
    254          xmltext = str(xliff)
    255          print xmltext
    256          assert len(xliff.units) == 1
    257          assert xliff.translate("cow") == "inkomo"
    258
    259 -    def test_language_tags(self):
    260          minipo = r'''msgid "Een"
    261  msgstr "Uno"
    262  '''
    263          xliff = self.po2xliff(minipo, "af", "es")
    264          assert xliff.sourcelanguage == "af"
    265          assert xliff.targetlanguage == "es"
    266
    267 -    def test_variables(self):
    268          minipo = r'''msgid "%s%s%s%s has made %s his or her buddy%s%s"
    269  msgstr "%s%s%s%s het %s sy/haar vriend/vriendin gemaak%s%s"'''
    270          xliff = self.po2xliff(minipo)
    271          print xliff.units[0].source
    272          assert xliff.units[0].source == "%s%s%s%s has made %s his or her buddy%s%s"
    273
    274 -    def test_approved(self):
    275          minipo = r'''#, fuzzy
    276  msgid "two"
    277  msgstr "pedi"
    278
    279  msgid "three"
    280  msgstr "raro"
    281
    282  msgid "four"
    283  msgstr ""
    284  '''
    285          xliff = self.po2xliff(minipo)
    286          print "The generated xml:"
    287          xmltext = str(xliff)
    288          print xmltext
    289          assert len(xliff.units) == 3
    290          assert xliff.units[0].xmlelement.get("approved") != "yes"
    291          assert not xliff.units[0].isapproved()
    292          assert xliff.units[1].xmlelement.get("approved") == "yes"
    293          assert xliff.units[1].isapproved()
    294          assert xliff.units[2].xmlelement.get("approved") != "yes"
    295          assert not xliff.units[2].isapproved()
    296