1   
  2   
  3   
  4  from translate.storage import factory 
  5  from translate.filters import pofilter 
  6  from translate.filters import checks 
  7  from translate.misc import wStringIO 
  8   
 10      """Base class for filter tests.""" 
 11   
 12      filename = "" 
 13   
 14 -    def parse_text(self, filetext): 
  15          """helper that parses xliff file content without requiring files""" 
 16          dummyfile = wStringIO.StringIO(filetext) 
 17          dummyfile.name = self.filename 
 18          store = factory.getobject(dummyfile) 
 19          return store 
  20   
 21 -    def filter(self, translationstore, checkerconfig=None, cmdlineoptions=None): 
  32   
 34          """checks that an obviously correct string passes""" 
 35          filter_result = self.filter(self.translationstore) 
 36          assert len(filter_result.units) == 0 
  37   
 39          """checks that an obviously wrong string fails""" 
 40          self.unit.target = "REST" 
 41          filter_result = self.filter(self.translationstore) 
 42          assert filter_result.units[0].geterrors().has_key('startcaps') 
  43   
 45          """Test that variables can span lines and still fail/pass""" 
 46          self.unit.source = '"At &timeBombURL."\n"label;."' 
 47          self.unit.target = '"Tydens &tydBombURL."\n"etiket;."' 
 48          filter_result = self.filter(self.translationstore) 
 49          assert len(filter_result.units) == 0 
  50   
 52          """check that we don't add another failing marker if the message is already marked as failed""" 
 53          self.unit.target = '' 
 54          filter_result = self.filter(self.translationstore, cmdlineoptions=["--test=untranslated"]) 
 55          errors = filter_result.units[0].geterrors() 
 56          assert len(errors) == 1 
 57          assert errors.has_key('untranslated') 
 58   
 59           
 60          filter_result2 = self.filter(filter_result, cmdlineoptions=["--test=untranslated"]) 
 61          errors = filter_result2.units[0].geterrors() 
 62          assert len(errors) == 1 
 63          assert errors.has_key('untranslated') 
  64   
 66          """check that we report an error if a user tries to run a non-existant test""" 
 67          filter_result = self.filter(self.translationstore, cmdlineoptions=["-t nonexistant"]) 
 68           
 69          assert len(filter_result.units) == 0 
  70   
 72          """lists all available tests""" 
 73          filter_result = self.filter(self.translationstore, cmdlineoptions=["-l"]) 
 74           
 75          assert len(filter_result.units) == 0 
  76   
 78          """test whether to run tests against fuzzy translations""" 
 79          self.unit.markfuzzy() 
 80   
 81          filter_result = self.filter(self.translationstore, cmdlineoptions=["--fuzzy"]) 
 82          assert filter_result.units[0].geterrors().has_key('isfuzzy') 
 83   
 84          filter_result = self.filter(self.translationstore, cmdlineoptions=["--nofuzzy"]) 
 85          assert len(filter_result.units) == 0 
 86   
 87           
 88           
 89          self.setup_method(self) 
 90   
 91          filter_result = self.filter(self.translationstore, cmdlineoptions=["--fuzzy"]) 
 92          assert len(filter_result.units) == 0 
 93   
 94          filter_result = self.filter(self.translationstore, cmdlineoptions=["--nofuzzy"]) 
 95          assert len(filter_result.units) == 0 
  96   
 98          """test whether to run tests against translations marked for review""" 
 99          self.unit.markreviewneeded() 
100          filter_result = self.filter(self.translationstore, cmdlineoptions=["--review"]) 
101          assert filter_result.units[0].isreview() 
102   
103          filter_result = self.filter(self.translationstore, cmdlineoptions=["--noreview"]) 
104          assert len(filter_result.units) == 0 
105   
106           
107          self.setup_method(self) 
108   
109          filter_result = self.filter(self.translationstore, cmdlineoptions=["--review"]) 
110          assert len(filter_result.units) == 0 
111          filter_result = self.filter(self.translationstore, cmdlineoptions=["--noreview"]) 
112          assert len(filter_result.units) == 0 
 113   
115          """tests the extraction of items marked fuzzy""" 
116          self.unit.markfuzzy() 
117   
118          filter_result = self.filter(self.translationstore, cmdlineoptions=["--test=isfuzzy"]) 
119          assert filter_result.units[0].geterrors().has_key('isfuzzy') 
120   
121          self.unit.markfuzzy(False) 
122          filter_result = self.filter(self.translationstore, cmdlineoptions=["--test=isfuzzy"]) 
123          assert len(filter_result.units) == 0 
 124   
126          """tests the extraction of items marked review""" 
127          filter_result = self.filter(self.translationstore, cmdlineoptions=["--test=isreview"]) 
128          assert len(filter_result.units) == 0 
129   
130          self.unit.markreviewneeded() 
131          filter_result = self.filter(self.translationstore, cmdlineoptions=["--test=isreview"]) 
132          assert filter_result.units[0].isreview() 
 133   
135          """tests that we can handle UTF-8 encoded characters when there is no known header specified encoding""" 
136          self.unit.source = u'Bézier curve' 
137          self.unit.target = u'Bézier-kurwe' 
138          filter_result = self.filter(self.translationstore) 
139          assert len(filter_result.units) == 0 
 140   
142          """tests that the preconditions work correctly""" 
143          self.unit.source = "File" 
144          self.unit.target = "" 
145          filter_result= self.filter(self.translationstore) 
146           
147          assert len(filter_result.units) == 1 
148          unit = filter_result.units[0] 
149          assert len(unit.geterrors()) == 1 
  150   
152      """Test class for po-specific tests.""" 
153      filetext = '#: test.c\nmsgid "test"\nmsgstr "rest"\n' 
154      filename = 'test.po' 
155   
159   
 168   
170      """Test class for xliff-specific tests.""" 
171      filetext = '''<?xml version="1.0" encoding="utf-8"?> 
172  <xliff version="1.1" xmlns="urn:oasis:names:tc:xliff:document:1.1"> 
173  <file original='NoName' source-language="en" datatype="plaintext"> 
174    <body> 
175      <trans-unit approved="yes"> 
176        <source>test</source> 
177        <target>rest</target> 
178      </trans-unit> 
179    </body> 
180  </file> 
181  </xliff>''' 
182      filename = "test.xlf" 
183   
185          self.filetext = '''<?xml version="1.0" encoding="utf-8"?> 
186  <xliff version="1.1" xmlns="urn:oasis:names:tc:xliff:document:1.1"> 
187  <file datatype="po" original="example.po" source-language="en-US"> 
188    <body> 
189      <trans-unit approved="yes"> 
190        <source>test</source> 
191        <target>rest</target> 
192      </trans-unit> 
193    </body> 
194  </file> 
195  </xliff>''' 
196   
197          self.translationstore = self.parse_text(self.filetext) 
198          self.unit = self.translationstore.units[0] 
 199   
 203   
205      """Test class for TMX-specific tests.""" 
206      filetext = '''<!DOCTYPE tmx SYSTEM "tmx14.dtd"> 
207  <tmx version="1.4"> 
208    <header creationtool="Translate Toolkit - po2tmx" creationtoolversion="1.1.1rc1" segtype="sentence" o-tmf="UTF-8" adminlang="en" srclang="en 
209  " datatype="PlainText"/> 
210    <body> 
211      <tu> 
212        <tuv xml:lang="en"> 
213          <seg>test</seg> 
214        </tuv> 
215        <tuv xml:lang="af"> 
216          <seg>rest</seg> 
217        </tuv> 
218      </tu> 
219    </body> 
220  </tmx>''' 
221      filename = "test.tmx" 
222   
226   
228          """TMX doesn't support fuzzy""" 
229          pass 
 230   
232          """TMX doesn't support review""" 
233          pass 
 234   
236          """TMX doesn't support fuzzy""" 
237          pass 
 238   
240          """TMX doesn't support review""" 
241          pass 
  242