diff options
Diffstat (limited to 'tests/urlpatterns_reverse/test_localeregexprovider.py')
| -rw-r--r-- | tests/urlpatterns_reverse/test_localeregexprovider.py | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/urlpatterns_reverse/test_localeregexprovider.py b/tests/urlpatterns_reverse/test_localeregexprovider.py new file mode 100644 index 0000000000..9da8df656c --- /dev/null +++ b/tests/urlpatterns_reverse/test_localeregexprovider.py @@ -0,0 +1,41 @@ +from __future__ import unicode_literals + +import os + +from django.core.exceptions import ImproperlyConfigured +from django.test import SimpleTestCase, mock, override_settings +from django.urls import LocaleRegexProvider +from django.utils import translation +from django.utils._os import upath + +here = os.path.dirname(upath(os.path.abspath(__file__))) + + +@override_settings(LOCALE_PATHS=[os.path.join(here, 'translations', 'locale')]) +class LocaleRegexProviderTests(SimpleTestCase): + def setUp(self): + translation.trans_real._translations = {} + + def tearDown(self): + translation.trans_real._translations = {} + + def test_translated_regex_compiled_per_language(self): + provider = LocaleRegexProvider(translation.gettext_lazy('^foo/$')) + with translation.override('de'): + de_compiled = provider.regex + # compiled only once per language + error = AssertionError('tried to compile url regex twice for the same language') + with mock.patch('django.urls.resolvers.re.compile', side_effect=error): + de_compiled_2 = provider.regex + with translation.override('fr'): + fr_compiled = provider.regex + self.assertEqual(fr_compiled.pattern, '^foo-fr/$') + self.assertEqual(de_compiled.pattern, '^foo-de/$') + self.assertEqual(de_compiled, de_compiled_2) + + def test_regex_compile_error(self): + """Regex errors are re-raised as ImproperlyConfigured.""" + provider = LocaleRegexProvider('*') + msg = '"*" is not a valid regular expression: nothing to repeat' + with self.assertRaisesMessage(ImproperlyConfigured, msg): + provider.regex |
