Loading django/test/signals.py +9 −3 Original line number Diff line number Diff line Loading @@ -42,6 +42,9 @@ def update_installed_apps(**kwargs): # Rebuild app_template_dirs cache. from django.template.loaders import app_directories as mod mod.app_template_dirs = mod.calculate_app_template_dirs() # Rebuild translations cache. from django.utils.translation import trans_real trans_real._translations = {} @receiver(setting_changed) Loading Loading @@ -97,11 +100,14 @@ def clear_serializers_cache(**kwargs): @receiver(setting_changed) def language_changed(**kwargs): if kwargs['setting'] in ('LOCALE_PATHS', 'LANGUAGE_CODE'): if kwargs['setting'] in {'LANGUAGES', 'LANGUAGE_CODE', 'LOCALE_PATHS'}: from django.utils.translation import trans_real trans_real._default = None if kwargs['setting'] == 'LOCALE_PATHS': trans_real._active = threading.local() if kwargs['setting'] in {'LANGUAGES', 'LOCALE_PATHS'}: from django.utils.translation import trans_real trans_real._translations = {} trans_real.check_for_language.cache_clear() @receiver(setting_changed) Loading django/test/utils.py +0 −17 Original line number Diff line number Diff line Loading @@ -2,7 +2,6 @@ from contextlib import contextmanager import logging import re import sys from threading import local import time from unittest import skipUnless import warnings Loading Loading @@ -502,22 +501,6 @@ def patch_logger(logger_name, log_level): setattr(logger, log_level, orig) class TransRealMixin(object): """This is the only way to reset the translation machinery. Otherwise the test suite occasionally fails because of global state pollution between tests.""" def flush_caches(self): from django.utils.translation import trans_real trans_real._translations = {} trans_real._active = local() trans_real._default = None trans_real.check_for_language.cache_clear() def tearDown(self): self.flush_caches() super(TransRealMixin, self).tearDown() # On OSes that don't provide tzset (Windows), we can't set the timezone # in which the program runs. As a consequence, we must skip tests that # don't enforce a specific timezone (with timezone.override or equivalent), Loading tests/i18n/tests.py +22 −21 Original line number Diff line number Diff line Loading @@ -12,7 +12,6 @@ from django.conf import settings from django.template import Template, Context from django.template.base import TemplateSyntaxError from django.test import TestCase, RequestFactory, override_settings from django.test.utils import TransRealMixin from django.utils import translation from django.utils.formats import (get_format, date_format, time_format, localize, localize_input, iter_format_modules, get_format_modules, Loading @@ -31,7 +30,8 @@ from django.utils.translation import (activate, deactivate, ungettext_lazy, pgettext, npgettext, npgettext_lazy, check_for_language) check_for_language, string_concat) from .forms import I18nForm, SelectDateForm, SelectDateWidget, CompanyForm from .models import Company, TestModel Loading @@ -43,16 +43,18 @@ extended_locale_paths = settings.LOCALE_PATHS + ( ) class TranslationTests(TransRealMixin, TestCase): class TranslationTests(TestCase): def test_override(self): activate('de') try: with translation.override('pl'): self.assertEqual(get_language(), 'pl') self.assertEqual(get_language(), 'de') with translation.override(None): self.assertEqual(get_language(), settings.LANGUAGE_CODE) self.assertEqual(get_language(), 'de') finally: deactivate() def test_lazy_objects(self): Loading Loading @@ -265,8 +267,7 @@ class TranslationTests(TransRealMixin, TestCase): """ six.text_type(string_concat(...)) should not raise a TypeError - #4796 """ import django.utils.translation self.assertEqual('django', six.text_type(django.utils.translation.string_concat("dja", "ngo"))) self.assertEqual('django', six.text_type(string_concat("dja", "ngo"))) def test_safe_status(self): """ Loading Loading @@ -335,7 +336,6 @@ class TranslationTests(TransRealMixin, TestCase): class TranslationThreadSafetyTests(TestCase): """Specifically not using TransRealMixin here to test threading.""" def setUp(self): self._old_language = get_language() Loading Loading @@ -367,7 +367,7 @@ class TranslationThreadSafetyTests(TestCase): @override_settings(USE_L10N=True) class FormattingTests(TransRealMixin, TestCase): class FormattingTests(TestCase): def setUp(self): super(FormattingTests, self).setUp() Loading Loading @@ -806,7 +806,7 @@ class FormattingTests(TransRealMixin, TestCase): ) class MiscTests(TransRealMixin, TestCase): class MiscTests(TestCase): def setUp(self): super(MiscTests, self).setUp() Loading Loading @@ -1019,7 +1019,7 @@ class MiscTests(TransRealMixin, TestCase): self.assertNotEqual('pt-br', g(r)) class ResolutionOrderI18NTests(TransRealMixin, TestCase): class ResolutionOrderI18NTests(TestCase): def setUp(self): super(ResolutionOrderI18NTests, self).setUp() Loading @@ -1037,20 +1037,21 @@ class ResolutionOrderI18NTests(TransRealMixin, TestCase): class AppResolutionOrderI18NTests(ResolutionOrderI18NTests): @override_settings(LANGUAGE_CODE='de') def test_app_translation(self): # Original translation. self.assertUgettext('Date/time', 'Datum/Zeit') # Different translation. with self.modify_settings(INSTALLED_APPS={'append': 'i18n.resolution'}): self.flush_caches() # Force refreshing translations. activate('de') # Doesn't work because it's added later in the list. self.assertUgettext('Date/time', 'Datum/Zeit') with self.modify_settings(INSTALLED_APPS={'remove': 'django.contrib.admin.apps.SimpleAdminConfig'}): self.flush_caches() # Force refreshing translations. activate('de') # Unless the original is removed from the list. Loading Loading @@ -1109,7 +1110,7 @@ class TestLanguageInfo(TestCase): six.assertRaisesRegex(self, KeyError, r"Unknown language code xx-xx and xx\.", get_language_info, 'xx-xx') class MultipleLocaleActivationTests(TransRealMixin, TestCase): class MultipleLocaleActivationTests(TestCase): """ Tests for template rendering behavior when multiple locales are activated during the lifetime of the same process. Loading Loading @@ -1243,7 +1244,7 @@ class MultipleLocaleActivationTests(TransRealMixin, TestCase): 'django.middleware.common.CommonMiddleware', ), ) class LocaleMiddlewareTests(TransRealMixin, TestCase): class LocaleMiddlewareTests(TestCase): urls = 'i18n.urls' Loading Loading @@ -1281,7 +1282,7 @@ class LocaleMiddlewareTests(TransRealMixin, TestCase): 'django.middleware.common.CommonMiddleware', ), ) class CountrySpecificLanguageTests(TransRealMixin, TestCase): class CountrySpecificLanguageTests(TestCase): urls = 'i18n.urls' Loading Loading
django/test/signals.py +9 −3 Original line number Diff line number Diff line Loading @@ -42,6 +42,9 @@ def update_installed_apps(**kwargs): # Rebuild app_template_dirs cache. from django.template.loaders import app_directories as mod mod.app_template_dirs = mod.calculate_app_template_dirs() # Rebuild translations cache. from django.utils.translation import trans_real trans_real._translations = {} @receiver(setting_changed) Loading Loading @@ -97,11 +100,14 @@ def clear_serializers_cache(**kwargs): @receiver(setting_changed) def language_changed(**kwargs): if kwargs['setting'] in ('LOCALE_PATHS', 'LANGUAGE_CODE'): if kwargs['setting'] in {'LANGUAGES', 'LANGUAGE_CODE', 'LOCALE_PATHS'}: from django.utils.translation import trans_real trans_real._default = None if kwargs['setting'] == 'LOCALE_PATHS': trans_real._active = threading.local() if kwargs['setting'] in {'LANGUAGES', 'LOCALE_PATHS'}: from django.utils.translation import trans_real trans_real._translations = {} trans_real.check_for_language.cache_clear() @receiver(setting_changed) Loading
django/test/utils.py +0 −17 Original line number Diff line number Diff line Loading @@ -2,7 +2,6 @@ from contextlib import contextmanager import logging import re import sys from threading import local import time from unittest import skipUnless import warnings Loading Loading @@ -502,22 +501,6 @@ def patch_logger(logger_name, log_level): setattr(logger, log_level, orig) class TransRealMixin(object): """This is the only way to reset the translation machinery. Otherwise the test suite occasionally fails because of global state pollution between tests.""" def flush_caches(self): from django.utils.translation import trans_real trans_real._translations = {} trans_real._active = local() trans_real._default = None trans_real.check_for_language.cache_clear() def tearDown(self): self.flush_caches() super(TransRealMixin, self).tearDown() # On OSes that don't provide tzset (Windows), we can't set the timezone # in which the program runs. As a consequence, we must skip tests that # don't enforce a specific timezone (with timezone.override or equivalent), Loading
tests/i18n/tests.py +22 −21 Original line number Diff line number Diff line Loading @@ -12,7 +12,6 @@ from django.conf import settings from django.template import Template, Context from django.template.base import TemplateSyntaxError from django.test import TestCase, RequestFactory, override_settings from django.test.utils import TransRealMixin from django.utils import translation from django.utils.formats import (get_format, date_format, time_format, localize, localize_input, iter_format_modules, get_format_modules, Loading @@ -31,7 +30,8 @@ from django.utils.translation import (activate, deactivate, ungettext_lazy, pgettext, npgettext, npgettext_lazy, check_for_language) check_for_language, string_concat) from .forms import I18nForm, SelectDateForm, SelectDateWidget, CompanyForm from .models import Company, TestModel Loading @@ -43,16 +43,18 @@ extended_locale_paths = settings.LOCALE_PATHS + ( ) class TranslationTests(TransRealMixin, TestCase): class TranslationTests(TestCase): def test_override(self): activate('de') try: with translation.override('pl'): self.assertEqual(get_language(), 'pl') self.assertEqual(get_language(), 'de') with translation.override(None): self.assertEqual(get_language(), settings.LANGUAGE_CODE) self.assertEqual(get_language(), 'de') finally: deactivate() def test_lazy_objects(self): Loading Loading @@ -265,8 +267,7 @@ class TranslationTests(TransRealMixin, TestCase): """ six.text_type(string_concat(...)) should not raise a TypeError - #4796 """ import django.utils.translation self.assertEqual('django', six.text_type(django.utils.translation.string_concat("dja", "ngo"))) self.assertEqual('django', six.text_type(string_concat("dja", "ngo"))) def test_safe_status(self): """ Loading Loading @@ -335,7 +336,6 @@ class TranslationTests(TransRealMixin, TestCase): class TranslationThreadSafetyTests(TestCase): """Specifically not using TransRealMixin here to test threading.""" def setUp(self): self._old_language = get_language() Loading Loading @@ -367,7 +367,7 @@ class TranslationThreadSafetyTests(TestCase): @override_settings(USE_L10N=True) class FormattingTests(TransRealMixin, TestCase): class FormattingTests(TestCase): def setUp(self): super(FormattingTests, self).setUp() Loading Loading @@ -806,7 +806,7 @@ class FormattingTests(TransRealMixin, TestCase): ) class MiscTests(TransRealMixin, TestCase): class MiscTests(TestCase): def setUp(self): super(MiscTests, self).setUp() Loading Loading @@ -1019,7 +1019,7 @@ class MiscTests(TransRealMixin, TestCase): self.assertNotEqual('pt-br', g(r)) class ResolutionOrderI18NTests(TransRealMixin, TestCase): class ResolutionOrderI18NTests(TestCase): def setUp(self): super(ResolutionOrderI18NTests, self).setUp() Loading @@ -1037,20 +1037,21 @@ class ResolutionOrderI18NTests(TransRealMixin, TestCase): class AppResolutionOrderI18NTests(ResolutionOrderI18NTests): @override_settings(LANGUAGE_CODE='de') def test_app_translation(self): # Original translation. self.assertUgettext('Date/time', 'Datum/Zeit') # Different translation. with self.modify_settings(INSTALLED_APPS={'append': 'i18n.resolution'}): self.flush_caches() # Force refreshing translations. activate('de') # Doesn't work because it's added later in the list. self.assertUgettext('Date/time', 'Datum/Zeit') with self.modify_settings(INSTALLED_APPS={'remove': 'django.contrib.admin.apps.SimpleAdminConfig'}): self.flush_caches() # Force refreshing translations. activate('de') # Unless the original is removed from the list. Loading Loading @@ -1109,7 +1110,7 @@ class TestLanguageInfo(TestCase): six.assertRaisesRegex(self, KeyError, r"Unknown language code xx-xx and xx\.", get_language_info, 'xx-xx') class MultipleLocaleActivationTests(TransRealMixin, TestCase): class MultipleLocaleActivationTests(TestCase): """ Tests for template rendering behavior when multiple locales are activated during the lifetime of the same process. Loading Loading @@ -1243,7 +1244,7 @@ class MultipleLocaleActivationTests(TransRealMixin, TestCase): 'django.middleware.common.CommonMiddleware', ), ) class LocaleMiddlewareTests(TransRealMixin, TestCase): class LocaleMiddlewareTests(TestCase): urls = 'i18n.urls' Loading Loading @@ -1281,7 +1282,7 @@ class LocaleMiddlewareTests(TransRealMixin, TestCase): 'django.middleware.common.CommonMiddleware', ), ) class CountrySpecificLanguageTests(TransRealMixin, TestCase): class CountrySpecificLanguageTests(TestCase): urls = 'i18n.urls' Loading