on master help sign in
tests for language support in engines
commite0c270bd72f7b2a40222e3ed264e25d36cb0fc30 authormarc <a01200356@itesm.mx> dateTue 13 Dec 2016, 23:51 (10 years ago) parent1b46ecd
9 files changed+54−5
searx/engines/.yandex.py.swp searx/engines/duckduckgo.py+4−2 searx/engines/subtitleseeker.py+1−1 searx/preferences.py+1−1 tests/unit/engines/test_duckduckgo.py+11 tests/unit/engines/test_gigablast.py+6 tests/unit/engines/test_subtitleseeker.py+5 tests/unit/engines/test_wikipedia.py+4 tests/unit/test_preferences.py+22−1
searx/engines/.yandex.py.swpnew file

Binary file not shown.

searx/engines/duckduckgo.py+4−2
@@ -53,14 +53,16 @@ def request(query, params):
5353 locale = None
5454 elif params['language'][:2] == 'ja':
5555 locale = 'jp-jp'
56+ elif params['language'][:2] == 'sl':
57+ locale = 'sl-sl'
5658 elif params['language'] == 'zh-TW':
5759 locale = 'tw-tzh'
5860 elif params['language'] == 'zh-HK':
5961 locale = 'hk-tzh'
6062 elif params['language'][-2:] == 'SA':
61− locale = 'xa' + params['language'].split('-')[0]
63+ locale = 'xa-' + params['language'].split('-')[0]
6264 elif params['language'][-2:] == 'GB':
63− locale = 'uk' + params['language'].split('-')[0]
65+ locale = 'uk-' + params['language'].split('-')[0]
6466 else:
6567 locale = params['language'].split('-')
6668 if len(locale) == 2:
searx/engines/subtitleseeker.py+1−1
@@ -46,7 +46,7 @@ def response(resp):
4646 # dirty fix for languages named differenly in their site
4747 if resp.search_params['language'][:2] == 'fa':
4848 search_lang = 'Farsi'
49− elif resp.search_params['language'] == 'pt_BR':
49+ elif resp.search_params['language'] == 'pt-BR':
5050 search_lang = 'Brazilian'
5151 elif resp.search_params['language'] != 'all':
5252 search_lang = [lc[3]
searx/preferences.py+1−1
@@ -110,7 +110,7 @@ class SearchLanguageSetting(EnumStringSetting):
110110 elif data == 'ar-XA':
111111 data = 'ar-SA'
112112 else:
113− data = 'all'
113+ data = self.value
114114 self.value = data
115115
116116
tests/unit/engines/test_duckduckgo.py+11
@@ -19,6 +19,17 @@ class TestDuckduckgoEngine(SearxTestCase):
1919 self.assertIn('duckduckgo.com', params['url'])
2020 self.assertIn('ch-de', params['url'])
2121
22+ # when ddg uses non standard code
23+ dicto['language'] = 'en-GB'
24+ params = duckduckgo.request(query, dicto)
25+ self.assertIn('uk-en', params['url'])
26+
27+ # no country given
28+ duckduckgo.supported_languages = ['de-CH', 'en-US']
29+ dicto['language'] = 'de'
30+ params = duckduckgo.request(query, dicto)
31+ self.assertIn('ch-de', params['url'])
32+
2233 def test_no_url_in_request_year_time_range(self):
2334 dicto = defaultdict(dict)
2435 query = 'test_query'
tests/unit/engines/test_gigablast.py+6
@@ -15,6 +15,12 @@ class TestGigablastEngine(SearxTestCase):
1515 self.assertTrue('url' in params)
1616 self.assertTrue(query in params['url'])
1717 self.assertTrue('gigablast.com' in params['url'])
18+ self.assertTrue('xx' in params['url'])
19+
20+ dicto['language'] = 'en-US'
21+ params = gigablast.request(query, dicto)
22+ self.assertTrue('en' in params['url'])
23+ self.assertFalse('en-US' in params['url'])
1824
1925 def test_response(self):
2026 self.assertRaises(AttributeError, gigablast.response, None)
tests/unit/engines/test_subtitleseeker.py+5
@@ -10,6 +10,7 @@ class TestSubtitleseekerEngine(SearxTestCase):
1010 query = 'test_query'
1111 dicto = defaultdict(dict)
1212 dicto['pageno'] = 1
13+ dicto['language'] = 'fr-FR'
1314 params = subtitleseeker.request(query, dicto)
1415 self.assertTrue('url' in params)
1516 self.assertTrue(query in params['url'])
@@ -68,6 +69,10 @@ class TestSubtitleseekerEngine(SearxTestCase):
6869 self.assertIn('1039 Subs', results[0]['content'])
6970 self.assertIn('Alternative Title', results[0]['content'])
7071
72+ dicto['language'] = 'pt-BR'
73+ results = subtitleseeker.response(response)
74+ self.assertEqual(results[0]['url'], 'http://this.is.the.url/Brazilian/')
75+
7176 html = """
7277 <div class="boxRows">
7378 <div class="boxRowsInner" style="width:600px;">
tests/unit/engines/test_wikipedia.py+4
@@ -29,6 +29,10 @@ class TestWikipediaEngine(SearxTestCase):
2929 params = wikipedia.request(query, dicto)
3030 self.assertIn('en', params['url'])
3131
32+ dicto['language'] = 'xx'
33+ params = wikipedia.request(query, dicto)
34+ self.assertIn('en', params['url'])
35+
3236 def test_response(self):
3337 dicto = defaultdict(dict)
3438 dicto['language'] = 'fr'
tests/unit/test_preferences.py+22−1
@@ -1,4 +1,4 @@
1−from searx.preferences import (EnumStringSetting, MapSetting, MissingArgumentException,
1+from searx.preferences import (EnumStringSetting, MapSetting, MissingArgumentException, SearchLanguageSetting,
22 MultipleChoiceSetting, PluginsSetting, ValidationException)
33from searx.testing import SearxTestCase
44
@@ -88,6 +88,27 @@ class TestSettings(SearxTestCase):
8888 setting.parse('2')
8989 self.assertEquals(setting.get_value(), ['2'])
9090
91+ # search language settings
92+ def test_lang_setting_valid_choice(self):
93+ setting = SearchLanguageSetting('all', choices=['all', 'de', 'en'])
94+ setting.parse('de')
95+ self.assertEquals(setting.get_value(), 'de')
96+
97+ def test_lang_setting_invalid_choice(self):
98+ setting = SearchLanguageSetting('all', choices=['all', 'de', 'en'])
99+ setting.parse('xx')
100+ self.assertEquals(setting.get_value(), 'all')
101+
102+ def test_lang_setting_old_cookie_choice(self):
103+ setting = SearchLanguageSetting('all', choices=['all', 'es', 'es-ES'])
104+ setting.parse('es_XA')
105+ self.assertEquals(setting.get_value(), 'es')
106+
107+ def test_lang_setting_old_cookie_format(self):
108+ setting = SearchLanguageSetting('all', choices=['all', 'es', 'es-ES'])
109+ setting.parse('es_ES')
110+ self.assertEquals(setting.get_value(), 'es-ES')
111+
91112 # plugins settings
92113 def test_plugins_setting_all_default_enabled(self):
93114 plugin1 = PluginStub('plugin1', True)