Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Added TransRealMixin to fix i18n global state pollution in the test s…

…uite
  • Loading branch information...
commit e80636b6683893d40e171745a4ef0a2f1a09cc82 1 parent 413735b
Łukasz Langa ambv authored
17 tests/i18n/__init__.py
View
@@ -0,0 +1,17 @@
+from threading import local
+
+
+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._accepted = {}
+
+ def tearDown(self):
+ self.flush_caches()
+ super(TransRealMixin, self).tearDown()
4 tests/i18n/contenttypes/tests.py
View
@@ -10,6 +10,8 @@
from django.utils import six
from django.utils import translation
+from i18n import TransRealMixin
+
@override_settings(
USE_I18N=True,
@@ -22,7 +24,7 @@
('fr', 'French'),
),
)
-class ContentTypeTests(TestCase):
+class ContentTypeTests(TransRealMixin, TestCase):
def test_verbose_name(self):
company_type = ContentType.objects.get(app_label='i18n', model='company')
with translation.override('en'):
31 tests/i18n/tests.py
View
@@ -44,6 +44,7 @@
from .commands.compilation import (PoFileTests, PoFileContentsTests,
PercentRenderingTests, MultipleLocaleCompilationTests,
CompilationErrorHandling)
+from . import TransRealMixin
from .forms import I18nForm, SelectDateForm, SelectDateWidget, CompanyForm
from .models import Company, TestModel
@@ -53,7 +54,8 @@
os.path.join(here, 'other', 'locale'),
)
-class TranslationTests(TestCase):
+
+class TranslationTests(TransRealMixin, TestCase):
def test_override(self):
activate('de')
@@ -335,6 +337,8 @@ def test_bad_placeholder_2(self):
class TranslationThreadSafetyTests(TestCase):
+ """Specifically not using TransRealMixin here to test threading."""
+
def setUp(self):
self._old_language = get_language()
self._translations = trans_real._translations
@@ -365,9 +369,10 @@ def test_bug14894_translation_activate_thread_safety(self):
@override_settings(USE_L10N=True)
-class FormattingTests(TestCase):
+class FormattingTests(TransRealMixin, TestCase):
def setUp(self):
+ super(FormattingTests, self).setUp()
self.n = decimal.Decimal('66666.666')
self.f = 99999.999
self.d = datetime.date(2009, 12, 31)
@@ -769,9 +774,10 @@ def test_localize_templatetag_and_filter(self):
self.assertEqual(template2.render(context), output2)
self.assertEqual(template3.render(context), output3)
-class MiscTests(TestCase):
+class MiscTests(TransRealMixin, TestCase):
def setUp(self):
+ super(MiscTests, self).setUp()
self.rf = RequestFactory()
def test_parse_spec_http_header(self):
@@ -915,17 +921,15 @@ def test_percent_formatting_in_blocktrans(self):
self.assertEqual(t_plur.render(Context({'percent': 42, 'num': 4})), '%(percent)s% represents 4 objects')
-class ResolutionOrderI18NTests(TestCase):
+class ResolutionOrderI18NTests(TransRealMixin, TestCase):
def setUp(self):
- # Okay, this is brutal, but we have no other choice to fully reset
- # the translation framework
- trans_real._active = local()
- trans_real._translations = {}
+ super(ResolutionOrderI18NTests, self).setUp()
activate('de')
def tearDown(self):
deactivate()
+ super(ResolutionOrderI18NTests, self).tearDown()
def assertUgettext(self, msgid, msgstr):
result = ugettext(msgid)
@@ -998,15 +1002,17 @@ def test_unknown_language_code_and_country_code(self):
six.assertRaisesRegex(self, KeyError, r"Unknown language code xx-xx and xx\.", get_language_info, 'xx-xx')
-class MultipleLocaleActivationTests(TestCase):
+class MultipleLocaleActivationTests(TransRealMixin, TestCase):
"""
Tests for template rendering behavior when multiple locales are activated
during the lifetime of the same process.
"""
def setUp(self):
+ super(MultipleLocaleActivationTests, self).setUp()
self._old_language = get_language()
def tearDown(self):
+ super(MultipleLocaleActivationTests, self).tearDown()
activate(self._old_language)
def test_single_locale_activation(self):
@@ -1135,7 +1141,7 @@ def test_multiple_locale_direct_switch_btrans(self):
'django.middleware.common.CommonMiddleware',
),
)
-class LocaleMiddlewareTests(TestCase):
+class LocaleMiddlewareTests(TransRealMixin, TestCase):
urls = 'i18n.urls'
@@ -1157,12 +1163,12 @@ def test_streaming_response(self):
'django.middleware.common.CommonMiddleware',
),
)
-class CountrySpecificLanguageTests(TestCase):
+class CountrySpecificLanguageTests(TransRealMixin, TestCase):
urls = 'i18n.urls'
def setUp(self):
- trans_real._accepted = {}
+ super(CountrySpecificLanguageTests, self).setUp()
self.rf = RequestFactory()
def test_check_for_language(self):
@@ -1172,6 +1178,7 @@ def test_check_for_language(self):
def test_get_language_from_request(self):
+ # issue 19919
r = self.rf.get('/')
r.COOKIES = {}
r.META = {'HTTP_ACCEPT_LANGUAGE': 'en-US,en;q=0.8,bg;q=0.6,ru;q=0.4'}
Please sign in to comment.
Something went wrong with that request. Please try again.