mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2024-12-24 16:10:02 -06:00
Add gettext translation test using test language.
This commit is contained in:
parent
45acd086f5
commit
5b9d1ee180
1
Makefile
1
Makefile
@ -84,6 +84,7 @@ radius-install: radius install
|
|||||||
done
|
done
|
||||||
|
|
||||||
test:
|
test:
|
||||||
|
cd install/po && $(MAKE) test_lang
|
||||||
./make-test
|
./make-test
|
||||||
|
|
||||||
release-update:
|
release-update:
|
||||||
|
@ -21,14 +21,102 @@
|
|||||||
Test the `ipalib.text` module.
|
Test the `ipalib.text` module.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import re
|
||||||
from tests.util import raises, assert_equal
|
from tests.util import raises, assert_equal
|
||||||
from ipalib.request import context
|
from ipalib.request import context
|
||||||
|
from ipalib import request
|
||||||
from ipalib import text
|
from ipalib import text
|
||||||
|
|
||||||
singular = '%(count)d goose makes a %(dish)s'
|
singular = '%(count)d goose makes a %(dish)s'
|
||||||
plural = '%(count)d geese make a %(dish)s'
|
plural = '%(count)d geese make a %(dish)s'
|
||||||
|
|
||||||
|
|
||||||
|
# Unicode right pointing arrow
|
||||||
|
prefix = u'\u2192' # utf-8 == '\xe2\x86\x92'
|
||||||
|
# Unicode left pointing arrow
|
||||||
|
suffix = u'\u2190' # utf-8 == '\xe2\x86\x90'
|
||||||
|
|
||||||
|
def get_msgid(po_file):
|
||||||
|
'Get the first non-empty msgid from the po file'
|
||||||
|
|
||||||
|
msgid_re = re.compile(r'^\s*msgid\s+"(.+)"\s*$')
|
||||||
|
f = open(po_file)
|
||||||
|
for line in f.readlines():
|
||||||
|
match = msgid_re.search(line)
|
||||||
|
if match:
|
||||||
|
msgid = match.group(1)
|
||||||
|
f.close()
|
||||||
|
return msgid
|
||||||
|
f.close()
|
||||||
|
raise ValueError('No msgid found in %s' % po_file)
|
||||||
|
|
||||||
|
def test_gettext():
|
||||||
|
'''
|
||||||
|
Test gettext translation
|
||||||
|
|
||||||
|
We test our translations by taking the original untranslated
|
||||||
|
string (e.g. msgid) and prepend a prefix character and then append
|
||||||
|
a suffix character. The test consists of asserting that the first
|
||||||
|
character in the translated string is the prefix, the last
|
||||||
|
character in the translated string is the suffix and the
|
||||||
|
everything between the first and last character exactly matches
|
||||||
|
the original msgid.
|
||||||
|
|
||||||
|
We use unicode characters not in the ascii character set for the
|
||||||
|
prefix and suffix to enhance the test. To make reading the
|
||||||
|
translated string easier the prefix is the unicode right pointing
|
||||||
|
arrow and the suffix left pointing arrow, thus the translated
|
||||||
|
string looks like the original string enclosed in arrows. In ASCII
|
||||||
|
art the string "foo" would render as: "-->foo<--"
|
||||||
|
'''
|
||||||
|
|
||||||
|
localedir='../../install/po/test_locale'
|
||||||
|
test_file='../../install/po/test.po'
|
||||||
|
|
||||||
|
# The test installs the test message catalog under the en_US
|
||||||
|
# (e.g. U.S. English) language. It would be nice to use a dummy
|
||||||
|
# language not associated with any real language, but the
|
||||||
|
# setlocale function demands the locale be a valid known locale,
|
||||||
|
# U.S. English is a reasonable choice.
|
||||||
|
request.set_languages('en_US.UTF-8')
|
||||||
|
|
||||||
|
# Tell gettext that our domain is 'ipa', that locale_dir is
|
||||||
|
# 'test_locale' (i.e. where to look for the message catalog)
|
||||||
|
_ = text.GettextFactory('ipa', localedir)
|
||||||
|
|
||||||
|
# We need a translatable string to test with, read one from the
|
||||||
|
# test po file
|
||||||
|
msgid = get_msgid(test_file)
|
||||||
|
|
||||||
|
# Get the localized instance of the msgid, it should be a Gettext
|
||||||
|
# instance.
|
||||||
|
localized = _(msgid)
|
||||||
|
assert(isinstance(localized, text.Gettext))
|
||||||
|
|
||||||
|
# Get the translated string from the Gettext instance by invoking
|
||||||
|
# unicode on it.
|
||||||
|
translated = unicode(localized)
|
||||||
|
|
||||||
|
# Perform the verifications on the translated string.
|
||||||
|
|
||||||
|
# Verify the first character is the test prefix
|
||||||
|
assert(translated[0] == prefix)
|
||||||
|
|
||||||
|
# Verify the last character is the test suffix
|
||||||
|
assert(translated[-1] == suffix)
|
||||||
|
|
||||||
|
# Verify everything between the first and last character is the
|
||||||
|
# original untranslated string
|
||||||
|
assert(translated[1:-1] == msgid)
|
||||||
|
|
||||||
|
# Reset the language and assure we don't get the test values
|
||||||
|
context.__dict__.clear()
|
||||||
|
request.set_languages('fr_FR')
|
||||||
|
translated = unicode(localized)
|
||||||
|
|
||||||
|
assert(translated[0] != prefix)
|
||||||
|
assert(translated[-1] != suffix)
|
||||||
|
|
||||||
def test_create_translation():
|
def test_create_translation():
|
||||||
f = text.create_translation
|
f = text.create_translation
|
||||||
key = ('foo', None)
|
key = ('foo', None)
|
||||||
|
Loading…
Reference in New Issue
Block a user