Package translate :: Package filters :: Module test_checks
[hide private]
[frames] | no frames]

Source Code for Module translate.filters.test_checks

  1  # -*- coding: utf-8 -*- 
  2  from translate.filters import checks 
  3  from translate.lang import data 
  4  from translate.storage import po  
  5   
6 -def passes(filterfunction, str1, str2):
7 """returns whether the given strings pass on the given test, handling FilterFailures""" 8 str1 = data.forceunicode(str1) 9 str2 = data.forceunicode(str2) 10 try: 11 filterresult = filterfunction(str1, str2) 12 except checks.FilterFailure, e: 13 filterresult = False 14 return filterresult
15
16 -def fails(filterfunction, str1, str2):
17 """returns whether the given strings fail on the given test, handling only FilterFailures""" 18 str1 = data.forceunicode(str1) 19 str2 = data.forceunicode(str2) 20 try: 21 filterresult = filterfunction(str1, str2) 22 except checks.SeriousFilterFailure, e: 23 filterresult = True 24 except checks.FilterFailure, e: 25 filterresult = False 26 return not filterresult
27
28 -def fails_serious(filterfunction, str1, str2):
29 """returns whether the given strings fail on the given test, handling only SeriousFilterFailures""" 30 str1 = data.forceunicode(str1) 31 str2 = data.forceunicode(str2) 32 try: 33 filterresult = filterfunction(str1, str2) 34 except checks.SeriousFilterFailure, e: 35 filterresult = False 36 return not filterresult
37 38
39 -def test_defaults():
40 """tests default setup and that checks aren't altered by other constructions""" 41 stdchecker = checks.StandardChecker() 42 assert stdchecker.config.varmatches == [] 43 mozillachecker = checks.MozillaChecker() 44 stdchecker = checks.StandardChecker() 45 assert stdchecker.config.varmatches == []
46
47 -def test_construct():
48 """tests that the checkers can be constructed""" 49 stdchecker = checks.StandardChecker() 50 mozillachecker = checks.MozillaChecker() 51 ooochecker = checks.OpenOfficeChecker() 52 gnomechecker = checks.GnomeChecker() 53 kdechecker = checks.KdeChecker()
54
55 -def test_accelerator_markers():
56 """test that we have the correct accelerator marker for the various default configs""" 57 stdchecker = checks.StandardChecker() 58 assert stdchecker.config.accelmarkers == [] 59 mozillachecker = checks.MozillaChecker() 60 assert mozillachecker.config.accelmarkers == ["&"] 61 ooochecker = checks.OpenOfficeChecker() 62 assert ooochecker.config.accelmarkers == ["~"] 63 gnomechecker = checks.GnomeChecker() 64 assert gnomechecker.config.accelmarkers == ["_"] 65 kdechecker = checks.KdeChecker() 66 assert kdechecker.config.accelmarkers == ["&"]
67
68 -def test_accelerators():
69 """tests accelerators""" 70 stdchecker = checks.StandardChecker(checks.CheckerConfig(accelmarkers="&")) 71 assert passes(stdchecker.accelerators, "&File", "&Fayile") 72 assert fails(stdchecker.accelerators, "&File", "Fayile") 73 assert fails(stdchecker.accelerators, "File", "&Fayile") 74 assert passes(stdchecker.accelerators, "Mail && News", "Pos en Nuus") 75 assert fails(stdchecker.accelerators, "Mail & News", "Pos en Nuus") 76 assert passes(stdchecker.accelerators, "&Allow", u'&\ufeb2\ufee3\ufe8e\ufea3') 77 assert fails(stdchecker.accelerators, "Open &File", "Vula& Ifayile") 78 kdechecker = checks.KdeChecker() 79 assert passes(kdechecker.accelerators, "&File", "&Fayile") 80 assert fails(kdechecker.accelerators, "&File", "Fayile") 81 assert fails(kdechecker.accelerators, "File", "&Fayile") 82 gnomechecker = checks.GnomeChecker() 83 assert passes(gnomechecker.accelerators, "_File", "_Fayile") 84 assert fails(gnomechecker.accelerators, "_File", "Fayile") 85 assert fails(gnomechecker.accelerators, "File", "_Fayile") 86 mozillachecker = checks.MozillaChecker() 87 assert passes(mozillachecker.accelerators, "&File", "&Fayile") 88 assert fails_serious(mozillachecker.accelerators, "&File", "Fayile") 89 assert fails_serious(mozillachecker.accelerators, "File", "&Fayile") 90 assert passes(mozillachecker.accelerators, "Mail & News", "Pos en Nuus") 91 assert fails_serious(mozillachecker.accelerators, "Mail & News", "Pos en &Nuus") 92 assert fails_serious(mozillachecker.accelerators, "&File", "Fayile") 93 ooochecker = checks.OpenOfficeChecker() 94 assert passes(ooochecker.accelerators, "~File", "~Fayile") 95 assert fails(ooochecker.accelerators, "~File", "Fayile") 96 assert fails(ooochecker.accelerators, "File", "~Fayile") 97 98 # We don't want an accelerator for letters with a diacritic 99 assert fails(ooochecker.accelerators, "F~ile", "L~êer")
100 # Problems: 101 # Accelerator before variable - see test_acceleratedvariables 102
103 -def xtest_acceleratedvariables():
104 """test for accelerated variables""" 105 # FIXME: disabled since acceleratedvariables has been removed, but these checks are still needed 106 mozillachecker = checks.MozillaChecker() 107 assert fails(mozillachecker.acceleratedvariables, "%S &Options", "&%S Ikhetho") 108 assert passes(mozillachecker.acceleratedvariables, "%S &Options", "%S &Ikhetho") 109 ooochecker = checks.OpenOfficeChecker() 110 assert fails(ooochecker.acceleratedvariables, "%PRODUCTNAME% ~Options", "~%PRODUCTNAME% Ikhetho") 111 assert passes(ooochecker.acceleratedvariables, "%PRODUCTNAME% ~Options", "%PRODUCTNAME% ~Ikhetho")
112 113
114 -def test_acronyms():
115 """tests acronyms""" 116 stdchecker = checks.StandardChecker() 117 assert passes(stdchecker.acronyms, "An HTML file", "'n HTML leer") 118 assert fails(stdchecker.acronyms, "An HTML file", "'n LMTH leer") 119 assert passes(stdchecker.acronyms, "It is HTML.", "Dit is HTML.") 120 # We don't mind if you add an acronym to correct bad capitalisation in the original 121 assert passes(stdchecker.acronyms, "An html file", "'n HTML leer") 122 # We shouldn't worry about acronyms that appear in a musttranslate file 123 stdchecker = checks.StandardChecker(checks.CheckerConfig(musttranslatewords=["OK"])) 124 assert passes(stdchecker.acronyms, "OK", "Kulungile") 125 # Assert punctuation should not hide accronyms 126 assert fails(stdchecker.acronyms, "Location (URL) not found", "Blah blah blah") 127 # Test '-W' (bug 283) 128 assert passes(stdchecker.acronyms, "%s: option `-W %s' is ambiguous", "%s: opsie '-W %s' is dubbelsinnig") 129 # Test that very long capital words don't trigger acronyms 130 assert passes (stdchecker.acronyms, "DEPRECATED - Characters shown on applet startup", "Խորհուրդ չի տրվում – Ապլետի գործարկման ժամանակ երևացող նիշերը")
131 132
133 -def test_blank():
134 """tests blank""" 135 stdchecker = checks.StandardChecker() 136 assert fails(stdchecker.blank, "Save as", " ") 137 assert fails(stdchecker.blank, "_: KDE comment\\n\nSimple string", " ")
138
139 -def test_brackets():
140 """tests brackets""" 141 stdchecker = checks.StandardChecker() 142 assert passes(stdchecker.brackets, "N number(s)", "N getal(le)") 143 assert fails(stdchecker.brackets, "For {sic} numbers", "Vier getalle") 144 assert fails(stdchecker.brackets, "For }sic{ numbers", "Vier getalle") 145 assert fails(stdchecker.brackets, "For [sic] numbers", "Vier getalle") 146 assert fails(stdchecker.brackets, "For ]sic[ numbers", "Vier getalle") 147 assert passes(stdchecker.brackets, "{[(", "[({")
148
149 -def test_compendiumconflicts():
150 """tests compendiumconflicts""" 151 stdchecker = checks.StandardChecker() 152 assert fails(stdchecker.compendiumconflicts, "File not saved", r"""#-#-#-#-# file1.po #-#-#-#-#\n 153 Leer nie gestoor gestoor nie\n 154 #-#-#-#-# file1.po #-#-#-#-#\n 155 Leer nie gestoor""")
156
157 -def test_doublequoting():
158 """tests double quotes""" 159 stdchecker = checks.StandardChecker() 160 assert fails(stdchecker.doublequoting, "Hot plate", "\"Ipuleti\" elishisa") 161 assert passes(stdchecker.doublequoting, "\"Hot\" plate", "\"Ipuleti\" elishisa") 162 assert fails(stdchecker.doublequoting, "'Hot' plate", "\"Ipuleti\" elishisa") 163 assert passes(stdchecker.doublequoting, "\\\"Hot\\\" plate", "\\\"Ipuleti\\\" elishisa") 164 165 # We don't want the filter to complain about "untranslated" quotes in xml attributes 166 frchecker = checks.StandardChecker(checks.CheckerConfig(targetlanguage="fr")) 167 assert passes(frchecker.doublequoting, "Click <a href=\"page.html\">", "Clique <a href=\"page.html\">") 168 assert fails(frchecker.doublequoting, "Do \"this\"", "Do \"this\"") 169 assert passes(frchecker.doublequoting, "Do \"this\"", "Do « this »") 170 assert fails(frchecker.doublequoting, "Do \"this\"", "Do « this » « this »")
171
172 -def test_doublespacing():
173 """tests double spacing""" 174 stdchecker = checks.StandardChecker() 175 assert passes(stdchecker.doublespacing, "Sentence. Another sentence.", "Sin. 'n Ander sin.") 176 assert passes(stdchecker.doublespacing, "Sentence. Another sentence.", "Sin. No double spacing.") 177 assert fails(stdchecker.doublespacing, "Sentence. Another sentence.", "Sin. Missing the double space.") 178 assert fails(stdchecker.doublespacing, "Sentence. Another sentence.", "Sin. Uneeded double space in translation.") 179 ooochecker = checks.OpenOfficeChecker() 180 assert passes(ooochecker.doublespacing, "Execute %PROGRAMNAME Calc", "Blah %PROGRAMNAME Calc") 181 assert passes(ooochecker.doublespacing, "Execute %PROGRAMNAME Calc", "Blah % PROGRAMNAME Calc")
182
183 -def test_doublewords():
184 """tests doublewords""" 185 stdchecker = checks.StandardChecker() 186 assert passes(stdchecker.doublewords, "Save the rhino", "Save the rhino") 187 assert fails(stdchecker.doublewords, "Save the rhino", "Save the the rhino") 188 # Double variables are not an error 189 stdchecker = checks.StandardChecker(checks.CheckerConfig(varmatches=[("%", 1)])) 190 assert passes(stdchecker.doublewords, "%s %s installation", "tsenyo ya %s %s")
191
192 -def test_endpunc():
193 """tests endpunc""" 194 stdchecker = checks.StandardChecker() 195 assert passes(stdchecker.endpunc, "Question?", "Correct?") 196 assert fails(stdchecker.endpunc, " Question?", "Wrong ?") 197 # Newlines must not mask end punctuation 198 assert fails(stdchecker.endpunc, "Exit change recording mode?\n\n", "Phuma esimeni sekugucula kubhalisa.\n\n") 199 mozillachecker = checks.MozillaChecker() 200 assert passes(mozillachecker.endpunc, "Upgrades an existing $ProductShortName$ installation.", "Ku antswisiwa ka ku nghenisiwa ka $ProductShortName$.") 201 # Real examples 202 assert passes(stdchecker.endpunc, "A nickname that identifies this publishing site (e.g.: 'MySite')", "Vito ro duvulela leri tirhisiwaka ku kuma sayiti leri ro kandziyisa (xik.: 'Sayiti ra Mina')") 203 assert fails(stdchecker.endpunc, "Question", u"Wrong\u2026") 204 # Making sure singlequotes don't confuse things 205 assert passes(stdchecker.endpunc, "Pseudo-elements can't be negated '%1$S'.", "Pseudo-elemente kan nie '%1$S' ontken word nie.") 206 207 stdchecker = checks.StandardChecker(checks.CheckerConfig(targetlanguage='km')) 208 assert passes(stdchecker.endpunc, "In this new version, there are some minor conversion improvements on complex style in Openoffice.org Writer.", u"នៅ​ក្នុង​កំណែ​ថ្មីនេះ មាន​ការ​កែសម្រួល​មួយ​ចំនួន​តូច​ទាក់​ទង​នឹង​ការ​បំលែង​ពុម្ពអក្សរ​ខ្មែរ​ ក្នុង​កម្មវិធី​ការិយាល័យ​ ស្លឹករឹត ដែល​មាន​ប្រើ​ប្រាស់​រចនាប័ទ្មស្មុគស្មាញច្រើន\u00a0។") 209 210 stdchecker = checks.StandardChecker(checks.CheckerConfig(targetlanguage='zh')) 211 assert passes(stdchecker.endpunc, "To activate your account, follow this link:\n", u"要啟用戶口,請瀏覽這個鏈結:\n")
212
213 -def test_endwhitespace():
214 """tests endwhitespace""" 215 stdchecker = checks.StandardChecker() 216 assert passes(stdchecker.endwhitespace, "A setence. ", "I'm correct. ") 217 assert fails(stdchecker.endwhitespace, "A setence. ", "'I'm incorrect.")
218
219 -def test_escapes():
220 """tests escapes""" 221 stdchecker = checks.StandardChecker() 222 assert passes(stdchecker.escapes, r"""A sentence""", "I'm correct.") 223 assert passes(stdchecker.escapes, "A file\n", "'n Leer\n") 224 assert fails_serious(stdchecker.escapes, r"blah. A file", r"bleah.\n'n leer") 225 assert passes(stdchecker.escapes, r"A tab\t", r"'n Tab\t") 226 assert fails_serious(stdchecker.escapes, r"A tab\t", r"'n Tab") 227 assert passes(stdchecker.escapes, r"An escape escape \\", r"Escape escape \\") 228 assert fails_serious(stdchecker.escapes, r"An escape escape \\", "Escape escape") 229 assert passes(stdchecker.escapes, r"A double quote \"", r"Double quote \"") 230 assert fails_serious(stdchecker.escapes, r"A double quote \"", "Double quote") 231 # Escaped escapes 232 assert passes(stdchecker.escapes, "An escaped newline \\n", "Escaped newline \\n") 233 assert fails_serious(stdchecker.escapes, "An escaped newline \\n", "Escaped newline \n") 234 # Real example 235 ooochecker = checks.OpenOfficeChecker() 236 assert passes(ooochecker.escapes, ",\t44\t;\t59\t:\t58\t{Tab}\t9\t{space}\t32", ",\t44\t;\t59\t:\t58\t{Tab}\t9\t{space}\t32")
237
238 -def test_newlines():
239 """tests newlines""" 240 stdchecker = checks.StandardChecker() 241 assert passes(stdchecker.newlines, "Nothing to see", "Niks te sien") 242 assert passes(stdchecker.newlines, "Correct\n", "Korrek\n") 243 assert passes(stdchecker.newlines, "Correct\r", "Korrek\r") 244 assert passes(stdchecker.newlines, "Correct\r\n", "Korrek\r\n") 245 assert fails(stdchecker.newlines, "A file\n", "'n Leer") 246 assert fails(stdchecker.newlines, "A file", "'n Leer\n") 247 assert fails(stdchecker.newlines, "A file\r", "'n Leer") 248 assert fails(stdchecker.newlines, "A file", "'n Leer\r") 249 assert fails(stdchecker.newlines, "A file\n", "'n Leer\r\n") 250 assert fails(stdchecker.newlines, "A file\r\n", "'n Leer\n") 251 assert fails(stdchecker.newlines, "blah.\nA file", "bleah. 'n leer") 252 # Real example 253 ooochecker = checks.OpenOfficeChecker() 254 assert fails(ooochecker.newlines, "The arrowhead was modified without saving.\nWould you like to save the arrowhead now?", "Ṱhoho ya musevhe yo khwinifhadzwa hu si na u seiva.Ni khou ṱoda u seiva thoho ya musevhe zwino?")
255
256 -def test_tabs():
257 """tests tabs""" 258 stdchecker = checks.StandardChecker() 259 assert passes(stdchecker.tabs, "Nothing to see", "Niks te sien") 260 assert passes(stdchecker.tabs, "Correct\t", "Korrek\t") 261 assert passes(stdchecker.tabs, "Correct\tAA", "Korrek\tAA") 262 assert fails_serious(stdchecker.tabs, "A file\t", "'n Leer") 263 assert fails_serious(stdchecker.tabs, "A file", "'n Leer\t") 264 ooochecker = checks.OpenOfficeChecker() 265 assert passes(ooochecker.tabs, ",\t44\t;\t59\t:\t58\t{Tab}\t9\t{space}\t32", ",\t44\t;\t59\t:\t58\t{Tab}\t9\t{space}\t32")
266
267 -def test_filepaths():
268 """tests filepaths""" 269 stdchecker = checks.StandardChecker() 270 assert passes(stdchecker.filepaths, "%s to the file /etc/hosts on your system.", "%s na die leer /etc/hosts op jou systeem.") 271 assert fails(stdchecker.filepaths, "%s to the file /etc/hosts on your system.", "%s na die leer /etc/gasheer op jou systeem.")
272
273 -def test_kdecomments():
274 """tests kdecomments""" 275 stdchecker = checks.StandardChecker() 276 assert passes(stdchecker.kdecomments, r"""_: I am a comment\n 277 A string to translate""", "'n String om te vertaal") 278 assert fails(stdchecker.kdecomments, r"""_: I am a comment\n 279 A string to translate""", r"""_: Ek is 'n commment\n 280 'n String om te vertaal""") 281 assert fails(stdchecker.kdecomments, """_: I am a comment\\n\n""", """_: I am a comment\\n\n""")
282
283 -def test_long():
284 """tests long messages""" 285 stdchecker = checks.StandardChecker() 286 assert passes(stdchecker.long, "I am normal", "Ek is ook normaal") 287 assert fails(stdchecker.long, "Short.", "Kort.......................................................................................") 288 assert fails(stdchecker.long, "a", "bc")
289
290 -def test_musttranslatewords():
291 """tests stopwords""" 292 stdchecker = checks.StandardChecker(checks.CheckerConfig(musttranslatewords=[])) 293 assert passes(stdchecker.musttranslatewords, "This uses Mozilla of course", "hierdie gebruik le mozille natuurlik") 294 stdchecker = checks.StandardChecker(checks.CheckerConfig(musttranslatewords=["Mozilla"])) 295 assert passes(stdchecker.musttranslatewords, "This uses Mozilla of course", "hierdie gebruik le mozille natuurlik") 296 assert fails(stdchecker.musttranslatewords, "This uses Mozilla of course", "hierdie gebruik Mozilla natuurlik") 297 assert passes(stdchecker.musttranslatewords, "This uses Mozilla. Don't you?", "hierdie gebruik le mozille soos jy") 298 assert fails(stdchecker.musttranslatewords, "This uses Mozilla. Don't you?", "hierdie gebruik Mozilla soos jy") 299 # should always pass if there are no stopwords in the original 300 assert passes(stdchecker.musttranslatewords, "This uses something else. Don't you?", "hierdie gebruik Mozilla soos jy") 301 # check that we can find words surrounded by punctuation 302 assert passes(stdchecker.musttranslatewords, "Click 'Mozilla' button", "Kliek 'Motzille' knoppie") 303 assert fails(stdchecker.musttranslatewords, "Click 'Mozilla' button", "Kliek 'Mozilla' knoppie") 304 assert passes(stdchecker.musttranslatewords, 'Click "Mozilla" button', 'Kliek "Motzille" knoppie') 305 assert fails(stdchecker.musttranslatewords, 'Click "Mozilla" button', 'Kliek "Mozilla" knoppie') 306 assert fails(stdchecker.musttranslatewords, 'Click "Mozilla" button', u'Kliek «Mozilla» knoppie') 307 assert passes(stdchecker.musttranslatewords, "Click (Mozilla) button", "Kliek (Motzille) knoppie") 308 assert fails(stdchecker.musttranslatewords, "Click (Mozilla) button", "Kliek (Mozilla) knoppie") 309 assert passes(stdchecker.musttranslatewords, "Click Mozilla!", "Kliek Motzille!") 310 assert fails(stdchecker.musttranslatewords, "Click Mozilla!", "Kliek Mozilla!") 311 ## We need to define more word separators to allow us to find those hidden untranslated items 312 #assert fails(stdchecker.musttranslatewords, "Click OK", "Blah we-OK") 313 # Don't get confused when variables are the same as a musttranslate word 314 stdchecker = checks.StandardChecker(checks.CheckerConfig(varmatches=[("%", None), ], musttranslatewords=["OK"])) 315 assert passes(stdchecker.musttranslatewords, "Click %OK to start", "Kliek %OK om te begin") 316 # Unicode 317 assert fails(stdchecker.musttranslatewords, "Click OK", u"Kiḽikani OK")
318
319 -def test_notranslatewords():
320 """tests stopwords""" 321 stdchecker = checks.StandardChecker(checks.CheckerConfig(notranslatewords=[])) 322 assert passes(stdchecker.notranslatewords, "This uses Mozilla of course", "hierdie gebruik le mozille natuurlik") 323 stdchecker = checks.StandardChecker(checks.CheckerConfig(notranslatewords=["Mozilla", "Opera"])) 324 assert fails(stdchecker.notranslatewords, "This uses Mozilla of course", "hierdie gebruik le mozille natuurlik") 325 assert passes(stdchecker.notranslatewords, "This uses Mozilla of course", "hierdie gebruik Mozilla natuurlik") 326 assert fails(stdchecker.notranslatewords, "This uses Mozilla. Don't you?", "hierdie gebruik le mozille soos jy") 327 assert passes(stdchecker.notranslatewords, "This uses Mozilla. Don't you?", "hierdie gebruik Mozilla soos jy") 328 # should always pass if there are no stopwords in the original 329 assert passes(stdchecker.notranslatewords, "This uses something else. Don't you?", "hierdie gebruik Mozilla soos jy") 330 # Cope with commas 331 assert passes(stdchecker.notranslatewords, "using Mozilla Task Manager", u"šomiša Selaola Mošomo sa Mozilla, gomme") 332 # Find words even if they are embedded in punctuation 333 assert fails(stdchecker.notranslatewords, "Click 'Mozilla' button", "Kliek 'Motzille' knoppie") 334 assert passes(stdchecker.notranslatewords, "Click 'Mozilla' button", "Kliek 'Mozilla' knoppie") 335 assert fails(stdchecker.notranslatewords, "Click Mozilla!", "Kliek Motzille!") 336 assert passes(stdchecker.notranslatewords, "Click Mozilla!", "Kliek Mozilla!") 337 assert fails(stdchecker.notranslatewords, "Searches (From Opera)", "adosako (kusukela ku- Ophera)") 338 stdchecker = checks.StandardChecker(checks.CheckerConfig(notranslatewords=["Sun", "NeXT"])) 339 assert fails(stdchecker.notranslatewords, "Sun/NeXT Audio", "Odio dza Ḓuvha/TeVHELAHO") 340 assert passes(stdchecker.notranslatewords, "Sun/NeXT Audio", "Odio dza Sun/NeXT") 341 stdchecker = checks.StandardChecker(checks.CheckerConfig(notranslatewords=["sendmail"])) 342 assert fails(stdchecker.notranslatewords, "because 'sendmail' could", "ngauri 'rumelameiḽi' a yo") 343 assert passes(stdchecker.notranslatewords, "because 'sendmail' could", "ngauri 'sendmail' a yo") 344 stdchecker = checks.StandardChecker(checks.CheckerConfig(notranslatewords=["Base"])) 345 assert fails(stdchecker.notranslatewords, " - %PRODUCTNAME Base: Relation design", " - %PRODUCTNAME Sisekelo: Umsiko wekuhlobana") 346 stdchecker = checks.StandardChecker(checks.CheckerConfig(notranslatewords=["Writer"])) 347 assert fails(stdchecker.notranslatewords, "&[ProductName] Writer/Web", "&[ProductName] Umbhali/iWebhu") 348 # Unicode - different decompositions 349 stdchecker = checks.StandardChecker(checks.CheckerConfig(notranslatewords=[u"\u1e3cike"])) 350 assert passes(stdchecker.notranslatewords, u"You \u1e3cike me", u"Ek \u004c\u032dike jou")
351
352 -def test_numbers():
353 """test numbers""" 354 stdchecker = checks.StandardChecker() 355 assert passes(stdchecker.numbers, "Netscape 4 was not as good as Netscape 7.", "Netscape 4 was nie so goed soos Netscape 7 nie.") 356 # Check for correct detection of degree. Also check that we aren't getting confused with 1 and 2 byte UTF-8 characters 357 assert fails(stdchecker.numbers, "180° turn", "180 turn") 358 assert passes(stdchecker.numbers, "180° turn", "180° turn") 359 assert fails(stdchecker.numbers, "180° turn", "360 turn") 360 assert fails(stdchecker.numbers, "180° turn", "360° turn") 361 assert passes(stdchecker.numbers, "180~ turn", "180 turn") 362 assert passes(stdchecker.numbers, "180¶ turn", "180 turn") 363 # Numbers with multiple decimal points 364 assert passes(stdchecker.numbers, "12.34.56", "12.34.56") 365 assert fails(stdchecker.numbers, "12.34.56", "98.76.54") 366 # Currency 367 # FIXME we should probably be able to handle currency checking with locale inteligence 368 assert passes(stdchecker.numbers, "R57.60", "R57.60") 369 # FIXME - again locale intelligence should allow us to use other decimal seperators 370 assert fails(stdchecker.numbers, "R57.60", "R57,60") 371 assert fails(stdchecker.numbers, "1,000.00", "1 000,00") 372 # You should be able to reorder numbers 373 assert passes(stdchecker.numbers, "40-bit RC2 encryption with RSA and an MD5", "Umbhalo ocashile i-RC2 onamabhithi angu-40 one-RSA ne-MD5")
374
375 -def test_options():
376 """tests command line options e.g. --option""" 377 stdchecker = checks.StandardChecker() 378 assert passes(stdchecker.options, "--help", "--help") 379 assert fails(stdchecker.options, "--help", "--hulp") 380 assert fails(stdchecker.options, "--input=FILE", "--input=FILE") 381 assert passes(stdchecker.options, "--input=FILE", "--input=LÊER") 382 assert fails(stdchecker.options, "--input=FILE", "--tovoer=LÊER") 383 # We don't want just any '--' to trigger this test - the error will be confusing 384 assert passes(stdchecker.options, "Hello! -- Hi", "Hallo! &mdash; Haai") 385 assert passes(stdchecker.options, "--blank--", "--vide--")
386
387 -def test_printf():
388 """tests printf style variables""" 389 # This should really be a subset of the variable checks 390 # Ideally we should be able to adapt based on #, directives also 391 stdchecker = checks.StandardChecker() 392 assert passes(stdchecker.printf, "I am %s", "Ek is %s") 393 assert fails(stdchecker.printf, "I am %s", "Ek is %d") 394 assert passes(stdchecker.printf, "I am %#100.50hhf", "Ek is %#100.50hhf") 395 assert fails(stdchecker.printf, "I am %#100s", "Ek is %10s") 396 assert fails(stdchecker.printf, "... for user %.100s on %.100s:", "... lomuntu osebenzisa i-%. I-100s e-100s:") 397 assert passes(stdchecker.printf, "%dMB", "%d MG") 398 # Reordering 399 assert passes(stdchecker.printf, "String %s and number %d", "String %1$s en nommer %2$d") 400 assert passes(stdchecker.printf, "String %1$s and number %2$d", "String %1$s en nommer %2$d") 401 assert passes(stdchecker.printf, "String %s and number %d", "Nommer %2$d and string %1$s") 402 assert fails(stdchecker.printf, "String %s and number %d", "Nommer %1$d and string %2$s")
403
404 -def test_puncspacing():
405 """tests spacing after punctuation""" 406 stdchecker = checks.StandardChecker() 407 assert passes(stdchecker.puncspacing, "One, two, three.", "Kunye, kubili, kuthathu.") 408 assert passes(stdchecker.puncspacing, "One, two, three. ", "Kunye, kubili, kuthathu.") 409 assert fails(stdchecker.puncspacing, "One, two, three. ", "Kunye, kubili,kuthathu.") 410 assert passes(stdchecker.puncspacing, "One, two, three!?", "Kunye, kubili, kuthathu?") 411 412 # Some languages have padded puntuation marks 413 frchecker = checks.StandardChecker(checks.CheckerConfig(targetlanguage="fr")) 414 assert passes(frchecker.puncspacing, "Do \"this\"", "Do « this »") 415 assert fails(frchecker.puncspacing, "Do \"this\"", "Do «this»")
416
417 -def test_purepunc():
418 """tests messages containing only punctuation""" 419 stdchecker = checks.StandardChecker() 420 assert passes(stdchecker.purepunc, ".", ".") 421 assert passes(stdchecker.purepunc, "", "") 422 assert fails(stdchecker.purepunc, ".", " ") 423 assert fails(stdchecker.purepunc, "Find", "'") 424 assert fails(stdchecker.purepunc, "'", "Find")
425
426 -def test_sentencecount():
427 """tests sentencecount messages""" 428 stdchecker = checks.StandardChecker() 429 assert passes(stdchecker.sentencecount, "One. Two. Three.", "Een. Twee. Drie.") 430 assert passes(stdchecker.sentencecount, "One two three", "Een twee drie.") 431 assert fails(stdchecker.sentencecount, "One. Two. Three.", "Een Twee. Drie.") 432 assert passes(stdchecker.sentencecount, "Sentence with i.e. in it.", "Sin met d.w.s. in dit.") # bug 178, description item 8
433
434 -def test_short():
435 """tests short messages""" 436 stdchecker = checks.StandardChecker() 437 assert passes(stdchecker.short, "I am normal", "Ek is ook normaal") 438 assert fails(stdchecker.short, "I am a very long sentence", "Ek") 439 assert fails(stdchecker.short, "abcde", "c")
440
441 -def test_singlequoting():
442 """tests single quotes""" 443 stdchecker = checks.StandardChecker() 444 assert passes(stdchecker.singlequoting, "A 'Hot' plate", "Ipuleti 'elishisa' kunye") 445 # FIXME this should pass but doesn't probably to do with our logic that got confused at the end of lines 446 assert passes(stdchecker.singlequoting, "'Hot' plate", "Ipuleti 'elishisa'") 447 # FIXME newlines also confuse our algorithm for single quotes 448 assert passes(stdchecker.singlequoting, "File '%s'\n", "'%s' Faele\n") 449 assert fails(stdchecker.singlequoting, "'Hot' plate", "Ipuleti \"elishisa\"") 450 assert passes(stdchecker.singlequoting, "It's here.", "Dit is hier.") 451 # Don't get confused by punctuation that touches a single quote 452 assert passes(stdchecker.singlequoting, "File '%s'.", "'%s' Faele.") 453 assert passes(stdchecker.singlequoting, "Blah 'format' blah.", "Blah blah 'sebopego'.") 454 assert passes(stdchecker.singlequoting, "Blah 'format' blah!", "Blah blah 'sebopego'!") 455 assert passes(stdchecker.singlequoting, "Blah 'format' blah?", "Blah blah 'sebopego'?") 456 # Real examples 457 assert passes(stdchecker.singlequoting, "A nickname that identifies this publishing site (e.g.: 'MySite')", "Vito ro duvulela leri tirhisiwaka ku kuma sayiti leri ro kandziyisa (xik.: 'Sayiti ra Mina')") 458 assert passes(stdchecker.singlequoting, "isn't", "ayikho") 459 # Afrikaans 'n 460 assert passes(stdchecker.singlequoting, "Please enter a different site name.", "Tik 'n ander werfnaam in.") 461 assert passes(stdchecker.singlequoting, "\"%name%\" already exists. Please enter a different site name.", "\"%name%\" bestaan reeds. Tik 'n ander werfnaam in.") 462 # Check that accelerators don't mess with removing singlequotes 463 mozillachecker = checks.MozillaChecker() 464 assert passes(mozillachecker.singlequoting, "&Don't import anything", "&Moenie enigiets invoer nie") 465 ooochecker = checks.OpenOfficeChecker() 466 assert passes(ooochecker.singlequoting, "~Don't import anything", "~Moenie enigiets invoer nie")
467
468 -def test_simplecaps():
469 """tests simple caps""" 470 # Simple caps is a very vauge test so the checks here are mostly for obviously fixable problem 471 # or for checking obviously correct situations that are triggering a failure. 472 stdchecker = checks.StandardChecker() 473 assert passes(stdchecker.simplecaps, "MB of disk space for the cache.", "MB yendzawo yediski etsala.") 474 # We should squash 'I' in the source text as it messes with capital detection 475 assert passes(stdchecker.simplecaps, "if you say I want", "as jy se ek wil") 476 assert passes(stdchecker.simplecaps, "sentence. I want more.", "sin. Ek wil meer he.") 477 assert passes(stdchecker.simplecaps, "Where are we? I can't see where we are going.", "Waar is ons? Ek kan nie sien waar ons gaan nie.") 478 ## We should remove variables before checking 479 stdchecker = checks.StandardChecker(checks.CheckerConfig(varmatches=[("%", 1)])) 480 assert passes(stdchecker.simplecaps, "Could not load %s", "A swi koteki ku panga %S") 481 assert passes(stdchecker.simplecaps, "The element \"%S\" is not recognized.", "Elemente \"%S\" a yi tiveki.") 482 stdchecker = checks.StandardChecker(checks.CheckerConfig(varmatches=[("&", ";")])) 483 assert passes(stdchecker.simplecaps, "Determine how &brandShortName; connects to the Internet.", "Kuma &brandShortName; hlanganisa eka Internete.") 484 ## If source is ALL CAPS then we should just check that target is also ALL CAPS 485 assert passes(stdchecker.simplecaps, "COUPDAYS", "COUPMALANGA") 486 # Just some that at times have failed but should always pass 487 assert passes(stdchecker.simplecaps, "Create a query entering an SQL statement directly.", "Yakha sibuti singena SQL inkhomba yesitatimende.") 488 ooochecker = checks.OpenOfficeChecker() 489 assert passes(ooochecker.simplecaps, "SOLK (%PRODUCTNAME Link)", "SOLK (%PRODUCTNAME Thumanyo)") 490 assert passes(ooochecker.simplecaps, "%STAROFFICE Image", "Tshifanyiso tsha %STAROFFICE") 491 assert passes(stdchecker.simplecaps, "Flies, flies, everywhere! Ack!", u"Vlieë, oral vlieë! Jig!")
492
493 -def test_spellcheck():
494 """tests spell checking""" 495 stdchecker = checks.StandardChecker(checks.CheckerConfig(targetlanguage="af")) 496 assert passes(stdchecker.spellcheck, "Great trek", "Groot trek") 497 assert fails(stdchecker.spellcheck, "Final deadline", "End of the road")
498
499 -def test_startcaps():
500 """tests starting capitals""" 501 stdchecker = checks.StandardChecker() 502 assert passes(stdchecker.startcaps, "Find", "Vind") 503 assert passes(stdchecker.startcaps, "find", "vind") 504 assert fails(stdchecker.startcaps, "Find", "vind") 505 assert fails(stdchecker.startcaps, "find", "Vind") 506 assert passes(stdchecker.startcaps, "'", "'") 507 assert passes(stdchecker.startcaps, "\\.,/?!`'\"[]{}()@#$%^&*_-;:<>Find", "\\.,/?!`'\"[]{}()@#$%^&*_-;:<>Vind") 508 # With leading whitespace 509 assert passes(stdchecker.startcaps, " Find", " Vind") 510 assert passes(stdchecker.startcaps, " find", " vind") 511 assert fails(stdchecker.startcaps, " Find", " vind") 512 assert fails(stdchecker.startcaps, " find", " Vind") 513 # Leading punctuation 514 assert passes(stdchecker.startcaps, "'Find", "'Vind") 515 assert passes(stdchecker.startcaps, "'find", "'vind") 516 assert fails(stdchecker.startcaps, "'Find", "'vind") 517 assert fails(stdchecker.startcaps, "'find", "'Vind") 518 # Unicode 519 assert passes(stdchecker.startcaps, "Find", u"Šind") 520 assert passes(stdchecker.startcaps, "find", u"šind") 521 assert fails(stdchecker.startcaps, "Find", u"šind") 522 assert fails(stdchecker.startcaps, "find", u"Šind") 523 # Unicode further down the Unicode tables 524 assert passes(stdchecker.startcaps, "A text enclosed...", u"Ḽiṅwalwa ḽo katelwaho...") 525 assert fails(stdchecker.startcaps, "A text enclosed...", u"ḽiṅwalwa ḽo katelwaho...") 526 527 # Accelerators 528 stdchecker = checks.StandardChecker(checks.CheckerConfig(accelmarkers="&")) 529 assert passes(stdchecker.startcaps, "&Find", "Vi&nd") 530 531 # Language specific stuff 532 stdchecker = checks.StandardChecker(checks.CheckerConfig(targetlanguage='af')) 533 assert passes(stdchecker.startcaps, "A cow", "'n Koei") 534 assert passes(stdchecker.startcaps, "A list of ", "'n Lys van ") 535 # should pass: 536 #assert passes(stdchecker.startcaps, "A 1k file", u"'n 1k-lêer") 537 assert passes(stdchecker.startcaps, "'Do it'", "'Doen dit'") 538 assert fails(stdchecker.startcaps, "'Closer than'", "'nader as'") 539 assert passes(stdchecker.startcaps, "List", "Lys") 540 assert passes(stdchecker.startcaps, "a cow", "'n koei") 541 assert fails(stdchecker.startcaps, "a cow", "'n Koei") 542 assert passes(stdchecker.startcaps, "(A cow)", "('n Koei)") 543 assert fails(stdchecker.startcaps, "(a cow)", "('n Koei)")
544
545 -def test_startpunc():
546 """tests startpunc""" 547 stdchecker = checks.StandardChecker() 548 assert passes(stdchecker.startpunc, "<< Previous", "<< Correct") 549 assert fails(stdchecker.startpunc, " << Previous", "Wrong") 550 assert fails(stdchecker.startpunc, "Question", u"\u2026Wrong")
551
552 -def test_startwhitespace():
553 """tests startwhitespace""" 554 stdchecker = checks.StandardChecker() 555 assert passes(stdchecker.startwhitespace, "A setence.", "I'm correct.") 556 assert fails(stdchecker.startwhitespace, " A setence.", "I'm incorrect.")
557
558 -def test_unchanged():
559 """tests unchanged entries""" 560 stdchecker = checks.StandardChecker(checks.CheckerConfig(accelmarkers="&")) 561 assert fails(stdchecker.unchanged, "Unchanged", "Unchanged") 562 assert fails(stdchecker.unchanged, "&Unchanged", "Un&changed") 563 assert passes(stdchecker.unchanged, "Unchanged", "Changed") 564 assert passes(stdchecker.unchanged, "1234", "1234") 565 assert passes(stdchecker.unchanged, "2×2", "2×2") # bug 178, description item 14 566 assert passes(stdchecker.unchanged, "I", "I") 567 assert passes(stdchecker.unchanged, " ", " ") # bug 178, description item 5 568 assert passes(stdchecker.unchanged, "???", "???") # bug 178, description item 15 569 assert passes(stdchecker.unchanged, "&ACRONYM", "&ACRONYM") # bug 178, description item 7 570 assert passes(stdchecker.unchanged, "F1", "F1") # bug 178, description item 20 571 # Variable only and variable plus punctuation messages should be ignored 572 mozillachecker = checks.MozillaChecker() 573 assert passes(mozillachecker.unchanged, "$ProgramName$", "$ProgramName$") 574 assert passes(mozillachecker.unchanged, "$file$ : $dir$", "$file$ : $dir$") # bug 178, description item 13 575 assert fails(mozillachecker.unchanged, "$file$ in $dir$", "$file$ in $dir$") 576 # Don't translate words should be ignored 577 stdchecker = checks.StandardChecker(checks.CheckerConfig(notranslatewords=["Mozilla"])) 578 assert passes(stdchecker.unchanged, "Mozilla", "Mozilla") # bug 178, description item 10
579
580 -def test_untranslated():
581 """tests untranslated entries""" 582 stdchecker = checks.StandardChecker() 583 assert fails(stdchecker.untranslated, "I am untranslated", "") 584 assert passes(stdchecker.untranslated, "I am translated", "Ek is vertaal") 585 # KDE comments that make it into translations should not mask untranslated test 586 assert fails(stdchecker.untranslated, "_: KDE comment\\n\nI am untranslated", "_: KDE comment\\n\n")
587
588 -def test_validchars():
589 """tests valid characters""" 590 stdchecker = checks.StandardChecker(checks.CheckerConfig()) 591 assert passes(stdchecker.validchars, "The check always passes if you don't specify chars", "Die toets sal altyd werk as jy nie karacters specifisier") 592 stdchecker = checks.StandardChecker(checks.CheckerConfig(validchars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz')) 593 assert passes(stdchecker.validchars, "This sentence contains valid characters", "Hierdie sin bevat ware karakters") 594 assert fails(stdchecker.validchars, "Some unexpected characters", "©®°±÷¼½¾") 595 stdchecker = checks.StandardChecker(checks.CheckerConfig(validchars='⠁⠂⠃⠄⠅⠆⠇⠈⠉⠊⠋⠌⠍⠎⠏⠐⠑⠒⠓⠔⠕⠖⠗⠘⠙⠚⠛⠜⠝⠞⠟⠠⠡⠢⠣⠤⠥⠦⠧⠨⠩⠪⠫⠬⠭⠮⠯⠰')) 596 assert passes(stdchecker.validchars, "Our target language is all non-ascii", "⠁⠂⠃⠄⠆⠇⠈⠉⠜⠝⠞⠟⠠⠡⠢⠣⠤⠥⠦⠧⠨⠩⠪⠫") 597 assert fails(stdchecker.validchars, "Our target language is all non-ascii", "Some ascii⠁⠂⠃⠄⠆⠇⠈⠉⠜⠝⠞⠟⠠⠡⠢⠣⠤⠥⠦⠧⠨⠩⠪⠫") 598 stdchecker = checks.StandardChecker(checks.CheckerConfig(validchars=u'\u004c\u032d')) 599 assert passes(stdchecker.validchars, "This sentence contains valid chars", u"\u004c\u032d") 600 assert passes(stdchecker.validchars, "This sentence contains valid chars", u"\u1e3c") 601 stdchecker = checks.StandardChecker(checks.CheckerConfig(validchars=u'\u1e3c')) 602 assert passes(stdchecker.validchars, "This sentence contains valid chars", u"\u1e3c") 603 assert passes(stdchecker.validchars, "This sentence contains valid chars", u"\u004c\u032d")
604
605 -def test_variables_kde():
606 """tests variables in KDE translations""" 607 # GNOME variables 608 kdechecker = checks.KdeChecker() 609 assert passes(kdechecker.variables, "%d files of type %s saved.", "%d leers van %s tipe gestoor.") 610 assert fails_serious(kdechecker.variables, "%d files of type %s saved.", "%s leers van %s tipe gestoor.")
611
612 -def test_variables_gnome():
613 """tests variables in GNOME translations""" 614 # GNOME variables 615 gnomechecker = checks.GnomeChecker() 616 assert passes(gnomechecker.variables, "%d files of type %s saved.", "%d leers van %s tipe gestoor.") 617 assert fails_serious(gnomechecker.variables, "%d files of type %s saved.", "%s leers van %s tipe gestoor.") 618 assert passes(gnomechecker.variables, "Save $(file)", "Stoor $(file)") 619 assert fails_serious(gnomechecker.variables, "Save $(file)", "Stoor $(leer)")
620
621 -def test_variables_mozilla():
622 """tests variables in Mozilla translations""" 623 # Mozilla variables 624 mozillachecker = checks.MozillaChecker() 625 assert passes(mozillachecker.variables, "Use the &brandShortname; instance.", "Gebruik die &brandShortname; weergawe.") 626 assert fails_serious(mozillachecker.variables, "Use the &brandShortname; instance.", "Gebruik die &brandKortnaam; weergawe.") 627 assert passes(mozillachecker.variables, "Save %file%", "Stoor %file%") 628 assert fails_serious(mozillachecker.variables, "Save %file%", "Stoor %leer%") 629 assert passes(mozillachecker.variables, "Save $file$", "Stoor $file$") 630 assert fails_serious(mozillachecker.variables, "Save $file$", "Stoor $leer$") 631 assert passes(mozillachecker.variables, "%d files of type %s saved.", "%d leers van %s tipe gestoor.") 632 assert fails_serious(mozillachecker.variables, "%d files of type %s saved.", "%s leers van %s tipe gestoor.") 633 assert passes(mozillachecker.variables, "Save $file", "Stoor $file") 634 assert fails_serious(mozillachecker.variables, "Save $file", "Stoor $leer") 635 assert passes(mozillachecker.variables, "About $ProgramName$", "Oor $ProgramName$") 636 assert fails_serious(mozillachecker.variables, "About $ProgramName$", "Oor $NaamVanProgam$") 637 assert passes(mozillachecker.variables, "About $_CLICK", "Oor $_CLICK") 638 assert fails_serious(mozillachecker.variables, "About $_CLICK", "Oor $_KLIK") 639 assert passes(mozillachecker.variables, "About $(^NameDA)", "Oor $(^NameDA)") 640 assert fails_serious(mozillachecker.variables, "About $(^NameDA)", "Oor $(^NaamDA)") 641 # Double variable problem 642 assert fails_serious(mozillachecker.variables, "Create In &lt;&lt;", "Etsa ka Ho &lt;lt;") 643 # Variables at the end of a sentence 644 assert fails_serious(mozillachecker.variables, "...time you start &brandShortName;.", "...lekgetlo le latelang ha o qala &LebitsoKgutshwane la kgwebo;.") 645 # Ensure that we can detect two variables of the same name with one faulty 646 assert fails_serious(mozillachecker.variables, "&brandShortName; successfully downloaded and installed updates. You will have to restart &brandShortName; to complete the update.", "&brandShortName; ḽo dzhenisa na u longela khwinifhadzo zwavhuḓi. Ni ḓo tea u thoma hafhu &DzinaḼipfufhi ḽa pfungavhuṇe; u itela u fhedzisa khwinifha dzo.") 647 # We must detect entities in their fullform, ie with fullstop in the middle. 648 assert fails_serious(mozillachecker.variables, "Welcome to the &pluginWizard.title;", "Wamkelekile kwi&Sihloko Soncedo lwe-plugin;") 649 # Variables that are missing in quotes should be detected 650 assert fails_serious(mozillachecker.variables, "\"%S\" is an executable file.... Are you sure you want to launch \"%S\"?", ".... Uyaqiniseka ukuthi ufuna ukuqalisa I\"%S\"?") 651 # False positive $ style variables 652 assert passes(mozillachecker.variables, "for reporting $ProductShortName$ crash information", "okokubika ukwaziswa kokumosheka kwe-$ProductShortName$") 653 # We shouldn't mask variables within variables. This should highlight &brandShortName as missing and &amp as extra 654 assert fails_serious(mozillachecker.variables, "&brandShortName;", "&amp;brandShortName;")
655
656 -def test_variables_openoffice():
657 """tests variables in OpenOffice translations""" 658 # OpenOffice.org variables 659 ooochecker = checks.OpenOfficeChecker() 660 assert passes(ooochecker.variables, "Use the &brandShortname; instance.", "Gebruik die &brandShortname; weergawe.") 661 assert fails_serious(ooochecker.variables, "Use the &brandShortname; instance.", "Gebruik die &brandKortnaam; weergawe.") 662 assert passes(ooochecker.variables, "Save %file%", "Stoor %file%") 663 assert fails_serious(ooochecker.variables, "Save %file%", "Stoor %leer%") 664 assert passes(ooochecker.variables, "Save %file", "Stoor %file") 665 assert fails_serious(ooochecker.variables, "Save %file", "Stoor %leer") 666 assert passes(ooochecker.variables, "Save %1", "Stoor %1") 667 assert fails_serious(ooochecker.variables, "Save %1", "Stoor %2") 668 assert passes(ooochecker.variables, "Save %", "Stoor %") 669 assert fails_serious(ooochecker.variables, "Save %", "Stoor") 670 assert passes(ooochecker.variables, "Save $(file)", "Stoor $(file)") 671 assert fails_serious(ooochecker.variables, "Save $(file)", "Stoor $(leer)") 672 assert passes(ooochecker.variables, "Save $file$", "Stoor $file$") 673 assert fails_serious(ooochecker.variables, "Save $file$", "Stoor $leer$") 674 assert passes(ooochecker.variables, "Save ${file}", "Stoor ${file}") 675 assert fails_serious(ooochecker.variables, "Save ${file}", "Stoor ${leer}") 676 assert passes(ooochecker.variables, "Save #file#", "Stoor #file#") 677 assert fails_serious(ooochecker.variables, "Save #file#", "Stoor #leer#") 678 assert passes(ooochecker.variables, "Save #1", "Stoor #1") 679 assert fails_serious(ooochecker.variables, "Save #1", "Stoor #2") 680 assert passes(ooochecker.variables, "Save #", "Stoor #") 681 assert fails_serious(ooochecker.variables, "Save #", "Stoor") 682 assert passes(ooochecker.variables, "Save ($file)", "Stoor ($file)") 683 assert fails_serious(ooochecker.variables, "Save ($file)", "Stoor ($leer)") 684 assert passes(ooochecker.variables, "Save $[file]", "Stoor $[file]") 685 assert fails_serious(ooochecker.variables, "Save $[file]", "Stoor $[leer]") 686 assert passes(ooochecker.variables, "Save [file]", "Stoor [file]") 687 assert fails_serious(ooochecker.variables, "Save [file]", "Stoor [leer]") 688 assert passes(ooochecker.variables, "Save $file", "Stoor $file") 689 assert fails_serious(ooochecker.variables, "Save $file", "Stoor $leer") 690 # Same variable name twice 691 assert fails_serious(ooochecker.variables, r"""Start %PROGRAMNAME% as %PROGRAMNAME%""", "Begin %PROGRAMNAME%")
692
693 -def test_variables_cclicense():
694 """Tests variables in Creative Commons translations.""" 695 checker = checks.CCLicenseChecker() 696 assert passes(checker.variables, "CC-GNU @license_code@.", "CC-GNU @license_code@.") 697 assert fails_serious(checker.variables, "CC-GNU @license_code@.", "CC-GNU @lisensie_kode@.") 698 assert passes(checker.variables, "Deed to the @license_name_full@", "Akte vir die @license_name_full@") 699 assert fails_serious(checker.variables, "Deed to the @license_name_full@", "Akte vir die @volle_lisensie@") 700 assert passes(checker.variables, "The @license_name_full@ is", "Die @license_name_full@ is") 701 assert fails_serious(checker.variables, "The @license_name_full@ is", "Die @iiilicense_name_full@ is") 702 assert fails_serious(checker.variables, "A @ccvar@", "'n @ccvertaaldeveranderlike@")
703
704 -def test_xmltags():
705 """tests xml tags""" 706 stdchecker = checks.StandardChecker() 707 assert fails(stdchecker.xmltags, "Do it <b>now</b>", "Doen dit <v>nou</v>") 708 assert passes(stdchecker.xmltags, "Do it <b>now</b>", "Doen dit <b>nou</b>") 709 assert passes(stdchecker.xmltags, "Click <img src=\"img.jpg\">here</img>", "Klik <img src=\"img.jpg\">hier</img>") 710 assert fails(stdchecker.xmltags, "Click <img src=\"image.jpg\">here</img>", "Klik <img src=\"prent.jpg\">hier</img>") 711 assert passes(stdchecker.xmltags, "Click <img src=\"img.jpg\" alt=\"picture\">here</img>", "Klik <img src=\"img.jpg\" alt=\"prentjie\">hier</img>") 712 assert passes(stdchecker.xmltags, "Start with the &lt;start&gt; tag", "Begin met die &lt;begin&gt;") 713 714 assert fails(stdchecker.xmltags, "Click <a href=\"page.html\">", "Klik <a hverw=\"page.html\">") 715 assert passes(stdchecker.xmltags, "Click <a xml-lang=\"en\" href=\"page.html\">", "Klik <a xml-lang=\"af\" href=\"page.html\">") 716 assert fails(stdchecker.xmltags, "Click <a href=\"page.html\" target=\"koei\">", "Klik <a href=\"page.html\">") 717 assert fails(stdchecker.xmltags, "<b>Current Translation</b>", "<b>Traducción Actual:<b>") 718 assert passes(stdchecker.xmltags, "<Error>", "<Fout>") 719 assert fails(stdchecker.xmltags, "%d/%d translated\n(%d blank, %d fuzzy)", "<br>%d/%d μεταφρασμένα\n<br>(%d κενά, %d ασαφή)") 720 frchecker = checks.StandardChecker(checks.CheckerConfig(targetlanguage="fr")) 721 assert fails(frchecker.xmltags, "Click <a href=\"page.html\">", "Klik <a href=« page.html »>")
722
723 -def test_ooxmltags():
724 """Tests the xml tags in OpenOffice.org translations for quality as done in gsicheck""" 725 ooochecker = checks.OpenOfficeChecker() 726 #some attributes can be changed or removed 727 assert fails(ooochecker.xmltags, "<img src=\"a.jpg\" width=\"400\">", "<img src=\"b.jpg\" width=\"500\">") 728 assert passes(ooochecker.xmltags, "<img src=\"a.jpg\" width=\"400\">", "<img src=\"a.jpg\" width=\"500\">") 729 assert passes(ooochecker.xmltags, "<img src=\"a.jpg\" width=\"400\">", "<img src=\"a.jpg\">") 730 assert passes(ooochecker.xmltags, "<img src=\"a.jpg\">", "<img src=\"a.jpg\" width=\"400\">") 731 assert passes(ooochecker.xmltags, "<alt xml-lang=\"ab\">text</alt>", "<alt>teks</alt>") 732 assert passes(ooochecker.xmltags, "<ahelp visibility=\"visible\">bla</ahelp>", "<ahelp>blu</ahelp>") 733 assert fails(ooochecker.xmltags, "<ahelp visibility=\"visible\">bla</ahelp>", "<ahelp visibility=\"invisible\">blu</ahelp>") 734 assert fails(ooochecker.xmltags, "<ahelp visibility=\"invisible\">bla</ahelp>", "<ahelp>blu</ahelp>") 735 #some attributes can be changed, but not removed 736 assert passes(ooochecker.xmltags, "<link name=\"John\">", "<link name=\"Jan\">") 737 assert fails(ooochecker.xmltags, "<link name=\"John\">", "<link naam=\"Jan\">")
738
739 -def test_functions():
740 """tests to see that funtions() are not translated""" 741 stdchecker = checks.StandardChecker() 742 assert fails(stdchecker.functions, "blah rgb() blah", "blee brg() blee") 743 assert passes(stdchecker.functions, "blah rgb() blah", "blee rgb() blee") 744 assert fails(stdchecker.functions, "percentage in rgb()", "phesenthe kha brg()") 745 assert passes(stdchecker.functions, "percentage in rgb()", "phesenthe kha rgb()") 746 assert fails(stdchecker.functions, "rgb() in percentage", "brg() kha phesenthe") 747 assert passes(stdchecker.functions, "rgb() in percentage", "rgb() kha phesenthe") 748 assert fails(stdchecker.functions, "blah string.rgb() blah", "blee bleeb.rgb() blee") 749 assert passes(stdchecker.functions, "blah string.rgb() blah", "blee string.rgb() blee") 750 assert passes(stdchecker.functions, "or domain().", "domain() verwag.") 751 assert passes(stdchecker.functions, "Expected url(), url-prefix(), or domain().", "url(), url-prefix() of domain() verwag.")
752
753 -def test_emails():
754 """tests to see that email addresses are not translated""" 755 stdchecker = checks.StandardChecker() 756 assert fails(stdchecker.emails, "blah bob@example.net blah", "blee kobus@voorbeeld.net blee") 757 assert passes(stdchecker.emails, "blah bob@example.net blah", "blee bob@example.net blee")
758
759 -def test_urls():
760 """tests to see that URLs are not translated""" 761 stdchecker = checks.StandardChecker() 762 assert fails(stdchecker.urls, "blah http://translate.org.za blah", "blee http://vertaal.org.za blee") 763 assert passes(stdchecker.urls, "blah http://translate.org.za blah", "blee http://translate.org.za blee")
764
765 -def test_simpleplurals():
766 """test that we can find English style plural(s)""" 767 stdchecker = checks.StandardChecker() 768 assert passes(stdchecker.simpleplurals, "computer(s)", "rekenaar(s)") 769 assert fails(stdchecker.simpleplurals, "plural(s)", "meervoud(e)") 770 assert fails(stdchecker.simpleplurals, "Ungroup Metafile(s)...", "Kuvhanganyululani Metafaela(dzi)...") 771 772 # Test a language that doesn't use plurals 773 stdchecker = checks.StandardChecker(checks.CheckerConfig(targetlanguage='vi')) 774 assert passes(stdchecker.simpleplurals, "computer(s)", u"Máy tính") 775 assert fails(stdchecker.simpleplurals, "computer(s)", u"Máy tính(s)")
776
777 -def test_nplurals():
778 """Test that we can find the wrong number of plural forms. Note that this 779 test uses a UnitChecker, not a translation checker.""" 780 checker = checks.StandardUnitChecker() 781 unit = po.pounit("") 782 783 unit.source = ["%d file", "%d files"] 784 unit.target = [u"%d lêer", u"%d lêers"] 785 assert checker.nplurals(unit) 786 787 checker = checks.StandardUnitChecker(checks.CheckerConfig(targetlanguage='af')) 788 unit.source = "%d files" 789 unit.target = "%d lêer" 790 assert checker.nplurals(unit) 791 792 unit.source = ["%d file", "%d files"] 793 unit.target = [u"%d lêer", u"%d lêers"] 794 assert checker.nplurals(unit) 795 796 unit.source = ["%d file", "%d files"] 797 unit.target = [u"%d lêer", u"%d lêers", u"%d lêeeeers"] 798 assert not checker.nplurals(unit) 799 800 unit.source = ["%d file", "%d files"] 801 unit.target = [u"%d lêer"] 802 assert not checker.nplurals(unit) 803 804 checker = checks.StandardUnitChecker(checks.CheckerConfig(targetlanguage='km')) 805 unit.source = "%d files" 806 unit.target = "%d ឯកសារ" 807 assert checker.nplurals(unit) 808 809 unit.source = ["%d file", "%d files"] 810 unit.target = [u"%d ឯកសារ"] 811 assert checker.nplurals(unit) 812 813 unit.source = ["%d file", "%d files"] 814 unit.target = [u"%d ឯកសារ", u"%d lêers"] 815 assert not checker.nplurals(unit)
816
817 -def test_credits():
818 """tests credits""" 819 stdchecker = checks.StandardChecker() 820 assert passes(stdchecker.credits, "File", "iFayile") 821 assert passes(stdchecker.credits, "&File", "&Fayile") 822 assert passes(stdchecker.credits, "translator-credits", "Ekke, ekke!") 823 assert passes(stdchecker.credits, "Your names", "Ekke, ekke!") 824 assert passes(stdchecker.credits, "ROLES_OF_TRANSLATORS", "Ekke, ekke!") 825 kdechecker = checks.KdeChecker() 826 assert passes(kdechecker.credits, "File", "iFayile") 827 assert passes(kdechecker.credits, "&File", "&Fayile") 828 assert passes(kdechecker.credits, "translator-credits", "Ekke, ekke!") 829 assert fails(kdechecker.credits, "Your names", "Ekke, ekke!") 830 assert fails(kdechecker.credits, "ROLES_OF_TRANSLATORS", "Ekke, ekke!") 831 gnomechecker = checks.GnomeChecker() 832 assert passes(gnomechecker.credits, "File", "iFayile") 833 assert passes(gnomechecker.credits, "&File", "&Fayile") 834 assert fails(gnomechecker.credits, "translator-credits", "Ekke, ekke!") 835 assert passes(gnomechecker.credits, "Your names", "Ekke, ekke!") 836 assert passes(gnomechecker.credits, "ROLES_OF_TRANSLATORS", "Ekke, ekke!")
837