from pytest import mark
from translate.filters import checks, spelling
from translate.lang import data
from translate.storage import po, xliff
def strprep(str1, str2, message=None):
return (
data.normalize(str1),
data.normalize(str2),
data.normalize(message),
)
def check_category(filterfunction):
"""Checks whether ``filterfunction`` has defined a category or not."""
return filterfunction.__name__ in filterfunction.__self__.categories
def passes(filterfunction, str1, str2):
"""returns whether the given strings pass on the given test, handling FilterFailures"""
str1, str2, no_message = strprep(str1, str2)
try:
filterresult = filterfunction(str1, str2)
except checks.FilterFailure:
filterresult = False
filterresult = filterresult and check_category(filterfunction)
return filterresult
def fails(filterfunction, str1, str2, message=None):
"""returns whether the given strings fail on the given test, handling only FilterFailures"""
str1, str2, message = strprep(str1, str2, message)
try:
filterresult = filterfunction(str1, str2)
except checks.SeriousFilterFailure:
filterresult = True
except checks.FilterFailure as e:
if message:
exc_message = e.messages[0]
filterresult = exc_message != message
print(exc_message.encode("utf-8"))
else:
filterresult = False
filterresult = filterresult and check_category(filterfunction)
return not filterresult
def fails_serious(filterfunction, str1, str2, message=None):
"""returns whether the given strings fail on the given test, handling only SeriousFilterFailures"""
str1, str2, message = strprep(str1, str2, message)
try:
filterresult = filterfunction(str1, str2)
except checks.SeriousFilterFailure as e:
if message:
exc_message = e.messages[0]
filterresult = exc_message != message
print(exc_message.encode("utf-8"))
else:
filterresult = False
filterresult = filterresult and check_category(filterfunction)
return not filterresult
def test_defaults():
"""tests default setup and that checks aren't altered by other constructions"""
stdchecker = checks.StandardChecker()
assert stdchecker.config.varmatches == []
mozillachecker = checks.MozillaChecker()
assert len(mozillachecker.config.varmatches) == 9
stdchecker = checks.StandardChecker()
assert stdchecker.config.varmatches == []
def test_construct():
"""tests that the checkers can be constructed"""
checks.StandardChecker()
checks.MozillaChecker()
checks.OpenOfficeChecker()
checks.LibreOfficeChecker()
checks.GnomeChecker()
checks.KdeChecker()
checks.IOSChecker()
def test_accelerator_markers():
"""test that we have the correct accelerator marker for the various default configs"""
stdchecker = checks.StandardChecker()
assert stdchecker.config.accelmarkers == []
mozillachecker = checks.MozillaChecker()
assert mozillachecker.config.accelmarkers == ["&"]
ooochecker = checks.OpenOfficeChecker()
assert ooochecker.config.accelmarkers == ["~"]
lochecker = checks.LibreOfficeChecker()
assert lochecker.config.accelmarkers == ["~"]
gnomechecker = checks.GnomeChecker()
assert gnomechecker.config.accelmarkers == ["_"]
kdechecker = checks.KdeChecker()
assert kdechecker.config.accelmarkers == ["&"]
def test_messages():
"""test that our helpers can check for messages and that these error messages can contain Unicode"""
stdchecker = checks.StandardChecker(
checks.CheckerConfig(
validchars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
)
)
assert fails(
stdchecker.validchars,
"Some unexpected characters",
"©",
"Invalid characters: '©' (\\u00a9)",
)
stdchecker = checks.StandardChecker()
assert fails_serious(
stdchecker.escapes,
r"A tab",
r"'n Ṱab\t",
r"""Escapes in original () don't match escapes in translation ('Ṱab\t')""",
)
def test_accelerators():
"""tests accelerators"""
stdchecker = checks.StandardChecker(checks.CheckerConfig(accelmarkers="&"))
assert passes(stdchecker.accelerators, "&File", "&Fayile")
assert fails(stdchecker.accelerators, "&File", "Fayile")
assert fails(stdchecker.accelerators, "File", "&Fayile")
assert passes(stdchecker.accelerators, "Mail && News", "Pos en Nuus")
assert fails(stdchecker.accelerators, "Mail & News", "Pos en Nuus")
assert passes(stdchecker.accelerators, "&Allow", "&\ufeb2\ufee3\ufe8e\ufea3")
assert fails(stdchecker.accelerators, "Open &File", "Vula& Ifayile")
kdechecker = checks.KdeChecker()
assert passes(kdechecker.accelerators, "&File", "&Fayile")
assert fails(kdechecker.accelerators, "&File", "Fayile")
assert fails(kdechecker.accelerators, "File", "&Fayile")
gnomechecker = checks.GnomeChecker()
assert passes(gnomechecker.accelerators, "_File", "_Fayile")
assert fails(gnomechecker.accelerators, "_File", "Fayile")
assert fails(gnomechecker.accelerators, "File", "_Fayile")
assert fails(gnomechecker.accelerators, "_File", "_Fayil_e")
mozillachecker = checks.MozillaChecker()
assert passes(mozillachecker.accelerators, "&File", "&Fayile")
assert passes(
mozillachecker.accelerators,
"Warn me if this will disable any of my add&-ons",
"&Waarsku my as dit enige van my byvoegings sal deaktiveer",
)
assert fails_serious(mozillachecker.accelerators, "&File", "Fayile")
assert fails_serious(mozillachecker.accelerators, "File", "&Fayile")
assert passes(mozillachecker.accelerators, "Mail & News", "Pos en Nuus")
assert fails_serious(mozillachecker.accelerators, "Mail & News", "Pos en &Nuus")
assert passes(mozillachecker.accelerators, "Mail & News", "Pos & Nuus")
ooochecker = checks.OpenOfficeChecker()
assert passes(ooochecker.accelerators, "~File", "~Fayile")
assert fails(ooochecker.accelerators, "~File", "Fayile")
assert fails(ooochecker.accelerators, "File", "~Fayile")
# We don't want an accelerator for letters with a diacritic
assert fails(ooochecker.accelerators, "F~ile", "L~êer")
lochecker = checks.LibreOfficeChecker()
assert passes(lochecker.accelerators, "~File", "~Fayile")
assert fails(lochecker.accelerators, "~File", "Fayile")
assert fails(lochecker.accelerators, "File", "~Fayile")
# We don't want an accelerator for letters with a diacritic
assert fails(lochecker.accelerators, "F~ile", "L~êer")
# Bug 289: accept accented accelerator characters
afchecker = checks.StandardChecker(
checks.CheckerConfig(accelmarkers="&", targetlanguage="fi")
)
assert passes(afchecker.accelerators, "&Reload Frame", "P&äivitä kehys")
trchecker = checks.StandardChecker(
checks.CheckerConfig(accelmarkers="&", targetlanguage="tr")
)
assert passes(trchecker.accelerators, "&Download", "&İndir")
assert passes(trchecker.accelerators, "&Business", "İ&ş")
assert passes(trchecker.accelerators, "&Remove", "Kald&ır")
assert passes(trchecker.accelerators, "&Three", "&Üç")
assert passes(trchecker.accelerators, "&Three", "Ü&ç")
assert passes(trchecker.accelerators, "&Before", "&Önce")
assert passes(trchecker.accelerators, "Fo&ur", "D&ört")
assert passes(trchecker.accelerators, "Mo&dern", "Ça&ğdaş")
assert passes(trchecker.accelerators, "Mo&dern", "&Çağdaş")
assert passes(trchecker.accelerators, "&February", "&Şubat")
assert passes(trchecker.accelerators, "P&lain", "D&üz")
assert passes(trchecker.accelerators, "GAR&DEN", "BA&Ğ")
# Problems:
# Accelerator before variable - see test_acceleratedvariables
@mark.xfail(reason="Accelerated variables needs a better implementation")
def test_acceleratedvariables():
"""test for accelerated variables"""
# FIXME: disabled since acceleratedvariables has been removed, but these checks are still needed
mozillachecker = checks.MozillaChecker()
assert fails(mozillachecker.acceleratedvariables, "%S &Options", "&%S Ikhetho")
assert passes(mozillachecker.acceleratedvariables, "%S &Options", "%S &Ikhetho")
ooochecker = checks.OpenOfficeChecker()
assert fails(
ooochecker.acceleratedvariables,
"%PRODUCTNAME% ~Options",
"~%PRODUCTNAME% Ikhetho",
)
assert passes(
ooochecker.acceleratedvariables,
"%PRODUCTNAME% ~Options",
"%PRODUCTNAME% ~Ikhetho",
)
lochecker = checks.LibreOfficeChecker()
assert fails(
lochecker.acceleratedvariables,
"%PRODUCTNAME% ~Options",
"~%PRODUCTNAME% Ikhetho",
)
assert passes(
lochecker.acceleratedvariables,
"%PRODUCTNAME% ~Options",
"%PRODUCTNAME% ~Ikhetho",
)
def test_acronyms():
"""tests acronyms"""
stdchecker = checks.StandardChecker()
assert passes(stdchecker.acronyms, "An HTML file", "'n HTML leer")
assert fails(stdchecker.acronyms, "An HTML file", "'n LMTH leer")
assert passes(stdchecker.acronyms, "It is HTML.", "Dit is HTML.")
# We don't mind if you add an acronym to correct bad capitalisation in the original
assert passes(stdchecker.acronyms, "An html file", "'n HTML leer")
# We shouldn't worry about acronyms that appear in a musttranslate file
stdchecker = checks.StandardChecker(checks.CheckerConfig(musttranslatewords=["OK"]))
assert passes(stdchecker.acronyms, "OK", "Kulungile")
# Assert punctuation should not hide accronyms
assert fails(stdchecker.acronyms, "Location (URL) not found", "Blah blah blah")
# Test '-W' (bug 283)
assert passes(
stdchecker.acronyms,
"%s: option `-W %s' is ambiguous",
"%s: opsie '-W %s' is dubbelsinnig",
)
def test_blank():
"""tests blank"""
stdchecker = checks.StandardChecker()
assert fails(stdchecker.blank, "Save as", " ")
assert fails(stdchecker.blank, "_: KDE comment\\n\nSimple string", " ")
def test_brackets():
"""tests brackets"""
stdchecker = checks.StandardChecker()
assert passes(stdchecker.brackets, "N number(s)", "N getal(le)")
assert fails(stdchecker.brackets, "For {sic} numbers", "Vier getalle")
assert fails(stdchecker.brackets, "For }sic{ numbers", "Vier getalle")
assert fails(stdchecker.brackets, "For [sic] numbers", "Vier getalle")
assert fails(stdchecker.brackets, "For ]sic[ numbers", "Vier getalle")
assert passes(stdchecker.brackets, "{[(", "[({")
def test_compendiumconflicts():
"""tests compendiumconflicts"""
stdchecker = checks.StandardChecker()
assert fails(
stdchecker.compendiumconflicts,
"File not saved",
r"""#-#-#-#-# file1.po #-#-#-#-#\n
Leer nie gestoor gestoor nie\n
#-#-#-#-# file1.po #-#-#-#-#\n
Leer nie gestoor""",
)
def test_doublequoting():
"""tests double quotes"""
stdchecker = checks.StandardChecker()
assert fails(stdchecker.doublequoting, "Hot plate", '"Ipuleti" elishisa')
assert passes(stdchecker.doublequoting, '"Hot" plate', '"Ipuleti" elishisa')
assert fails(stdchecker.doublequoting, "'Hot' plate", '"Ipuleti" elishisa')
assert passes(stdchecker.doublequoting, '\\"Hot\\" plate', '\\"Ipuleti\\" elishisa')
# We don't want the filter to complain about "untranslated" quotes in xml attributes
frchecker = checks.StandardChecker(checks.CheckerConfig(targetlanguage="fr"))
assert passes(
frchecker.doublequoting,
'Click ',
'Clique ',
)
assert fails(frchecker.doublequoting, 'Do "this"', 'Do "this"')
assert passes(frchecker.doublequoting, 'Do "this"', "Do « this »")
assert fails(frchecker.doublequoting, 'Do "this"', "Do « this » « this »")
# This used to fail because we strip variables, and was left with an empty quotation that was not converted
assert passes(
frchecker.doublequoting, "Copying `%s' to `%s'", "Copie de « %s » vers « %s »"
)
vichecker = checks.StandardChecker(checks.CheckerConfig(targetlanguage="vi"))
assert passes(vichecker.doublequoting, 'Save "File"', "Lưu « Tập tin »")
# Had a small exception with such a case:
eschecker = checks.StandardChecker(checks.CheckerConfig(targetlanguage="es"))
assert passes(
eschecker.doublequoting,
"",
"",
)
def test_doublespacing():
"""tests double spacing"""
stdchecker = checks.StandardChecker()
assert passes(
stdchecker.doublespacing, "Sentence. Another sentence.", "Sin. 'n Ander sin."
)
assert passes(
stdchecker.doublespacing,
"Sentence. Another sentence.",
"Sin. No double spacing.",
)
assert fails(
stdchecker.doublespacing,
"Sentence. Another sentence.",
"Sin. Missing the double space.",
)
assert fails(
stdchecker.doublespacing,
"Sentence. Another sentence.",
"Sin. Uneeded double space in translation.",
)
ooochecker = checks.OpenOfficeChecker()
assert passes(
ooochecker.doublespacing, "Execute %PROGRAMNAME Calc", "Blah %PROGRAMNAME Calc"
)
assert passes(
ooochecker.doublespacing, "Execute %PROGRAMNAME Calc", "Blah % PROGRAMNAME Calc"
)
lochecker = checks.LibreOfficeChecker()
assert passes(
lochecker.doublespacing, "Execute %PROGRAMNAME Calc", "Blah %PROGRAMNAME Calc"
)
assert passes(
lochecker.doublespacing, "Execute %PROGRAMNAME Calc", "Blah % PROGRAMNAME Calc"
)
def test_doublewords():
"""tests doublewords"""
stdchecker = checks.StandardChecker()
assert passes(stdchecker.doublewords, "Save the rhino", "Save the rhino")
assert fails(stdchecker.doublewords, "Save the rhino", "Save the the rhino")
# Double variables are not an error
stdchecker = checks.StandardChecker(checks.CheckerConfig(varmatches=[("%", 1)]))
assert passes(stdchecker.doublewords, "%s %s installation", "tsenyo ya %s %s")
# Double XML tags are not an error
stdchecker = checks.StandardChecker()
assert passes(
stdchecker.doublewords,
"Line one نشانی درخواست مشخصا(به عنوان مثال The requested address specified a port (e.g.
line two",
"Lyn een
lyn twee",
)
# In some language certain double words are not errors
st_checker = checks.StandardChecker(checks.CheckerConfig(targetlanguage="st"))
assert passes(
st_checker.doublewords,
"Color to draw the name of a message you sent.",
"Mmala wa ho taka bitso la molaetsa oo o o rometseng.",
)
assert passes(st_checker.doublewords, "Ten men", "Banna ba ba leshome")
assert passes(st_checker.doublewords, "Give SARS the tax", "Lekgetho le le fe SARS")
def test_endpunc():
"""tests endpunc"""
stdchecker = checks.StandardChecker()
assert passes(stdchecker.endpunc, "Question?", "Correct?")
assert fails(stdchecker.endpunc, " Question?", "Wrong ?")
# Newlines must not mask end punctuation
assert fails(
stdchecker.endpunc,
"Exit change recording mode?\n\n",
"Phuma esimeni sekugucula kubhalisa.\n\n",
)
mozillachecker = checks.MozillaChecker()
assert passes(
mozillachecker.endpunc,
"Upgrades an existing $ProductShortName$ installation.",
"Ku antswisiwa ka ku nghenisiwa ka $ProductShortName$.",
)
# Real examples
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')",
)
assert fails(stdchecker.endpunc, "Question", "Wrong\u2026")
# Making sure singlequotes don't confuse things
assert passes(
stdchecker.endpunc,
"Pseudo-elements can't be negated '%1$S'.",
"Pseudo-elemente kan nie '%1$S' ontken word nie.",
)
stdchecker = checks.StandardChecker(checks.CheckerConfig(targetlanguage="km"))
assert passes(
stdchecker.endpunc,
"In this new version, there are some minor conversion improvements on complex style in Openoffice.org Writer.",
"នៅក្នុងកំណែថ្មីនេះ មានការកែសម្រួលមួយចំនួនតូចទាក់ទងនឹងការបំលែងពុម្ពអក្សរខ្មែរ ក្នុងកម្មវិធីការិយាល័យ ស្លឹករឹត ដែលមានប្រើប្រាស់រចនាប័ទ្មស្មុគស្មាញច្រើន\u00a0។",
)
stdchecker = checks.StandardChecker(checks.CheckerConfig(targetlanguage="zh"))
assert passes(
stdchecker.endpunc,
"To activate your account, follow this link:\n",
"要啟用戶口,請瀏覽這個鏈結:\n",
)
stdchecker = checks.StandardChecker(checks.CheckerConfig(targetlanguage="vi"))
assert passes(
stdchecker.endpunc,
"Do you want to delete the XX dialog?",
"Bạn có muốn xoá hộp thoại XX không?",
)
stdchecker = checks.StandardChecker(checks.CheckerConfig(targetlanguage="fr"))
assert passes(stdchecker.endpunc, "Header:", "En-tête :")
assert passes(stdchecker.endpunc, "Header:", "En-tête\u00a0:")
def test_endwhitespace():
"""tests endwhitespace"""
stdchecker = checks.StandardChecker()
assert passes(stdchecker.endwhitespace, "A setence.", "I'm correct.")
assert passes(stdchecker.endwhitespace, "A setence. ", "I'm correct. ")
assert fails(stdchecker.endwhitespace, "A setence. ", "'I'm incorrect.")
assert passes(
stdchecker.endwhitespace,
"Problem with something: %s\n",
"Probleem met iets: %s\n",
)
zh_checker = checks.StandardChecker(checks.CheckerConfig(targetlanguage="zh"))
# This should pass since the space is not needed in Chinese
assert passes(zh_checker.endwhitespace, "Init. Limit: ", "起始时间限制:")
def test_escapes():
"""tests escapes"""
stdchecker = checks.StandardChecker()
assert passes(stdchecker.escapes, r"""A sentence""", "I'm correct.")
assert passes(stdchecker.escapes, "A file\n", "'n Leer\n")
assert fails_serious(stdchecker.escapes, r"blah. A file", r"bleah.\n'n leer")
assert passes(stdchecker.escapes, r"A tab\t", r"'n Tab\t")
assert fails_serious(stdchecker.escapes, r"A tab\t", r"'n Tab")
assert passes(stdchecker.escapes, r"An escape escape \\", r"Escape escape \\")
assert fails_serious(stdchecker.escapes, r"An escape escape \\", "Escape escape")
assert passes(stdchecker.escapes, r"A double quote \"", r"Double quote \"")
assert fails_serious(stdchecker.escapes, r"A double quote \"", "Double quote")
# Escaped escapes
assert passes(stdchecker.escapes, "An escaped newline \\n", "Escaped newline \\n")
assert fails_serious(
stdchecker.escapes, "An escaped newline \\n", "Escaped newline \n"
)
# Real example
ooochecker = checks.OpenOfficeChecker()
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",
)
lochecker = checks.LibreOfficeChecker()
assert passes(
lochecker.escapes,
",\t44\t;\t59\t:\t58\t{Tab}\t9\t{space}\t32",
",\t44\t;\t59\t:\t58\t{Tab}\t9\t{space}\t32",
)
def test_newlines():
"""tests newlines"""
stdchecker = checks.StandardChecker()
assert passes(stdchecker.newlines, "Nothing to see", "Niks te sien")
assert passes(stdchecker.newlines, "Correct\n", "Korrek\n")
assert passes(stdchecker.newlines, "Correct\r", "Korrek\r")
assert passes(stdchecker.newlines, "Correct\r\n", "Korrek\r\n")
assert fails(stdchecker.newlines, "A file\n", "'n Leer")
assert fails(stdchecker.newlines, "A file", "'n Leer\n")
assert fails(stdchecker.newlines, "A file\r", "'n Leer")
assert fails(stdchecker.newlines, "A file", "'n Leer\r")
assert fails(stdchecker.newlines, "A file\n", "'n Leer\r\n")
assert fails(stdchecker.newlines, "A file\r\n", "'n Leer\n")
assert fails(stdchecker.newlines, "blah.\nA file", "bleah. 'n leer")
# msgfmt errors
assert fails(stdchecker.newlines, "One two\n", "Een\ntwee")
assert fails(stdchecker.newlines, "\nOne two", "Een\ntwee")
# Real example
ooochecker = checks.OpenOfficeChecker()
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?",
)
lochecker = checks.LibreOfficeChecker()
assert fails(
lochecker.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?",
)
def test_tabs():
"""tests tabs"""
stdchecker = checks.StandardChecker()
assert passes(stdchecker.tabs, "Nothing to see", "Niks te sien")
assert passes(stdchecker.tabs, "Correct\t", "Korrek\t")
assert passes(stdchecker.tabs, "Correct\tAA", "Korrek\tAA")
assert fails_serious(stdchecker.tabs, "A file\t", "'n Leer")
assert fails_serious(stdchecker.tabs, "A file", "'n Leer\t")
ooochecker = checks.OpenOfficeChecker()
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",
)
lochecker = checks.LibreOfficeChecker()
assert passes(
lochecker.tabs,
",\t44\t;\t59\t:\t58\t{Tab}\t9\t{space}\t32",
",\t44\t;\t59\t:\t58\t{Tab}\t9\t{space}\t32",
)
def test_filepaths():
"""tests filepaths"""
stdchecker = checks.StandardChecker()
assert passes(
stdchecker.filepaths,
"%s to the file /etc/hosts on your system.",
"%s na die leer /etc/hosts op jou systeem.",
)
assert fails(
stdchecker.filepaths,
"%s to the file /etc/hosts on your system.",
"%s na die leer /etc/gasheer op jou systeem.",
)
assert passes(
stdchecker.filepaths, "Text with
line break", "Teks met
lynbreuk"
)
def test_kdecomments():
"""tests kdecomments"""
stdchecker = checks.StandardChecker()
assert passes(
stdchecker.kdecomments,
r"""_: I am a comment\n
A string to translate""",
"'n String om te vertaal",
)
assert fails(
stdchecker.kdecomments,
r"""_: I am a comment\n
A string to translate""",
r"""_: Ek is 'n commment\n
'n String om te vertaal""",
)
assert fails(
stdchecker.kdecomments,
"""_: I am a comment\\n\n""",
"""_: I am a comment\\n\n""",
)
def test_long():
"""tests long messages"""
stdchecker = checks.StandardChecker()
assert passes(stdchecker.long, "I am normal", "Ek is ook normaal")
assert fails(
stdchecker.long,
"Short.",
"Kort.......................................................................................",
)
assert fails(stdchecker.long, "a", "bc")
@mark.xfail(reason="FIXME: All fails() tests are not working")
def test_musttranslatewords():
"""tests stopwords"""
stdchecker = checks.StandardChecker(checks.CheckerConfig(musttranslatewords=[]))
assert passes(
stdchecker.musttranslatewords,
"This uses Mozilla of course",
"hierdie gebruik le mozille natuurlik",
)
stdchecker = checks.StandardChecker(
checks.CheckerConfig(musttranslatewords=["Mozilla"])
)
assert passes(
stdchecker.musttranslatewords,
"This uses Mozilla of course",
"hierdie gebruik le mozille natuurlik",
)
assert fails(
stdchecker.musttranslatewords,
"This uses Mozilla of course",
"hierdie gebruik Mozilla natuurlik",
)
assert passes(
stdchecker.musttranslatewords,
"This uses Mozilla. Don't you?",
"hierdie gebruik le mozille soos jy",
)
assert fails(
stdchecker.musttranslatewords,
"This uses Mozilla. Don't you?",
"hierdie gebruik Mozilla soos jy",
)
# should always pass if there are no stopwords in the original
assert passes(
stdchecker.musttranslatewords,
"This uses something else. Don't you?",
"hierdie gebruik Mozilla soos jy",
)
# check that we can find words surrounded by punctuation
assert passes(
stdchecker.musttranslatewords,
"Click 'Mozilla' button",
"Kliek 'Motzille' knoppie",
)
assert fails(
stdchecker.musttranslatewords,
"Click 'Mozilla' button",
"Kliek 'Mozilla' knoppie",
)
assert passes(
stdchecker.musttranslatewords,
'Click "Mozilla" button',
'Kliek "Motzille" knoppie',
)
assert fails(
stdchecker.musttranslatewords,
'Click "Mozilla" button',
'Kliek "Mozilla" knoppie',
)
assert fails(
stdchecker.musttranslatewords,
'Click "Mozilla" button',
"Kliek «Mozilla» knoppie",
)
assert passes(
stdchecker.musttranslatewords,
"Click (Mozilla) button",
"Kliek (Motzille) knoppie",
)
assert fails(
stdchecker.musttranslatewords,
"Click (Mozilla) button",
"Kliek (Mozilla) knoppie",
)
assert passes(stdchecker.musttranslatewords, "Click Mozilla!", "Kliek Motzille!")
assert fails(stdchecker.musttranslatewords, "Click Mozilla!", "Kliek Mozilla!")
## We need to define more word separators to allow us to find those hidden untranslated items
# assert fails(stdchecker.musttranslatewords, "Click OK", "Blah we-OK")
# Don't get confused when variables are the same as a musttranslate word
stdchecker = checks.StandardChecker(
checks.CheckerConfig(
varmatches=[
("%", None),
],
musttranslatewords=["OK"],
)
)
assert passes(
stdchecker.musttranslatewords, "Click %OK to start", "Kliek %OK om te begin"
)
# Unicode
assert fails(stdchecker.musttranslatewords, "Click OK", "Kiḽikani OK")
def test_notranslatewords():
"""tests stopwords"""
stdchecker = checks.StandardChecker(checks.CheckerConfig(notranslatewords=[]))
assert passes(
stdchecker.notranslatewords,
"This uses Mozilla of course",
"hierdie gebruik le mozille natuurlik",
)
stdchecker = checks.StandardChecker(
checks.CheckerConfig(notranslatewords=["Mozilla", "Opera"])
)
assert fails(
stdchecker.notranslatewords,
"This uses Mozilla of course",
"hierdie gebruik le mozille natuurlik",
)
assert passes(
stdchecker.notranslatewords,
"This uses Mozilla of course",
"hierdie gebruik Mozilla natuurlik",
)
assert fails(
stdchecker.notranslatewords,
"This uses Mozilla. Don't you?",
"hierdie gebruik le mozille soos jy",
)
assert passes(
stdchecker.notranslatewords,
"This uses Mozilla. Don't you?",
"hierdie gebruik Mozilla soos jy",
)
# should always pass if there are no stopwords in the original
assert passes(
stdchecker.notranslatewords,
"This uses something else. Don't you?",
"hierdie gebruik Mozilla soos jy",
)
# Cope with commas
assert passes(
stdchecker.notranslatewords,
"using Mozilla Task Manager",
"šomiša Selaola Mošomo sa Mozilla, gomme",
)
# Find words even if they are embedded in punctuation
assert fails(
stdchecker.notranslatewords,
"Click 'Mozilla' button",
"Kliek 'Motzille' knoppie",
)
assert passes(
stdchecker.notranslatewords, "Click 'Mozilla' button", "Kliek 'Mozilla' knoppie"
)
assert fails(stdchecker.notranslatewords, "Click Mozilla!", "Kliek Motzille!")
assert passes(stdchecker.notranslatewords, "Click Mozilla!", "Kliek Mozilla!")
assert fails(
stdchecker.notranslatewords,
"Searches (From Opera)",
"adosako (kusukela ku- Ophera)",
)
stdchecker = checks.StandardChecker(
checks.CheckerConfig(notranslatewords=["Sun", "NeXT"])
)
assert fails(
stdchecker.notranslatewords, "Sun/NeXT Audio", "Odio dza Ḓuvha/TeVHELAHO"
)
assert passes(stdchecker.notranslatewords, "Sun/NeXT Audio", "Odio dza Sun/NeXT")
stdchecker = checks.StandardChecker(
checks.CheckerConfig(notranslatewords=["sendmail"])
)
assert fails(
stdchecker.notranslatewords,
"because 'sendmail' could",
"ngauri 'rumelameiḽi' a yo",
)
assert passes(
stdchecker.notranslatewords,
"because 'sendmail' could",
"ngauri 'sendmail' a yo",
)
stdchecker = checks.StandardChecker(checks.CheckerConfig(notranslatewords=["Base"]))
assert fails(
stdchecker.notranslatewords,
" - %PRODUCTNAME Base: Relation design",
" - %PRODUCTNAME Sisekelo: Umsiko wekuhlobana",
)
stdchecker = checks.StandardChecker(
checks.CheckerConfig(notranslatewords=["Writer"])
)
assert fails(
stdchecker.notranslatewords,
"&[ProductName] Writer/Web",
"&[ProductName] Umbhali/iWebhu",
)
# Unicode - different decompositions
stdchecker = checks.StandardChecker(
checks.CheckerConfig(notranslatewords=["\u1e3cike"])
)
assert passes(
stdchecker.notranslatewords, "You \u1e3cike me", "Ek \u004c\u032dike jou"
)
def test_numbers():
"""test numbers"""
stdchecker = checks.StandardChecker()
assert passes(
stdchecker.numbers,
"Netscape 4 was not as good as Netscape 7.",
"Netscape 4 was nie so goed soos Netscape 7 nie.",
)
# Check for correct detection of degree. Also check that we aren't getting confused with 1 and 2 byte UTF-8 characters
assert fails(stdchecker.numbers, "180° turn", "180 turn")
assert passes(stdchecker.numbers, "180° turn", "180° turn")
assert fails(stdchecker.numbers, "180° turn", "360 turn")
assert fails(stdchecker.numbers, "180° turn", "360° turn")
assert passes(stdchecker.numbers, "180~ turn", "180 turn")
assert passes(stdchecker.numbers, "180¶ turn", "180 turn")
# Numbers with multiple decimal points
assert passes(stdchecker.numbers, "12.34.56", "12.34.56")
assert fails(stdchecker.numbers, "12.34.56", "98.76.54")
# Currency
# FIXME we should probably be able to handle currency checking with locale inteligence
assert passes(stdchecker.numbers, "R57.60", "R57.60")
# FIXME - again locale intelligence should allow us to use other decimal seperators
assert fails(stdchecker.numbers, "R57.60", "R57,60")
assert fails(stdchecker.numbers, "1,000.00", "1 000,00")
# You should be able to reorder numbers
assert passes(
stdchecker.numbers,
"40-bit RC2 encryption with RSA and an MD5",
"Umbhalo ocashile i-RC2 onamabhithi angu-40 one-RSA ne-MD5",
)
# Don't fail the numbers check if the entry is a dialogsize entry
mozillachecker = checks.MozillaChecker()
assert passes(mozillachecker.numbers, "width: 12em;", "width: 20em;")
def test_persian_numbers():
"""test non latin numbers for Persian (RTL)"""
fa_checker = checks.StandardChecker(checks.CheckerConfig(targetlanguage="fa"))
assert passes(fa_checker.numbers, "&حرکت آهسته (۰.۵×)", "&Slow Motion (0.5×)")
assert passes(fa_checker.numbers, "&حرکت آهسته (0.5×)", "&Slow Motion (0.5×)")
assert passes(
fa_checker.numbers, '', ''
)
assert passes(
fa_checker.numbers, '', ''
)
assert passes(
fa_checker.numbers, "دسترسی مسدود شده است (۴۰۳)", "Access denied (403)"
)
assert passes(fa_checker.numbers, "کتاب موزیلا، ۱۵:۱", "The Book of Mozilla, 15:1")
assert passes(
fa_checker.numbers,
"mozilla.org:80
برای درگاه ۸۰ بر روی mozilla.org) ازدرگاهی استفاده می کندکه در حالت عادی به عنوان کاربردی به غیر از وبگردی استفاده می شود.مرورگر برای حفاظت و امنیت شما این درخواست را لغوکرد.mozilla.org:80
for port 80 on mozilla.org) normally used for purposes other than Web browsing. The browser has canceled the request for your protection and security.