Browse Source

tests for language support in engines

marc 8 years ago
parent
commit
e0c270bd72

BIN
searx/engines/.yandex.py.swp View File


+ 4
- 2
searx/engines/duckduckgo.py View File

@@ -53,14 +53,16 @@ def request(query, params):
53 53
         locale = None
54 54
     elif params['language'][:2] == 'ja':
55 55
         locale = 'jp-jp'
56
+    elif params['language'][:2] == 'sl':
57
+        locale = 'sl-sl'
56 58
     elif params['language'] == 'zh-TW':
57 59
         locale = 'tw-tzh'
58 60
     elif params['language'] == 'zh-HK':
59 61
         locale = 'hk-tzh'
60 62
     elif params['language'][-2:] == 'SA':
61
-        locale = 'xa' + params['language'].split('-')[0]
63
+        locale = 'xa-' + params['language'].split('-')[0]
62 64
     elif params['language'][-2:] == 'GB':
63
-        locale = 'uk' + params['language'].split('-')[0]
65
+        locale = 'uk-' + params['language'].split('-')[0]
64 66
     else:
65 67
         locale = params['language'].split('-')
66 68
         if len(locale) == 2:

+ 1
- 1
searx/engines/subtitleseeker.py View File

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

+ 1
- 1
searx/preferences.py View File

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

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

@@ -19,6 +19,17 @@ class TestDuckduckgoEngine(SearxTestCase):
19 19
         self.assertIn('duckduckgo.com', params['url'])
20 20
         self.assertIn('ch-de', params['url'])
21 21
 
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
+
22 33
     def test_no_url_in_request_year_time_range(self):
23 34
         dicto = defaultdict(dict)
24 35
         query = 'test_query'

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

@@ -15,6 +15,12 @@ class TestGigablastEngine(SearxTestCase):
15 15
         self.assertTrue('url' in params)
16 16
         self.assertTrue(query in params['url'])
17 17
         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'])
18 24
 
19 25
     def test_response(self):
20 26
         self.assertRaises(AttributeError, gigablast.response, None)

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

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

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

@@ -29,6 +29,10 @@ class TestWikipediaEngine(SearxTestCase):
29 29
         params = wikipedia.request(query, dicto)
30 30
         self.assertIn('en', params['url'])
31 31
 
32
+        dicto['language'] = 'xx'
33
+        params = wikipedia.request(query, dicto)
34
+        self.assertIn('en', params['url'])
35
+
32 36
     def test_response(self):
33 37
         dicto = defaultdict(dict)
34 38
         dicto['language'] = 'fr'

+ 22
- 1
tests/unit/test_preferences.py View File

@@ -1,4 +1,4 @@
1
-from searx.preferences import (EnumStringSetting, MapSetting, MissingArgumentException,
1
+from searx.preferences import (EnumStringSetting, MapSetting, MissingArgumentException, SearchLanguageSetting,
2 2
                                MultipleChoiceSetting, PluginsSetting, ValidationException)
3 3
 from searx.testing import SearxTestCase
4 4
 
@@ -88,6 +88,27 @@ class TestSettings(SearxTestCase):
88 88
         setting.parse('2')
89 89
         self.assertEquals(setting.get_value(), ['2'])
90 90
 
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
+
91 112
     # plugins settings
92 113
     def test_plugins_setting_all_default_enabled(self):
93 114
         plugin1 = PluginStub('plugin1', True)