[tor-commits] [bridgedb/master] Fix translation tests
phw at torproject.org
phw at torproject.org
Wed Feb 19 18:26:37 UTC 2020
commit 2e9a582e7124462d297bceb352dc179a64ca0639
Author: Damian Johnson <atagar at torproject.org>
Date: Mon Jan 13 17:49:50 2020 -0800
Fix translation tests
Adjustments so test_translations.py passes. There were a few issues, most
notably...
* Python's map() builtin returns a list in 2.x and generator in 3.x.
Generators are more efficient to work with, but when indexing into the
object we must first convert it into a list.
Traceback (most recent call last):
File "/home/atagar/Desktop/tor/bridgedb/bridgedb/test/test_translations.py", line 48, in test_getLocaleFromHTTPRequest_withLangParam
self.assertEqual(parsed[0], 'ar')
builtins.TypeError: 'map' object is not subscriptable
* BridgeDB's getFirstSupportedLang returns 'en-US' by default when no
supported language is present. That isn't a language due to its '-US'
suffix, causing the following...
Traceback (most recent call last):
File "/home/atagar/Desktop/tor/bridgedb/bridgedb/test/test_translations.py", line 85, in test_usingRTLLang
self.assertTrue(translations.usingRTLLang(['fa']))
File "/home/atagar/Desktop/tor/bridgedb/bridgedb/translations.py", line 150, in usingRTLLang
print("text_direction: %s" % babel.core.Locale.parse(lang).text_direction)
File "/usr/local/lib/python3.5/dist-packages/babel/core.py", line 268, in parse
parts = parse_locale(identifier, sep=sep)
File "/usr/local/lib/python3.5/dist-packages/babel/core.py", line 1094, in parse_locale
raise ValueError('expected only letters, got %r' % lang)
builtins.ValueError: expected only letters, got 'en-us'
* Test expects 'fa' to be a supported language. BridgeDB's
"_langs.get_langs()" returns an empty list for me. Possibly a setup issue,
but even if it was this should better explain what the test needs.
Skipping this assertion if setup didn't enable farsi.
Test results changed as follows...
before: FAILED (skips=106, failures=17, errors=258, successes=423)
after: FAILED (skips=106, failures=17, errors=256, successes=425)
---
bridgedb/test/test_translations.py | 12 ++++++++----
bridgedb/translations.py | 19 +++++++++++++------
2 files changed, 21 insertions(+), 10 deletions(-)
diff --git a/bridgedb/test/test_translations.py b/bridgedb/test/test_translations.py
index 7d14cc0..939511d 100644
--- a/bridgedb/test/test_translations.py
+++ b/bridgedb/test/test_translations.py
@@ -10,7 +10,7 @@
from twisted.trial import unittest
-from bridgedb import translations
+from bridgedb import _langs, translations
from bridgedb.test.https_helpers import DummyRequest
@@ -45,10 +45,11 @@ class TranslationsMiscTests(unittest.TestCase):
})
parsed = translations.getLocaleFromHTTPRequest(request)
+
+ self.assertEqual(len(parsed), 3)
self.assertEqual(parsed[0], 'ar')
self.assertEqual(parsed[1], 'en')
self.assertEqual(parsed[2], 'en_US')
- self.assertEqual(len(parsed), 3)
def test_getLocaleFromHTTPRequest_withLangParam_AcceptLanguage(self):
"""This request uses a '?lang=ar' param, with an 'Accept-Language'
@@ -61,11 +62,12 @@ class TranslationsMiscTests(unittest.TestCase):
request.args.update({b'lang': [b'fa']})
parsed = translations.getLocaleFromHTTPRequest(request)
+
+ self.assertEqual(len(parsed), 3)
self.assertEqual(parsed[0], 'fa')
self.assertEqual(parsed[1], 'en')
self.assertEqual(parsed[2], 'en_US')
#self.assertEqual(parsed[3], 'en-gb')
- self.assertEqual(len(parsed), 3)
def test_getLocaleFromPlusAddr(self):
emailAddr = 'bridges at torproject.org'
@@ -80,4 +82,6 @@ class TranslationsMiscTests(unittest.TestCase):
def test_usingRTLLang(self):
self.assertFalse(translations.usingRTLLang(['foo_BAR']))
self.assertFalse(translations.usingRTLLang(['en']))
- self.assertTrue(translations.usingRTLLang(['fa']))
+
+ if 'fa' in _langs.get_langs():
+ self.assertTrue(translations.usingRTLLang(['fa']))
diff --git a/bridgedb/translations.py b/bridgedb/translations.py
index 10c27fc..194fa8a 100644
--- a/bridgedb/translations.py
+++ b/bridgedb/translations.py
@@ -58,7 +58,10 @@ def getFirstSupportedLang(langs):
if l in supported:
lang = l
break
- return lang
+
+ # crop locales (like 'en-US') to just the language
+
+ return lang.split('-')[0]
def getLocaleFromHTTPRequest(request):
"""Retrieve the languages from an HTTP ``Accept-Language:`` header.
@@ -77,16 +80,20 @@ def getLocaleFromHTTPRequest(request):
logging.debug("Client sent no 'Accept-Language' header. Using fallback.")
header = 'en,en-US'
- langs = headers.parseAcceptLanguage(header)
+ langs = list(headers.parseAcceptLanguage(header))
if not safelog.safe_logging: # pragma: no cover
logging.debug("Client Accept-Language (top 5): %s" % langs[:5])
# Check if we got a ?lang=foo argument, and if we did, insert it first
- chosenLang = request.args.get("lang", [None,])[0]
+ chosenLang = request.args.get(b"lang", [None,])[0]
if chosenLang:
logging.debug("Client requested language: %r" % chosenLang)
langs.insert(0, chosenLang)
+ # normalize languages to be unicode
+
+ langs = list(map(lambda l: l if isinstance(l, str) else l.decode('utf-8'), langs))
+
installTranslations(langs)
return langs
@@ -140,11 +147,11 @@ def usingRTLLang(langs):
:returns: ``True`` if the preferred language is right-to-left; ``False``
otherwise.
"""
+
lang = getFirstSupportedLang(langs)
- rtl = False
try:
- rtl = babel.core.Locale.parse(lang).text_direction == "rtl"
+ return babel.core.Locale.parse(lang).text_direction == "rtl"
except ValueError as err:
logging.warning("Couldn't parse locale %s: %s" % (lang, err))
- return rtl
+ return False
More information about the tor-commits
mailing list