From 75d0dcbf848e687042d889a8172962b6ea4206af Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Fri, 28 Feb 2014 20:40:03 +0100 Subject: [PATCH] Added patch_formats utility for i18n formatting tests --- tests/i18n/tests.py | 47 ++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/tests/i18n/tests.py b/tests/i18n/tests.py index cc25904ccc..1d34f90784 100644 --- a/tests/i18n/tests.py +++ b/tests/i18n/tests.py @@ -1,6 +1,7 @@ # -*- encoding: utf-8 -*- from __future__ import unicode_literals +from contextlib import contextmanager import datetime import decimal from importlib import import_module @@ -42,6 +43,18 @@ extended_locale_paths = settings.LOCALE_PATHS + ( os.path.join(here, 'other', 'locale'), ) +@contextmanager +def patch_formats(lang, **settings): + from django.utils.formats import _format_cache + + # Populate _format_cache with temporary values + for key, value in settings.items(): + _format_cache[(key, lang)] = value + try: + yield + finally: + reset_format_cache() + class TranslationTests(TestCase): @@ -482,31 +495,17 @@ class FormattingTests(TestCase): conditional test (e.g. 0 or empty string). Refs #16938. """ - from django.conf.locale.fr import formats as fr_formats + with patch_formats('fr', THOUSAND_SEPARATOR='', FIRST_DAY_OF_WEEK=0): + with translation.override('fr'): + with self.settings(USE_THOUSAND_SEPARATOR=True, THOUSAND_SEPARATOR='!'): + self.assertEqual('', get_format('THOUSAND_SEPARATOR')) + # Even a second time (after the format has been cached)... + self.assertEqual('', get_format('THOUSAND_SEPARATOR')) - # Back up original formats - backup_THOUSAND_SEPARATOR = fr_formats.THOUSAND_SEPARATOR - backup_FIRST_DAY_OF_WEEK = fr_formats.FIRST_DAY_OF_WEEK - - # Set formats that would get interpreted as False in a conditional test - fr_formats.THOUSAND_SEPARATOR = '' - fr_formats.FIRST_DAY_OF_WEEK = 0 - - reset_format_cache() - with translation.override('fr'): - with self.settings(USE_THOUSAND_SEPARATOR=True, THOUSAND_SEPARATOR='!'): - self.assertEqual('', get_format('THOUSAND_SEPARATOR')) - # Even a second time (after the format has been cached)... - self.assertEqual('', get_format('THOUSAND_SEPARATOR')) - - with self.settings(FIRST_DAY_OF_WEEK=1): - self.assertEqual(0, get_format('FIRST_DAY_OF_WEEK')) - # Even a second time (after the format has been cached)... - self.assertEqual(0, get_format('FIRST_DAY_OF_WEEK')) - - # Restore original formats - fr_formats.THOUSAND_SEPARATOR = backup_THOUSAND_SEPARATOR - fr_formats.FIRST_DAY_OF_WEEK = backup_FIRST_DAY_OF_WEEK + with self.settings(FIRST_DAY_OF_WEEK=1): + self.assertEqual(0, get_format('FIRST_DAY_OF_WEEK')) + # Even a second time (after the format has been cached)... + self.assertEqual(0, get_format('FIRST_DAY_OF_WEEK')) def test_l10n_enabled(self): self.maxDiff = 3000