瀏覽代碼

tests for language support in engines

marc 8 年之前
父節點
當前提交
e0c270bd72

二進制
searx/engines/.yandex.py.swp 查看文件


+ 4
- 2
searx/engines/duckduckgo.py 查看文件

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

+ 1
- 1
searx/engines/subtitleseeker.py 查看文件

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

+ 1
- 1
searx/preferences.py 查看文件

110
             elif data == 'ar-XA':
110
             elif data == 'ar-XA':
111
                 data = 'ar-SA'
111
                 data = 'ar-SA'
112
             else:
112
             else:
113
-                data = 'all'
113
+                data = self.value
114
         self.value = data
114
         self.value = data
115
 
115
 
116
 
116
 

+ 11
- 0
tests/unit/engines/test_duckduckgo.py 查看文件

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

+ 6
- 0
tests/unit/engines/test_gigablast.py 查看文件

15
         self.assertTrue('url' in params)
15
         self.assertTrue('url' in params)
16
         self.assertTrue(query in params['url'])
16
         self.assertTrue(query in params['url'])
17
         self.assertTrue('gigablast.com' in params['url'])
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
     def test_response(self):
25
     def test_response(self):
20
         self.assertRaises(AttributeError, gigablast.response, None)
26
         self.assertRaises(AttributeError, gigablast.response, None)

+ 5
- 0
tests/unit/engines/test_subtitleseeker.py 查看文件

10
         query = 'test_query'
10
         query = 'test_query'
11
         dicto = defaultdict(dict)
11
         dicto = defaultdict(dict)
12
         dicto['pageno'] = 1
12
         dicto['pageno'] = 1
13
+        dicto['language'] = 'fr-FR'
13
         params = subtitleseeker.request(query, dicto)
14
         params = subtitleseeker.request(query, dicto)
14
         self.assertTrue('url' in params)
15
         self.assertTrue('url' in params)
15
         self.assertTrue(query in params['url'])
16
         self.assertTrue(query in params['url'])
68
         self.assertIn('1039 Subs', results[0]['content'])
69
         self.assertIn('1039 Subs', results[0]['content'])
69
         self.assertIn('Alternative Title', results[0]['content'])
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
         html = """
76
         html = """
72
         <div class="boxRows">
77
         <div class="boxRows">
73
             <div class="boxRowsInner" style="width:600px;">
78
             <div class="boxRowsInner" style="width:600px;">

+ 4
- 0
tests/unit/engines/test_wikipedia.py 查看文件

29
         params = wikipedia.request(query, dicto)
29
         params = wikipedia.request(query, dicto)
30
         self.assertIn('en', params['url'])
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
     def test_response(self):
36
     def test_response(self):
33
         dicto = defaultdict(dict)
37
         dicto = defaultdict(dict)
34
         dicto['language'] = 'fr'
38
         dicto['language'] = 'fr'

+ 22
- 1
tests/unit/test_preferences.py 查看文件

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