-- 
John Dennis <jden...@redhat.com>

Looking to carve out IT costs?
www.redhat.com/carveoutcosts/
---
 Makefile                       |    1 +
 tests/test_ipalib/test_text.py |   88 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 89 insertions(+), 0 deletions(-)

diff --git a/Makefile b/Makefile
index b881a08..01ef653 100644
--- a/Makefile
+++ b/Makefile
@@ -82,6 +82,7 @@ radius-install: radius install
 	done
 
 test:
+	cd install/po && $(MAKE) test_lang
 	./make-test
 
 release-update:
diff --git a/tests/test_ipalib/test_text.py b/tests/test_ipalib/test_text.py
index ee7a1b3..580c68f 100644
--- a/tests/test_ipalib/test_text.py
+++ b/tests/test_ipalib/test_text.py
@@ -21,14 +21,102 @@
 Test the `ipalib.text` module.
 """
 
+import re
 from tests.util import raises, assert_equal
 from ipalib.request import context
+from ipalib import request
 from ipalib import text
 
 singular = '%(count)d goose makes 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():
     f = text.create_translation
     key = ('foo', None)
-- 
1.6.6.1

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to