Package translate :: Package convert :: Module test_po2csv

[hide private]
[frames] | no frames]

# Source Code for Module translate.convert.test_po2csv

      1  #!/usr/bin/env python
      2
      3  from translate.convert import po2csv
      4  from translate.convert import csv2po
      5  from translate.convert import test_convert
      6  from translate.misc import wStringIO
      7  from translate.storage import po
      8  from translate.storage import csvl10n
      9
     10 -class TestPO2CSV:
     11 -    def po2csv(self, posource):
     12          """helper that converts po source to csv source without requiring files"""
     13          inputfile = wStringIO.StringIO(posource)
     14          inputpo = po.pofile(inputfile)
     15          convertor = po2csv.po2csv()
     16          outputcsv = convertor.convertstore(inputpo)
     17          return outputcsv
     18
     19 -    def csv2po(self, csvsource, template=None):
     20          """helper that converts csv source to po source without requiring files"""
     21          inputfile = wStringIO.StringIO(csvsource)
     22          inputcsv = csvl10n.csvfile(inputfile)
     23          if template:
     24              templatefile = wStringIO.StringIO(template)
     25              inputpot = po.pofile(templatefile)
     26          else:
     27              inputpot = None
     28          convertor = csv2po.csv2po(templatepo=inputpot)
     29          outputpo = convertor.convertstore(inputcsv)
     30          return outputpo
     31
     32 -    def singleelement(self, storage):
     33          """checks that the pofile contains a single non-header element, and returns it"""
     34          assert len(storage.units) == 1
     35          return storage.units[0]
     36
     37 -    def test_simpleentity(self):
     38          """checks that a simple csv entry definition converts properly to a po entry"""
     39          minipo = r'''#: term.cpp
     40  msgid "Term"
     41  msgstr "asdf"'''
     42          csvfile = self.po2csv(minipo)
     43          unit = self.singleelement(csvfile)
     44          assert unit.comment == "term.cpp"
     45          assert unit.source == "Term"
     46          assert unit.target == "asdf"
     47
     48 -    def test_multiline(self):
     49          """tests multiline po entries"""
     50          minipo = r'''msgid "First part "
     51  "and extra"
     52  msgstr "Eerste deel "
     53  "en ekstra"'''
     54          csvfile = self.po2csv(minipo)
     55          unit = self.singleelement(csvfile)
     56          assert unit.source == "First part and extra"
     57          assert unit.target == "Eerste deel en ekstra"
     58
     59 -    def test_escapednewlines(self):
     60          """Test the escaping of newlines"""
     61          minipo = r'''msgid "First line\nSecond line"
     62  msgstr "Eerste lyn\nTweede lyn"
     63  '''
     64          csvfile = self.po2csv(minipo)
     65          unit = self.singleelement(csvfile)
     66          assert unit.source == "First line\nSecond line"
     67          assert unit.target == "Eerste lyn\nTweede lyn"
     68          pofile = self.csv2po(str(csvfile))
     69          unit = self.singleelement(pofile)
     70          assert unit.source == "First line\nSecond line"
     71          assert unit.target == "Eerste lyn\nTweede lyn"
     72
     73 -    def test_escapedtabs(self):
     74          """Test the escaping of tabs"""
     75          minipo = r'''msgid "First column\tSecond column"
     76  msgstr "Eerste kolom\tTweede kolom"
     77  '''
     78          csvfile = self.po2csv(minipo)
     79          unit = self.singleelement(csvfile)
     80          assert unit.source == "First column\tSecond column"
     81          assert unit.target == "Eerste kolom\tTweede kolom"
     82          assert csvfile.findunit("First column\tSecond column").target == "Eerste kolom\tTweede kolom"
     83
     84 -    def test_escapedquotes(self):
     85          """Test the escaping of quotes (and slash)"""
     86          minipo = r'''msgid "Hello \"Everyone\""
     87  msgstr "Good day \"All\""
     88
     89  msgid "Use \\\"."
     90  msgstr "Gebruik \\\"."
     91  '''
     92          csvfile = self.po2csv(minipo)
     93          assert csvfile.findunit('Hello "Everyone"').target == 'Good day "All"'
     94          assert csvfile.findunit('Use \\".').target == 'Gebruik \\".'
     95
     96 -    def test_escapedescape(self):
     97          """Test the escaping of pure escapes is unaffected"""
     98          minipo = r'''msgid "Find\\Options"
     99  msgstr "Vind\\Opsies"
    100  '''
    101          csvfile = self.po2csv(minipo)
    102          print minipo
    103          print csvfile
    104          assert csvfile.findunit(r'Find\Options').target == r'Vind\Opsies'
    105
    106 -    def test_singlequotes(self):
    107          """Tests that single quotes are preserved correctly"""
    108          minipo = '''msgid "source 'source'"\nmsgstr "target 'target'"\n'''
    109          csvfile = self.po2csv(minipo)
    110          print str(csvfile)
    111          assert csvfile.findunit("source 'source'").target == "target 'target'"
    112          # Make sure we don't mess with start quotes until writing
    113          minipo = '''msgid "'source'"\nmsgstr "'target'"\n'''
    114          csvfile = self.po2csv(minipo)
    115          print str(csvfile)
    116          assert csvfile.findunit(r"'source'").target == r"'target'"
    117          # TODO check that we escape on writing not in the internal representation
    118
    119 -    def test_empties(self):
    120          """Tests that things keep working with empty entries"""
    121          minipo = 'msgid "Source"\nmsgstr ""\n\nmsgid ""\nmsgstr ""'
    122          csvfile = self.po2csv(minipo)
    123          assert csvfile.findunit("Source") is not None
    124          assert csvfile.findunit("Source").target == ""
    125          assert len(csvfile.units) == 1
    126
    127 -    def test_kdecomments(self):
    128          """test that we don't carry KDE comments to CSV"""
    129          minipo = '#: simple.c\nmsgid "_: KDE comment\\n"\n"Same"\nmsgstr "Same"\n'
    130          csvfile = self.po2csv(minipo)
    131          unit = self.singleelement(csvfile)
    132          assert unit.source == "Same"
    133          assert unit.target == "Same"
    134
    135 -class TestPO2CSVCommand(test_convert.TestConvertCommand, TestPO2CSV):
    136      """Tests running actual po2csv commands on files"""
    137      convertmodule = po2csv
    138
    139 -    def test_help(self):
    140          """tests getting help"""
    141          options = test_convert.TestConvertCommand.test_help(self)
    142          options = self.help_check(options, "-P, --pot")
    143          options = self.help_check(options, "--columnorder=COLUMNORDER", last=True)
    144