Browse Source

tests for language support in engines

marc 8 years ago
parent
commit
e0c270bd72

BIN
searx/engines/.yandex.py.swp


+ 4 - 2
searx/engines/duckduckgo.py

@@ -53,14 +53,16 @@ def request(query, params):
         locale = None
     elif params['language'][:2] == 'ja':
         locale = 'jp-jp'
+    elif params['language'][:2] == 'sl':
+        locale = 'sl-sl'
     elif params['language'] == 'zh-TW':
         locale = 'tw-tzh'
     elif params['language'] == 'zh-HK':
         locale = 'hk-tzh'
     elif params['language'][-2:] == 'SA':
-        locale = 'xa' + params['language'].split('-')[0]
+        locale = 'xa-' + params['language'].split('-')[0]
     elif params['language'][-2:] == 'GB':
-        locale = 'uk' + params['language'].split('-')[0]
+        locale = 'uk-' + params['language'].split('-')[0]
     else:
         locale = params['language'].split('-')
         if len(locale) == 2:

+ 1 - 1
searx/engines/subtitleseeker.py

@@ -46,7 +46,7 @@ def response(resp):
     # dirty fix for languages named differenly in their site
     if resp.search_params['language'][:2] == 'fa':
         search_lang = 'Farsi'
-    elif resp.search_params['language'] == 'pt_BR':
+    elif resp.search_params['language'] == 'pt-BR':
         search_lang = 'Brazilian'
     elif resp.search_params['language'] != 'all':
         search_lang = [lc[3]

+ 1 - 1
searx/preferences.py

@@ -110,7 +110,7 @@ class SearchLanguageSetting(EnumStringSetting):
             elif data == 'ar-XA':
                 data = 'ar-SA'
             else:
-                data = 'all'
+                data = self.value
         self.value = data
 
 

+ 11 - 0
tests/unit/engines/test_duckduckgo.py

@@ -19,6 +19,17 @@ class TestDuckduckgoEngine(SearxTestCase):
         self.assertIn('duckduckgo.com', params['url'])
         self.assertIn('ch-de', params['url'])
 
+        # when ddg uses non standard code
+        dicto['language'] = 'en-GB'
+        params = duckduckgo.request(query, dicto)
+        self.assertIn('uk-en', params['url'])
+
+        # no country given
+        duckduckgo.supported_languages = ['de-CH', 'en-US']
+        dicto['language'] = 'de'
+        params = duckduckgo.request(query, dicto)
+        self.assertIn('ch-de', params['url'])
+
     def test_no_url_in_request_year_time_range(self):
         dicto = defaultdict(dict)
         query = 'test_query'

+ 6 - 0
tests/unit/engines/test_gigablast.py

@@ -15,6 +15,12 @@ class TestGigablastEngine(SearxTestCase):
         self.assertTrue('url' in params)
         self.assertTrue(query in params['url'])
         self.assertTrue('gigablast.com' in params['url'])
+        self.assertTrue('xx' in params['url'])
+
+        dicto['language'] = 'en-US'
+        params = gigablast.request(query, dicto)
+        self.assertTrue('en' in params['url'])
+        self.assertFalse('en-US' in params['url'])
 
     def test_response(self):
         self.assertRaises(AttributeError, gigablast.response, None)

+ 5 - 0
tests/unit/engines/test_subtitleseeker.py

@@ -10,6 +10,7 @@ class TestSubtitleseekerEngine(SearxTestCase):
         query = 'test_query'
         dicto = defaultdict(dict)
         dicto['pageno'] = 1
+        dicto['language'] = 'fr-FR'
         params = subtitleseeker.request(query, dicto)
         self.assertTrue('url' in params)
         self.assertTrue(query in params['url'])
@@ -68,6 +69,10 @@ class TestSubtitleseekerEngine(SearxTestCase):
         self.assertIn('1039 Subs', results[0]['content'])
         self.assertIn('Alternative Title', results[0]['content'])
 
+        dicto['language'] = 'pt-BR'
+        results = subtitleseeker.response(response)
+        self.assertEqual(results[0]['url'], 'http://this.is.the.url/Brazilian/')
+
         html = """
         <div class="boxRows">
             <div class="boxRowsInner" style="width:600px;">

+ 4 - 0
tests/unit/engines/test_wikipedia.py

@@ -29,6 +29,10 @@ class TestWikipediaEngine(SearxTestCase):
         params = wikipedia.request(query, dicto)
         self.assertIn('en', params['url'])
 
+        dicto['language'] = 'xx'
+        params = wikipedia.request(query, dicto)
+        self.assertIn('en', params['url'])
+
     def test_response(self):
         dicto = defaultdict(dict)
         dicto['language'] = 'fr'

+ 22 - 1
tests/unit/test_preferences.py

@@ -1,4 +1,4 @@
-from searx.preferences import (EnumStringSetting, MapSetting, MissingArgumentException,
+from searx.preferences import (EnumStringSetting, MapSetting, MissingArgumentException, SearchLanguageSetting,
                                MultipleChoiceSetting, PluginsSetting, ValidationException)
 from searx.testing import SearxTestCase
 
@@ -88,6 +88,27 @@ class TestSettings(SearxTestCase):
         setting.parse('2')
         self.assertEquals(setting.get_value(), ['2'])
 
+    # search language settings
+    def test_lang_setting_valid_choice(self):
+        setting = SearchLanguageSetting('all', choices=['all', 'de', 'en'])
+        setting.parse('de')
+        self.assertEquals(setting.get_value(), 'de')
+
+    def test_lang_setting_invalid_choice(self):
+        setting = SearchLanguageSetting('all', choices=['all', 'de', 'en'])
+        setting.parse('xx')
+        self.assertEquals(setting.get_value(), 'all')
+
+    def test_lang_setting_old_cookie_choice(self):
+        setting = SearchLanguageSetting('all', choices=['all', 'es', 'es-ES'])
+        setting.parse('es_XA')
+        self.assertEquals(setting.get_value(), 'es')
+
+    def test_lang_setting_old_cookie_format(self):
+        setting = SearchLanguageSetting('all', choices=['all', 'es', 'es-ES'])
+        setting.parse('es_ES')
+        self.assertEquals(setting.get_value(), 'es-ES')
+
     # plugins settings
     def test_plugins_setting_all_default_enabled(self):
         plugin1 = PluginStub('plugin1', True)