Package translate :: Package convert :: Module test_xliff2po

[hide private]
[frames] | no frames]

# Source Code for Module translate.convert.test_xliff2po

      1  #!/usr/bin/env python
      2
      3  from translate.convert import xliff2po
      4  from translate.misc import wStringIO
      5
      6 -class TestXLIFF2PO:
      7      xliffskeleton = '''<?xml version="1.0" ?>
      8  <xliff version="1.1" xmlns="urn:oasis:names:tc:xliff:document:1.1">
      9    <file original="filename.po" source-language="en-US" datatype="po">
     10      <body>
     11          %s
     12      </body>
     13    </file>
     14  </xliff>'''
     15
     16 -    def xliff2po(self, xliffsource):
     17          """helper that converts xliff source to po source without requiring files"""
     18          inputfile = wStringIO.StringIO(xliffsource)
     19          convertor = xliff2po.xliff2po()
     20          outputpo = convertor.convertstore(inputfile)
     21          print "The generated po:"
     22          print type(outputpo)
     23          print str(outputpo)
     24          return outputpo
     25
     26 -    def test_minimal(self):
     27          minixlf = self.xliffskeleton % '''<trans-unit>
     28          <source>red</source>
     29          <target>rooi</target>
     30        </trans-unit>'''
     31          pofile = self.xliff2po(minixlf)
     32          assert len(pofile.units) == 1
     33          assert pofile.translate("red") == "rooi"
     34          assert pofile.translate("bla") is None
     35
     36 -    def test_basic(self):
     37          headertext = '''Project-Id-Version: program 2.1-branch
     38  Report-Msgid-Bugs-To:
     39  POT-Creation-Date: 2006-01-09 07:15+0100
     40  PO-Revision-Date: 2004-03-30 17:02+0200
     41  Last-Translator: Zuza Software Foundation &lt;xxx@translate.org.za>
     42  Language-Team: Afrikaans &lt;translate-discuss-xxx@lists.sourceforge.net>
     43  MIME-Version: 1.0
     44  Content-Type: text/plain; charset=UTF-8
     45  Content-Transfer-Encoding: 8bit'''
     46
     47          minixlf = (self.xliffskeleton % '''<trans-unit id="1" restype="x-gettext-domain-header" approved="no" xml:space="preserve">
     48    <source>%s</source>
     49    <target>%s</target>
     50    <note from="po-translator">Zulu translation of program ABC</note>
     51    </trans-unit>
     52    <trans-unit>
     53      <source>gras</source>
     54      <target>utshani</target>
     55    </trans-unit>''') % (headertext, headertext)
     56
     57          print minixlf
     58          pofile = self.xliff2po(minixlf)
     59          assert pofile.translate("gras") == "utshani"
     60          assert pofile.translate("bla") is None
     61          potext = str(pofile)
     62          assert potext.index('# Zulu translation of program ABC') == 0
     63          assert potext.index('msgid "gras"\n')
     64          assert potext.index('msgstr "utshani"\n')
     65          assert potext.index('MIME-Version: 1.0\\n')
     66
     67 -    def test_translatorcomments(self):
     68          """Tests translator comments"""
     69          minixlf = self.xliffskeleton % '''<trans-unit>
     70          <source>nonsense</source>
     71          <target>matlhapolosa</target>
     72          <context-group name="po-entry" purpose="information">
     73              <context context-type="x-po-trancomment">Couldn't do
     74  it</context>
     75          </context-group>
     76          <note from="po-translator">Couldn't do
     77  it</note>
     78  </trans-unit>'''
     79          pofile = self.xliff2po(minixlf)
     80          assert pofile.translate("nonsense") == "matlhapolosa"
     81          assert pofile.translate("bla") is None
     82          unit = pofile.units[0]
     83          assert unit.getnotes("translator") == "Couldn't do\nit"
     84          potext = str(pofile)
     85          assert potext.index("# Couldn't do\n# it\n") >= 0
     86
     87 -    def test_autocomment(self):
     88          """Tests automatic comments"""
     89          minixlf = self.xliffskeleton % '''<trans-unit>
     90          <source>nonsense</source>
     91          <target>matlhapolosa</target>
     92          <context-group name="po-entry" purpose="information">
     93              <context context-type="x-po-autocomment">Note that this is
     94  garbage</context>
     95          </context-group>
     96          <note from="developer">Note that this is
     97  garbage</note>
     98  </trans-unit>'''
     99          pofile = self.xliff2po(minixlf)
    100          assert pofile.translate("nonsense") == "matlhapolosa"
    101          assert pofile.translate("bla") is None
    102          unit = pofile.units[0]
    103          assert unit.getnotes("developer") == "Note that this is\ngarbage"
    104          potext = str(pofile)
    105          assert potext.index("#. Note that this is\n#. garbage\n") >= 0
    106
    107 -    def test_locations(self):
    108          """Tests location comments (#:)"""
    109          minixlf = self.xliffskeleton % '''<trans-unit id="1">
    110          <source>nonsense</source>
    111          <target>matlhapolosa</target>
    112          <context-group name="po-reference" purpose="location">
    113              <context context-type="sourcefile">example.c</context>
    114              <context context-type="linenumber">123</context>
    115              </context-group>
    116          <context-group name="po-reference" purpose="location">
    117              <context context-type="sourcefile">place.py</context>
    118          </context-group>
    119  </trans-unit>'''
    120          pofile = self.xliff2po(minixlf)
    121          assert pofile.translate("nonsense") == "matlhapolosa"
    122          assert pofile.translate("bla") is None
    123          unit = pofile.units[0]
    124          locations = unit.getlocations()
    125          assert len(locations) == 2
    126          assert "example.c:123" in locations
    127          assert "place.py" in locations
    128
    129 -    def test_fuzzy(self):
    130          """Tests fuzzyness"""
    131          minixlf = self.xliffskeleton % '''<trans-unit approved="no">
    132              <source>book</source>
    133          </trans-unit>
    134          <trans-unit id="2" approved="yes">
    135              <source>nonsense</source>
    136              <target>matlhapolosa</target>
    137          </trans-unit>
    138          <trans-unit id="2" approved="no">
    139              <source>verb</source>
    140              <target state="needs-review-translation">lediri</target>
    141          </trans-unit>'''
    142          pofile = self.xliff2po(minixlf)
    143          assert pofile.translate("nonsense") == "matlhapolosa"
    144          assert pofile.translate("verb") == "lediri"
    145          assert pofile.translate("book") is None
    146          assert pofile.translate("bla") is None
    147          assert len(pofile.units) == 3
    148          #TODO: decide if this one should be fuzzy:
    149          #assert pofile.units[0].isfuzzy()
    150          assert not pofile.units[1].isfuzzy()
    151          assert pofile.units[2].isfuzzy()
    152
    153 -    def test_plurals(self):
    154          """Tests fuzzyness"""
    155          minixlf = self.xliffskeleton % '''<group restype="x-gettext-plurals">
    156          <trans-unit id="1[0]" xml:space="preserve">
    157              <source>cow</source>
    158              <target>inkomo</target>
    159          </trans-unit>
    160          <trans-unit id="1[1]" xml:space="preserve">
    161              <source>cows</source>
    162              <target>iinkomo</target>
    163          </trans-unit>
    164  </group>'''
    165          pofile = self.xliff2po(minixlf)
    166          print str(pofile)
    167          potext = str(pofile)
    168          assert len(pofile.units) == 1
    169          assert potext.index('msgid_plural "cows"')
    170          assert potext.index('msgstr[0] "inkomo"')
    171          assert potext.index('msgstr[1] "iinkomo"')
    172
    173
    174 -class TestBasicXLIFF2PO(TestXLIFF2PO):
    175      """This tests a basic XLIFF file without xmlns attribute"""
    176
    177      xliffskeleton = '''<?xml version="1.0" ?>
    178  <xliff version="1.1">
    179    <file original="filename.po" source-language="en-US" datatype="po">
    180      <body>
    181          %s
    182      </body>
    183    </file>
    184  </xliff>'''
    185