summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJannis Leidel <jannis@leidel.info>2010-02-16 12:13:48 +0000
committerJannis Leidel <jannis@leidel.info>2010-02-16 12:13:48 +0000
commit71da5f62dab825e015864fd5604be46815e24ff1 (patch)
treedf85588638d9c5c683ac18ec862cc87917dfb58c /tests
parente50eefceb6be7c074c3b48bc802fb766c22d25f2 (diff)
Fixed #7720 - Fallback to the base language if the sub language given in the language cookie doesn't exist. Thanks, djoume and Ramiro Morales.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12442 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
-rw-r--r--tests/regressiontests/i18n/tests.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/regressiontests/i18n/tests.py b/tests/regressiontests/i18n/tests.py
index 212f952add..588a7b607c 100644
--- a/tests/regressiontests/i18n/tests.py
+++ b/tests/regressiontests/i18n/tests.py
@@ -454,3 +454,46 @@ class MiscTests(TestCase):
# by Django without falling back nor ignoring it.
r.META = {'HTTP_ACCEPT_LANGUAGE': 'zh-cn,de'}
self.assertEqual(g(r), 'zh-cn')
+
+ def test_parse_language_cookie(self):
+ """
+ Now test that we parse language preferences stored in a cookie correctly.
+ """
+ from django.utils.translation.trans_real import get_language_from_request
+ g = get_language_from_request
+ from django.http import HttpRequest
+ r = HttpRequest
+ r.COOKIES = {settings.LANGUAGE_COOKIE_NAME: 'pt-br'}
+ r.META = {}
+ self.assertEqual('pt-br', g(r))
+
+ r.COOKIES = {settings.LANGUAGE_COOKIE_NAME: 'pt'}
+ r.META = {}
+ self.assertEqual('pt', g(r))
+
+ r.COOKIES = {settings.LANGUAGE_COOKIE_NAME: 'es'}
+ r.META = {'HTTP_ACCEPT_LANGUAGE': 'de'}
+ self.assertEqual('es', g(r))
+
+ # Python 2.3 and 2.4 return slightly different results for completely
+ # bogus locales, so we omit this test for that anything below 2.4.
+ # It's relatively harmless in any cases (GIGO). This also means this
+ # won't be executed on Jython currently, but life's like that
+ # sometimes. (On those platforms, passing in a truly bogus locale
+ # will get you the default locale back.)
+ if sys.version_info >= (2, 5):
+ # This test assumes there won't be a Django translation to a US
+ # variation of the Spanish language, a safe assumption. When the
+ # user sets it as the preferred language, the main 'es'
+ # translation should be selected instead.
+ r.COOKIES = {settings.LANGUAGE_COOKIE_NAME: 'es-us'}
+ r.META = {}
+ self.assertEqual(g(r), 'es')
+
+ # This tests the following scenario: there isn't a main language (zh)
+ # translation of Django but there is a translation to variation (zh_CN)
+ # the user sets zh-cn as the preferred language, it should be selected
+ # by Django without falling back nor ignoring it.
+ r.COOKIES = {settings.LANGUAGE_COOKIE_NAME: 'zh-cn'}
+ r.META = {'HTTP_ACCEPT_LANGUAGE': 'de'}
+ self.assertEqual(g(r), 'zh-cn')