Source code for transliterate.tests.test_transliterate

# -*- coding: utf-8 -*-

__title__ = 'transliterate.tests.test_transliterate'
__author__ = 'Artur Barseghyan'
__copyright__ = '2013-2015 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('TransliterateTest',)

import unittest

from transliterate.discover import autodiscover
from transliterate.conf import (
    set_setting, get_setting, reset_to_defaults_settings
)
from transliterate import defaults
from transliterate import (
    get_available_language_codes, translit, detect_language, slugify
)
from transliterate import get_available_language_packs
from transliterate.decorators import (
    transliterate_function, transliterate_method
)
from transliterate.base import TranslitLanguagePack, registry

from transliterate.contrib.apps.translipsum import TranslipsumGenerator

from transliterate.tests.helpers import print_info
from transliterate.tests import data

[docs]class TransliterateTest(unittest.TestCase): """ Tests of ``transliterate.utils.translit``. """
[docs] def setUp(self): self.latin_text = data.latin_text self.armenian_text = data.armenian_text self.cyrillic_text = data.cyrillic_text self.ukrainian_cyrillic_text = data.ukrainian_cyrillic_text self.bulgarian_cyrillic_text = data.bulgarian_cyrillic_text self.georgian_text = data.georgian_text self.greek_text = data.greek_text self.hebrew_text = data.hebrew_text self.mongolian_cyrillic_text = data.mongolian_cyrillic_text
#reset_to_defaults_settings() @print_info def test_01_get_available_language_codes(self): """ Test ``autodiscover`` and ``get_available_language_codes``. """ res = get_available_language_codes() res.sort() c = ['el', 'hy', 'ka', 'ru', 'uk', 'bg','mk', 'mn'] #'he', c.sort() self.assertEqual(res, c) return res @print_info def test_02_translit_latin_to_armenian(self): """ Test transliteration from Latin to Armenian. """ res = translit(self.latin_text, 'hy') self.assertEqual(res, self.armenian_text) return res @print_info def test_03_translit_latin_to_georgian(self): """ Test transliteration from Latin to Georgian. """ res = translit(self.latin_text, 'ka') self.assertEqual(res, self.georgian_text) return res @print_info def test_04_translit_latin_to_greek(self): """ Test transliteration from Latin to Greek. """ res = translit(self.latin_text, 'el') self.assertEqual(res, self.greek_text) return res @print_info def __test_05_translit_latin_to_hebrew(self): """ Test transliteration from Latin to Hebrew. """ res = translit(self.latin_text, 'he') self.assertEqual(res, self.hebrew_text) return res @print_info def test_06_translit_latin_to_cyrillic(self): """ Test transliteration from Latin to Cyrillic. """ res = translit(self.latin_text, 'ru') self.assertEqual(res, self.cyrillic_text) return res @print_info def test_06_translit_latin_to_ukrainian_cyrillic(self): """ Test transliteration from Latin to Ukrainian Cyrillic. """ res = translit(self.latin_text, 'uk') self.assertEqual(res, self.ukrainian_cyrillic_text) return res @print_info def test_06_translit_latin_to_bulgarian_cyrillic(self): """ Test transliteration from Latin to Bulgarian Cyrillic. """ res = translit(self.latin_text, 'bg') self.assertEqual(res, self.bulgarian_cyrillic_text) return res @print_info def test_06_translit_latin_to_mongolian_cyrillic(self): """ Test transliteration from Latin to Mongolian Cyrillic. """ res = translit(self.latin_text, 'mn') self.assertEqual(res, self.mongolian_cyrillic_text) return res @print_info def test_07_translit_armenian_to_latin(self): """ Test transliteration from Armenian to Latin. """ res = translit(self.armenian_text, 'hy', reversed=True) self.assertEqual(res, self.latin_text) return res @print_info def test_08_translit_georgian_to_latin(self): """ Test transliteration from Georgian to Latin. """ res = translit(self.georgian_text, 'ka', reversed=True) self.assertEqual(res, self.latin_text) return res @print_info def test_09_translit_greek_to_latin(self): """ Test transliteration from Greek to Latin. """ res = translit(self.greek_text, 'el', reversed=True) self.assertEqual(res, self.latin_text) return res @print_info def __test_10_translit_hebrew_to_latin(self): """ Test transliteration from Hebrew to Latin. """ res = translit(self.hebrew_text, 'he', reversed=True) self.assertEqual(res, self.latin_text) return res @print_info def test_11_translit_cyrillic_to_latin(self): """ Test transliteration from Cyrillic to Latin. """ res = translit(self.cyrillic_text, 'ru', reversed=True) self.assertEqual(res, self.latin_text) return res @print_info def test_11_translit_ukrainian_cyrillic_to_latin(self): """ Test transliteration from Ukrainian Cyrillic to Latin. """ res = translit(self.ukrainian_cyrillic_text, 'uk', reversed=True) self.assertEqual(res, self.latin_text) return res @print_info def test_11_translit_bulgarian_cyrillic_to_latin(self): """ Test transliteration from Bulgarian Cyrillic to Latin. """ res = translit(self.bulgarian_cyrillic_text, 'bg', reversed=True) self.assertEqual(res, self.latin_text) return res @print_info def test_11_translit_mongolian_cyrillic_to_latin(self): """ Test transliteration from Mongolian Cyrillic to Latin. """ res = translit(self.mongolian_cyrillic_text, 'mn', reversed=True) self.assertEqual(res, self.latin_text) return res @print_info def test_12_function_decorator(self): """ Testing the function decorator from Latin to Armenian. """ @transliterate_function(language_code='hy') def decorator_test_armenian(text): return text res = decorator_test_armenian(self.latin_text) self.assertEqual(res, self.armenian_text) @print_info def test_13_method_decorator(self): """ Testing the method decorator from Latin to Cyrillic. """ class DecoratorTest(object): @transliterate_method(language_code='ru') def decorator_test_russian(self, text): return text res = DecoratorTest().decorator_test_russian(self.latin_text) self.assertEqual(res, self.cyrillic_text) return res @print_info def test_14_function_decorator(self): """ Testing the function decorator (reversed) from Armenian to Latin. """ @transliterate_function(language_code='hy', reversed=True) def decorator_test_armenian_reversed(text): return text res = decorator_test_armenian_reversed(self.armenian_text) self.assertEqual(res, self.latin_text) return res @print_info def test_15_register_custom_language_pack(self): """ Testing registering of a custom language pack. """ class ExampleLanguagePack(TranslitLanguagePack): """ Example language pack. """ language_code = "example" language_name = "Example" mapping = data.test_15_register_custom_language_pack_mapping registry.register(ExampleLanguagePack) assert 'example' in get_available_language_codes() res = translit(self.latin_text, 'example') self.assertEqual(res, 'Lor5m 9psum 4olor s9t 1m5t') return res @print_info def test_16_translipsum_generator_armenian(self): """ Testing the translipsum generator. Generating lorem ipsum paragraphs in Armenian. """ g_am = TranslipsumGenerator(language_code='hy') res = g_am.generate_paragraph() assert res return res @print_info def test_17_translipsum_generator_georgian(self): """ Testing the translipsum generator. Generating lorem ipsum sentence in Georgian. """ g_ge = TranslipsumGenerator(language_code='ka') res = g_ge.generate_sentence() assert res return res @print_info def test_18_translipsum_generator_greek(self): """ Testing the translipsum generator. Generating lorem ipsum sentence in Greek. """ g_el = TranslipsumGenerator(language_code='el') res = g_el.generate_sentence() assert res return res @print_info def __test_19_translipsum_generator_hebrew(self): """ Testing the translipsum generator. Generating lorem ipsum sentence in Hebrew. """ g_he = TranslipsumGenerator(language_code='he') res = g_he.generate_sentence() assert res return res @print_info def test_20_translipsum_generator_cyrillic(self): """ Testing the translipsum generator. Generating lorem ipsum sentence in Cyrillic. """ g_ru = TranslipsumGenerator(language_code='ru') res = g_ru.generate_sentence() assert res return res @print_info def test_20_translipsum_generator_ukrainian_cyrillic(self): """ Testing the translipsum generator. Generating lorem ipsum sentence in Ukrainian Cyrillic. """ g_uk = TranslipsumGenerator(language_code='uk') res = g_uk.generate_sentence() assert res return res @print_info def test_20_translipsum_generator_bulgarian_cyrillic(self): """ Testing the translipsum generator. Generating lorem ipsum sentence in Bulgarian Cyrillic. """ g_bg = TranslipsumGenerator(language_code='bg') res = g_bg.generate_sentence() assert res return res @print_info def test_20_translipsum_generator_mongolian_cyrillic(self): """ Testing the translipsum generator. Generating lorem ipsum sentence in Mongolian Cyrillic. """ g_bg = TranslipsumGenerator(language_code='mn') res = g_bg.generate_sentence() assert res return res @print_info def test_21_language_detection_armenian(self): """ Testing language detection. Detecting Amenian. """ res = detect_language(self.armenian_text) self.assertEqual(res, 'hy') return res @print_info def test_22_language_detection_georgian(self): """ Testing language detection. Detecting Georgian. """ res = detect_language(self.georgian_text) self.assertEqual(res, 'ka') return res @print_info def test_23_language_detection_greek(self): """ Testing language detection. Detecting Greek. """ #set_setting('DEBUG', True) res = detect_language(self.greek_text) #reset_to_defaults_settings() self.assertEqual(res, 'el') return res @print_info def __test_24_language_detection_hebrew(self): """ Testing language detection. Detecting Hebrew. """ res = detect_language(self.hebrew_text) self.assertEqual(res, 'he') return res @print_info def test_25_language_detection_cyrillic(self): """ Testing language detection. Detecting Russian (Cyrillic). """ res = detect_language(self.cyrillic_text) self.assertEqual(res, 'ru') return res @print_info def test_25_false_language_detection_cyrillic(self): """ Testing language detection. Detecting is not Russian (Cyrillic). """ res = detect_language(self.latin_text) self.assertNotEqual(res, 'ru') return res @print_info def __test_25_language_detection_ukrainian_cyrillic(self): """ Testing language detection. Detecting Ukrainian (Cyrillic). """ res = detect_language(self.ukrainian_cyrillic_text) self.assertEqual(res, 'uk') return res @print_info def __test_25_language_detection_bulgarian_cyrillic(self): """ Testing language detection. Detecting Bulgarian (Cyrillic). """ res = detect_language(self.bulgarian_cyrillic_text) self.assertEqual(res, 'bg') return res @print_info def __test_25_language_detection_mongolian_cyrillic(self): """ Testing language detection. Detecting Mongolian (Cyrillic). """ res = detect_language(self.mongolian_cyrillic_text) self.assertEqual(res, 'mn') return res @print_info def test_26_slugify_armenian(self): """ Testing slugify from Armenian. """ res = slugify(self.armenian_text) self.assertEqual(res, 'lorem-ipsum-dolor-sit-amet') return res @print_info def test_27_slugify_georgian(self): """ Testing slugify from Georgian. """ res = slugify(self.georgian_text) self.assertEqual(res, 'lorem-ipsum-dolor-sit-amet') return res @print_info def test_28_slugify_greek(self): """ Testing slugify from Greek. """ res = slugify(self.greek_text) self.assertEqual(res, 'lorem-ipsum-dolor-sit-amet') return res @print_info def __test_29_slugify_hebrew(self): """ Testing slugify from Hebrew. """ res = slugify(self.hebrew_text) self.assertEqual(res, 'lorem-ipsum-dolor-sit-amet') return res @print_info def test_30_slugify_cyrillic(self): """ Testing slugify from Cyrillic. """ res = slugify(self.cyrillic_text) self.assertEqual(res, 'lorem-ipsum-dolor-sit-amet') return res @print_info def test_30_slugify_ukrainian_cyrillic(self): """ Testing slugify from Ukrainian Cyrillic. """ res = slugify(self.ukrainian_cyrillic_text, language_code='uk') self.assertEqual(res, 'lorem-ipsum-dolor-sit-amet') return res @print_info def test_30_slugify_bulgarian_cyrillic(self): """ Testing slugify from Bulgarian Cyrillic. """ res = slugify(self.bulgarian_cyrillic_text, language_code='bg') self.assertEqual(res, 'lorem-ipsum-dolor-sit-amet') return res @print_info def test_30_slugify_mongolian_cyrillic(self): """ Testing slugify from Mongolian Cyrillic. """ res = slugify(self.mongolian_cyrillic_text, language_code='mn') self.assertEqual(res, 'lorem-ipsum-dolor-sit-amet') return res @print_info def test_31_override_settings(self): """ Testing settings override. """ def override_settings(): return get_setting('LANGUAGE_DETECTION_MAX_NUM_KEYWORDS') self.assertEqual(defaults.LANGUAGE_DETECTION_MAX_NUM_KEYWORDS, override_settings()) set_setting('LANGUAGE_DETECTION_MAX_NUM_KEYWORDS', 10) self.assertEqual(10, override_settings()) return override_settings() @print_info def test_32_auto_translit_reversed(self): """ Test automatic reversed translit (from target script to source script) for Armenian, Georgian, Greek and Russian (Cyrillic). """ res = [] texts = [ self.armenian_text, self.georgian_text, self.greek_text, #self.hebrew_text, self.cyrillic_text ] for text in texts: r = translit(text, reversed=True) self.assertEqual(r, self.latin_text) res.append(r) return res @print_info def test_33_register_unregister(self): """ Testing register/unregister. """ from transliterate.contrib.languages.hy.translit_language_pack import ( ArmenianLanguagePack ) class A(TranslitLanguagePack): language_code = "ru" language_name = "Example" mapping = data.test_33_register_unregister_mapping # Since key `ru` already exists in the registry it can't be replaced # (without force-register). res = registry.register(A) self.assertTrue(not res) # Now with force-register it can. res = registry.register(A, force=True) self.assertTrue(res) # Once we have it there and it's forced, we can't register another. res = registry.register(A, force=True) self.assertTrue(not res) # Unregister non-forced language pack. res = registry.unregister(ArmenianLanguagePack) self.assertTrue( res and not ArmenianLanguagePack.language_code in get_available_language_codes() ) res = registry.unregister(A) self.assertTrue( not res and A.language_code in get_available_language_codes() ) @print_info def __test_34_latin_to_latin(self): class LatinToLatinLanguagePack(TranslitLanguagePack): """ Custom language pack which gets rid of accented characters in Greek but leaves other characters intact. """ language_code = "l2l" language_name = "Latin to Latin" mapping = data.test_34_latin_to_latin_mapping characters = data.test_34_latin_to_latin_characters reversed_characters = \ data.test_34_latin_to_latin_reversed_characters res = registry.register(LatinToLatinLanguagePack) self.assertTrue(res) text = data.test_34_latin_to_latin_text pack = LatinToLatinLanguagePack() res = pack.translit(text, strict=True, fail_silently=False) @print_info def __test_29_mappings(self): """ Testing mappings. """ for language_pack in get_available_language_packs(): print_('Testing language ' 'pack {0} {1}'.format(language_pack.language_code, language_pack.language_name)) print_('Reversed test:') for letter in language_pack.mapping[1]: print_(letter, ' --> ', translit(letter, language_pack.language_code, reversed=True)) print_('Normal test:') for letter in language_pack.mapping[0]: print_(letter, ' --> ', translit(letter, language_pack.language_code))
if __name__ == '__main__': unittest.main()