Cleaned up i18n regression tests

This commit is contained in:
Claude Paroz 2012-10-22 14:45:41 +02:00
parent 58cc3e8484
commit e70170c2cb
1 changed files with 117 additions and 139 deletions

View File

@ -23,7 +23,7 @@ from django.utils import six
from django.utils.six import PY3 from django.utils.six import PY3
from django.utils.translation import (ugettext, ugettext_lazy, activate, from django.utils.translation import (ugettext, ugettext_lazy, activate,
deactivate, gettext_lazy, pgettext, npgettext, to_locale, deactivate, gettext_lazy, pgettext, npgettext, to_locale,
get_language_info, get_language, get_language_from_request) get_language_info, get_language, get_language_from_request, trans_real)
from .commands.tests import can_run_extraction_tests, can_run_compilation_tests from .commands.tests import can_run_extraction_tests, can_run_compilation_tests
@ -45,6 +45,9 @@ from .patterns.tests import (URLRedirectWithoutTrailingSlashTests,
here = os.path.dirname(os.path.abspath(__file__)) here = os.path.dirname(os.path.abspath(__file__))
extended_locale_paths = settings.LOCALE_PATHS + (
os.path.join(here, 'other', 'locale'),
)
class TranslationTests(TestCase): class TranslationTests(TestCase):
@ -86,139 +89,129 @@ class TranslationTests(TestCase):
s2 = pickle.loads(pickle.dumps(s1)) s2 = pickle.loads(pickle.dumps(s1))
self.assertEqual(six.text_type(s2), "test") self.assertEqual(six.text_type(s2), "test")
@override_settings(LOCALE_PATHS=extended_locale_paths)
def test_pgettext(self): def test_pgettext(self):
# Reset translation catalog to include other/locale/de trans_real._active = local()
extended_locale_paths = settings.LOCALE_PATHS + ( trans_real._translations = {}
os.path.join(here, 'other', 'locale'), with translation.override('de'):
) self.assertEqual(pgettext("unexisting", "May"), "May")
with self.settings(LOCALE_PATHS=extended_locale_paths): self.assertEqual(pgettext("month name", "May"), "Mai")
from django.utils.translation import trans_real self.assertEqual(pgettext("verb", "May"), "Kann")
trans_real._active = local() self.assertEqual(npgettext("search", "%d result", "%d results", 4) % 4, "4 Resultate")
trans_real._translations = {}
with translation.override('de'):
self.assertEqual(pgettext("unexisting", "May"), "May")
self.assertEqual(pgettext("month name", "May"), "Mai")
self.assertEqual(pgettext("verb", "May"), "Kann")
self.assertEqual(npgettext("search", "%d result", "%d results", 4) % 4, "4 Resultate")
@override_settings(LOCALE_PATHS=extended_locale_paths)
def test_template_tags_pgettext(self): def test_template_tags_pgettext(self):
""" """
Ensure that message contexts are taken into account the {% trans %} and Ensure that message contexts are taken into account the {% trans %} and
{% blocktrans %} template tags. {% blocktrans %} template tags.
Refs #14806. Refs #14806.
""" """
# Reset translation catalog to include other/locale/de trans_real._active = local()
extended_locale_paths = settings.LOCALE_PATHS + ( trans_real._translations = {}
os.path.join(here, 'other', 'locale'), with translation.override('de'):
)
with self.settings(LOCALE_PATHS=extended_locale_paths):
from django.utils.translation import trans_real
trans_real._active = local()
trans_real._translations = {}
with translation.override('de'):
# {% trans %} ----------------------------------- # {% trans %} -----------------------------------
# Inexisting context... # Inexisting context...
t = Template('{% load i18n %}{% trans "May" context "unexisting" %}') t = Template('{% load i18n %}{% trans "May" context "unexisting" %}')
rendered = t.render(Context()) rendered = t.render(Context())
self.assertEqual(rendered, 'May') self.assertEqual(rendered, 'May')
# Existing context... # Existing context...
# Using a literal # Using a literal
t = Template('{% load i18n %}{% trans "May" context "month name" %}') t = Template('{% load i18n %}{% trans "May" context "month name" %}')
rendered = t.render(Context()) rendered = t.render(Context())
self.assertEqual(rendered, 'Mai') self.assertEqual(rendered, 'Mai')
t = Template('{% load i18n %}{% trans "May" context "verb" %}') t = Template('{% load i18n %}{% trans "May" context "verb" %}')
rendered = t.render(Context()) rendered = t.render(Context())
self.assertEqual(rendered, 'Kann') self.assertEqual(rendered, 'Kann')
# Using a variable # Using a variable
t = Template('{% load i18n %}{% trans "May" context message_context %}') t = Template('{% load i18n %}{% trans "May" context message_context %}')
rendered = t.render(Context({'message_context': 'month name'})) rendered = t.render(Context({'message_context': 'month name'}))
self.assertEqual(rendered, 'Mai') self.assertEqual(rendered, 'Mai')
t = Template('{% load i18n %}{% trans "May" context message_context %}') t = Template('{% load i18n %}{% trans "May" context message_context %}')
rendered = t.render(Context({'message_context': 'verb'})) rendered = t.render(Context({'message_context': 'verb'}))
self.assertEqual(rendered, 'Kann') self.assertEqual(rendered, 'Kann')
# Using a filter # Using a filter
t = Template('{% load i18n %}{% trans "May" context message_context|lower %}') t = Template('{% load i18n %}{% trans "May" context message_context|lower %}')
rendered = t.render(Context({'message_context': 'MONTH NAME'})) rendered = t.render(Context({'message_context': 'MONTH NAME'}))
self.assertEqual(rendered, 'Mai') self.assertEqual(rendered, 'Mai')
t = Template('{% load i18n %}{% trans "May" context message_context|lower %}') t = Template('{% load i18n %}{% trans "May" context message_context|lower %}')
rendered = t.render(Context({'message_context': 'VERB'})) rendered = t.render(Context({'message_context': 'VERB'}))
self.assertEqual(rendered, 'Kann') self.assertEqual(rendered, 'Kann')
# Using 'as' # Using 'as'
t = Template('{% load i18n %}{% trans "May" context "month name" as var %}Value: {{ var }}') t = Template('{% load i18n %}{% trans "May" context "month name" as var %}Value: {{ var }}')
rendered = t.render(Context()) rendered = t.render(Context())
self.assertEqual(rendered, 'Value: Mai') self.assertEqual(rendered, 'Value: Mai')
t = Template('{% load i18n %}{% trans "May" as var context "verb" %}Value: {{ var }}') t = Template('{% load i18n %}{% trans "May" as var context "verb" %}Value: {{ var }}')
rendered = t.render(Context()) rendered = t.render(Context())
self.assertEqual(rendered, 'Value: Kann') self.assertEqual(rendered, 'Value: Kann')
# Mis-uses # Mis-uses
self.assertRaises(TemplateSyntaxError, Template, '{% load i18n %}{% trans "May" context as var %}{{ var }}') self.assertRaises(TemplateSyntaxError, Template, '{% load i18n %}{% trans "May" context as var %}{{ var }}')
self.assertRaises(TemplateSyntaxError, Template, '{% load i18n %}{% trans "May" as var context %}{{ var }}') self.assertRaises(TemplateSyntaxError, Template, '{% load i18n %}{% trans "May" as var context %}{{ var }}')
# {% blocktrans %} ------------------------------ # {% blocktrans %} ------------------------------
# Inexisting context... # Inexisting context...
t = Template('{% load i18n %}{% blocktrans context "unexisting" %}May{% endblocktrans %}') t = Template('{% load i18n %}{% blocktrans context "unexisting" %}May{% endblocktrans %}')
rendered = t.render(Context()) rendered = t.render(Context())
self.assertEqual(rendered, 'May') self.assertEqual(rendered, 'May')
# Existing context... # Existing context...
# Using a literal # Using a literal
t = Template('{% load i18n %}{% blocktrans context "month name" %}May{% endblocktrans %}') t = Template('{% load i18n %}{% blocktrans context "month name" %}May{% endblocktrans %}')
rendered = t.render(Context()) rendered = t.render(Context())
self.assertEqual(rendered, 'Mai') self.assertEqual(rendered, 'Mai')
t = Template('{% load i18n %}{% blocktrans context "verb" %}May{% endblocktrans %}') t = Template('{% load i18n %}{% blocktrans context "verb" %}May{% endblocktrans %}')
rendered = t.render(Context()) rendered = t.render(Context())
self.assertEqual(rendered, 'Kann') self.assertEqual(rendered, 'Kann')
# Using a variable # Using a variable
t = Template('{% load i18n %}{% blocktrans context message_context %}May{% endblocktrans %}') t = Template('{% load i18n %}{% blocktrans context message_context %}May{% endblocktrans %}')
rendered = t.render(Context({'message_context': 'month name'})) rendered = t.render(Context({'message_context': 'month name'}))
self.assertEqual(rendered, 'Mai') self.assertEqual(rendered, 'Mai')
t = Template('{% load i18n %}{% blocktrans context message_context %}May{% endblocktrans %}') t = Template('{% load i18n %}{% blocktrans context message_context %}May{% endblocktrans %}')
rendered = t.render(Context({'message_context': 'verb'})) rendered = t.render(Context({'message_context': 'verb'}))
self.assertEqual(rendered, 'Kann') self.assertEqual(rendered, 'Kann')
# Using a filter # Using a filter
t = Template('{% load i18n %}{% blocktrans context message_context|lower %}May{% endblocktrans %}') t = Template('{% load i18n %}{% blocktrans context message_context|lower %}May{% endblocktrans %}')
rendered = t.render(Context({'message_context': 'MONTH NAME'})) rendered = t.render(Context({'message_context': 'MONTH NAME'}))
self.assertEqual(rendered, 'Mai') self.assertEqual(rendered, 'Mai')
t = Template('{% load i18n %}{% blocktrans context message_context|lower %}May{% endblocktrans %}') t = Template('{% load i18n %}{% blocktrans context message_context|lower %}May{% endblocktrans %}')
rendered = t.render(Context({'message_context': 'VERB'})) rendered = t.render(Context({'message_context': 'VERB'}))
self.assertEqual(rendered, 'Kann') self.assertEqual(rendered, 'Kann')
# Using 'count' # Using 'count'
t = Template('{% load i18n %}{% blocktrans count number=1 context "super search" %}{{ number }} super result{% plural %}{{ number }} super results{% endblocktrans %}') t = Template('{% load i18n %}{% blocktrans count number=1 context "super search" %}{{ number }} super result{% plural %}{{ number }} super results{% endblocktrans %}')
rendered = t.render(Context()) rendered = t.render(Context())
self.assertEqual(rendered, '1 Super-Ergebnis') self.assertEqual(rendered, '1 Super-Ergebnis')
t = Template('{% load i18n %}{% blocktrans count number=2 context "super search" %}{{ number }} super result{% plural %}{{ number }} super results{% endblocktrans %}') t = Template('{% load i18n %}{% blocktrans count number=2 context "super search" %}{{ number }} super result{% plural %}{{ number }} super results{% endblocktrans %}')
rendered = t.render(Context()) rendered = t.render(Context())
self.assertEqual(rendered, '2 Super-Ergebnisse') self.assertEqual(rendered, '2 Super-Ergebnisse')
t = Template('{% load i18n %}{% blocktrans context "other super search" count number=1 %}{{ number }} super result{% plural %}{{ number }} super results{% endblocktrans %}') t = Template('{% load i18n %}{% blocktrans context "other super search" count number=1 %}{{ number }} super result{% plural %}{{ number }} super results{% endblocktrans %}')
rendered = t.render(Context()) rendered = t.render(Context())
self.assertEqual(rendered, '1 anderen Super-Ergebnis') self.assertEqual(rendered, '1 anderen Super-Ergebnis')
t = Template('{% load i18n %}{% blocktrans context "other super search" count number=2 %}{{ number }} super result{% plural %}{{ number }} super results{% endblocktrans %}') t = Template('{% load i18n %}{% blocktrans context "other super search" count number=2 %}{{ number }} super result{% plural %}{{ number }} super results{% endblocktrans %}')
rendered = t.render(Context()) rendered = t.render(Context())
self.assertEqual(rendered, '2 andere Super-Ergebnisse') self.assertEqual(rendered, '2 andere Super-Ergebnisse')
# Using 'with' # Using 'with'
t = Template('{% load i18n %}{% blocktrans with num_comments=5 context "comment count" %}There are {{ num_comments }} comments{% endblocktrans %}') t = Template('{% load i18n %}{% blocktrans with num_comments=5 context "comment count" %}There are {{ num_comments }} comments{% endblocktrans %}')
rendered = t.render(Context()) rendered = t.render(Context())
self.assertEqual(rendered, 'Es gibt 5 Kommentare') self.assertEqual(rendered, 'Es gibt 5 Kommentare')
t = Template('{% load i18n %}{% blocktrans with num_comments=5 context "other comment count" %}There are {{ num_comments }} comments{% endblocktrans %}') t = Template('{% load i18n %}{% blocktrans with num_comments=5 context "other comment count" %}There are {{ num_comments }} comments{% endblocktrans %}')
rendered = t.render(Context()) rendered = t.render(Context())
self.assertEqual(rendered, 'Andere: Es gibt 5 Kommentare') self.assertEqual(rendered, 'Andere: Es gibt 5 Kommentare')
# Mis-uses # Mis-uses
self.assertRaises(TemplateSyntaxError, Template, '{% load i18n %}{% blocktrans context with month="May" %}{{ month }}{% endblocktrans %}') self.assertRaises(TemplateSyntaxError, Template, '{% load i18n %}{% blocktrans context with month="May" %}{{ month }}{% endblocktrans %}')
self.assertRaises(TemplateSyntaxError, Template, '{% load i18n %}{% blocktrans context %}{% endblocktrans %}') self.assertRaises(TemplateSyntaxError, Template, '{% load i18n %}{% blocktrans context %}{% endblocktrans %}')
self.assertRaises(TemplateSyntaxError, Template, '{% load i18n %}{% blocktrans count number=2 context %}{{ number }} super result{% plural %}{{ number }} super results{% endblocktrans %}') self.assertRaises(TemplateSyntaxError, Template, '{% load i18n %}{% blocktrans count number=2 context %}{{ number }} super result{% plural %}{{ number }} super results{% endblocktrans %}')
def test_string_concat(self): def test_string_concat(self):
@ -247,8 +240,7 @@ class TranslationTests(TestCase):
Translations on files with mac or dos end of lines will be converted Translations on files with mac or dos end of lines will be converted
to unix eof in .po catalogs, and they have to match when retrieved to unix eof in .po catalogs, and they have to match when retrieved
""" """
from django.utils.translation.trans_real import translation as Trans ca_translation = trans_real.translation('ca')
ca_translation = Trans('ca')
ca_translation._catalog['Mac\nEOF\n'] = 'Catalan Mac\nEOF\n' ca_translation._catalog['Mac\nEOF\n'] = 'Catalan Mac\nEOF\n'
ca_translation._catalog['Win\nEOF\n'] = 'Catalan Win\nEOF\n' ca_translation._catalog['Win\nEOF\n'] = 'Catalan Win\nEOF\n'
with translation.override('ca', deactivate=True): with translation.override('ca', deactivate=True):
@ -267,9 +259,8 @@ class TranslationTests(TestCase):
""" """
Test the to_language function Test the to_language function
""" """
from django.utils.translation.trans_real import to_language self.assertEqual(trans_real.to_language('en_US'), 'en-us')
self.assertEqual(to_language('en_US'), 'en-us') self.assertEqual(trans_real.to_language('sr_Lat'), 'sr-lat')
self.assertEqual(to_language('sr_Lat'), 'sr-lat')
@override_settings(LOCALE_PATHS=(os.path.join(here, 'other', 'locale'),)) @override_settings(LOCALE_PATHS=(os.path.join(here, 'other', 'locale'),))
def test_bad_placeholder_1(self): def test_bad_placeholder_1(self):
@ -710,8 +701,7 @@ class MiscTests(TestCase):
values according to the spec (and that we extract all the pieces in values according to the spec (and that we extract all the pieces in
the right order). the right order).
""" """
from django.utils.translation.trans_real import parse_accept_lang_header p = trans_real.parse_accept_lang_header
p = parse_accept_lang_header
# Good headers. # Good headers.
self.assertEqual([('de', 1.0)], p('de')) self.assertEqual([('de', 1.0)], p('de'))
self.assertEqual([('en-AU', 1.0)], p('en-AU')) self.assertEqual([('en-AU', 1.0)], p('en-AU'))
@ -811,7 +801,7 @@ class MiscTests(TestCase):
self.assertEqual(g(r), 'zh-cn') self.assertEqual(g(r), 'zh-cn')
def test_get_language_from_path_real(self): def test_get_language_from_path_real(self):
from django.utils.translation.trans_real import get_language_from_path as g g = trans_real.get_language_from_path
self.assertEqual(g('/pl/'), 'pl') self.assertEqual(g('/pl/'), 'pl')
self.assertEqual(g('/pl'), 'pl') self.assertEqual(g('/pl'), 'pl')
self.assertEqual(g('/xyz/'), None) self.assertEqual(g('/xyz/'), None)
@ -822,23 +812,19 @@ class MiscTests(TestCase):
self.assertEqual(g('/pl'), None) self.assertEqual(g('/pl'), None)
self.assertEqual(g('/xyz/'), None) self.assertEqual(g('/xyz/'), None)
@override_settings(LOCALE_PATHS=extended_locale_paths)
def test_percent_in_translatable_block(self): def test_percent_in_translatable_block(self):
extended_locale_paths = settings.LOCALE_PATHS + ( t_sing = Template("{% load i18n %}{% blocktrans %}The result was {{ percent }}%{% endblocktrans %}")
os.path.join(here, 'other', 'locale'), t_plur = Template("{% load i18n %}{% blocktrans count num as number %}{{ percent }}% represents {{ num }} object{% plural %}{{ percent }}% represents {{ num }} objects{% endblocktrans %}")
) with translation.override('de'):
with self.settings(LOCALE_PATHS=extended_locale_paths): self.assertEqual(t_sing.render(Context({'percent': 42})), 'Das Ergebnis war 42%')
t_sing = Template("{% load i18n %}{% blocktrans %}The result was {{ percent }}%{% endblocktrans %}") self.assertEqual(t_plur.render(Context({'percent': 42, 'num': 1})), '42% stellt 1 Objekt dar')
t_plur = Template("{% load i18n %}{% blocktrans count num as number %}{{ percent }}% represents {{ num }} object{% plural %}{{ percent }}% represents {{ num }} objects{% endblocktrans %}") self.assertEqual(t_plur.render(Context({'percent': 42, 'num': 4})), '42% stellt 4 Objekte dar')
with translation.override('de'):
self.assertEqual(t_sing.render(Context({'percent': 42})), 'Das Ergebnis war 42%')
self.assertEqual(t_plur.render(Context({'percent': 42, 'num': 1})), '42% stellt 1 Objekt dar')
self.assertEqual(t_plur.render(Context({'percent': 42, 'num': 4})), '42% stellt 4 Objekte dar')
class ResolutionOrderI18NTests(TestCase): class ResolutionOrderI18NTests(TestCase):
def setUp(self): def setUp(self):
from django.utils.translation import trans_real
# Okay, this is brutal, but we have no other choice to fully reset # Okay, this is brutal, but we have no other choice to fully reset
# the translation framework # the translation framework
trans_real._active = local() trans_real._active = local()
@ -867,17 +853,9 @@ class AppResolutionOrderI18NTests(ResolutionOrderI18NTests):
def test_app_translation(self): def test_app_translation(self):
self.assertUgettext('Date/time', 'APP') self.assertUgettext('Date/time', 'APP')
@override_settings(LOCALE_PATHS=extended_locale_paths)
class LocalePathsResolutionOrderI18NTests(ResolutionOrderI18NTests): class LocalePathsResolutionOrderI18NTests(ResolutionOrderI18NTests):
def setUp(self):
self.old_locale_paths = settings.LOCALE_PATHS
settings.LOCALE_PATHS += (os.path.join(here, 'other', 'locale'),)
super(LocalePathsResolutionOrderI18NTests, self).setUp()
def tearDown(self):
settings.LOCALE_PATHS = self.old_locale_paths
super(LocalePathsResolutionOrderI18NTests, self).tearDown()
def test_locale_paths_translation(self): def test_locale_paths_translation(self):
self.assertUgettext('Time', 'LOCALE_PATHS') self.assertUgettext('Time', 'LOCALE_PATHS')