@@ -0,0 +1,268 @@
1+# -*- coding: utf-8 -*-
2+from collections import defaultdict
4+from searx.engines import bing_images
5+from searx.testing import SearxTestCase
8+class TestBingImagesEngine(SearxTestCase):
10+ def test_request(self):
12+ dicto = defaultdict(dict)
14+ dicto['language'] = 'fr_FR'
15+ params = bing_images.request(query, dicto)
16+ self.assertTrue('url' in params)
17+ self.assertTrue(query in params['url'])
18+ self.assertTrue('bing.com' in params['url'])
19+ self.assertTrue('SRCHHPGUSR' in params['cookies'])
20+ self.assertTrue('fr' in params['cookies']['SRCHHPGUSR'])
22+ dicto['language'] = 'all'
23+ params = bing_images.request(query, dicto)
24+ self.assertIn('SRCHHPGUSR', params['cookies'])
25+ self.assertIn('en', params['cookies']['SRCHHPGUSR'])
27+ def test_response(self):
28+ self.assertRaises(AttributeError, bing_images.response, None)
29+ self.assertRaises(AttributeError, bing_images.response, [])
30+ self.assertRaises(AttributeError, bing_images.response, '')
31+ self.assertRaises(AttributeError, bing_images.response, '[]')
33+ response = mock.Mock(content='<html></html>')
34+ self.assertEqual(bing_images.response(response), [])
36+ response = mock.Mock(content='<html></html>')
37+ self.assertEqual(bing_images.response(response), [])
40+ <div class="dg_u" style="width:178px;height:144px;left:17px;top:0px">
41+ <a href="#" ihk="HN.608003696942779811"
42+ m="{ns:"images",k:"5045",
43+mid:"659EB92C317974F34517A1CCAEBEF76A578E08DEE",
44+surl:"http://www.page.url/",imgurl:"http://test.url/Test%20Query.jpg",
45+oh:"238",tft:"0",oi:"http://www.image.url/Images/Test%20Query.jpg"}"
46+ mid="59EB92C317974F34517A1CCAEBEF76A578E08DEE" onclick="return false;"
47+ t1="Test Query" t2="650 x 517 · 31 kB · jpeg" t3="www.short.url" h="ID=images,5045.1">
48+ <img src="https://tse4.mm.bing.net/th?id=HN.608003696942779811&o=4&pid=1.7"
49+ style="height:144px;" width="178" height="144"/>
53+ html = html.replace('\r\n', '').replace('\n', '').replace('\r', '')
54+ response = mock.Mock(content=html)
55+ results = bing_images.response(response)
56+ self.assertEqual(type(results), list)
57+ self.assertEqual(len(results), 1)
58+ self.assertEqual(results[0]['title'], 'Test Query')
59+ self.assertEqual(results[0]['url'], 'http://www.page.url/')
60+ self.assertEqual(results[0]['content'], '')
61+ self.assertEqual(results[0]['thumbnail_src'], 'http://ts1.mm.bing.net/th?id=HN.608003696942779811')
62+ self.assertEqual(results[0]['img_src'], 'http://test.url/Test%20Query.jpg')
65+ <a href="#" ihk="HN.608003696942779811"
66+ m="{ns:"images",k:"5045",
67+ mid:"59EB92C317974F34517A1CCAEBEF76A578E08DEE",
68+ surl:"http://www.page.url/",
69+ imgurl:"http://test.url/Test%20Query.jpg",oh:"238",
70+ tft:"0",oi:"http://www.image.url/Images/Test%20Query.jpg"}"
71+ mid="59EB92C317974F34517A1CCAEBEF76A578E08DEE" onclick="return false;"
72+ t1="Test Query" t2="650 x 517 · 31 kB · jpeg" t3="www.short.url" h="ID=images,5045.1">
73+ <img src="https://tse4.mm.bing.net/th?id=HN.608003696942779811&o=4&pid=1.7"
74+ style="height:144px;" width="178" height="144"/>
77+ response = mock.Mock(content=html)
78+ results = bing_images.response(response)
79+ self.assertEqual(type(results), list)
80+ self.assertEqual(len(results), 0)
83+ <div class="dg_u" style="width:178px;height:144px;left:17px;top:0px">
84+ <a href="#" ihk="HN.608003696942779811"
85+ m="{ns:"images",k:"5045",
86+mid:"659EB92C317974F34517A1CCAEBEF76A578E08DEE",
87+surl:"http://www.page.url/",imgurl:"http://test.url/Test%20Query.jpg",
88+oh:"238",tft:"0",oi:"http://www.image.url/Images/Test%20Query.jpg"}"
89+ mid="59EB92C317974F34517A1CCAEBEF76A578E08DEE" onclick="return false;"
90+ t1="Test Query" t2="650 x 517 · 31 kB · jpeg" t3="www.short.url" h="ID=images,5045.1">
91+ <img src="https://tse4.mm.bing.net/th?id=HN.608003696942779811&o=4&pid=1.7"
92+ style="height:144px;" width="178" height="144"/>
95+ <div class="dg_u" style="width:178px;height:144px;left:17px;top:0px">
96+ <a href="#" ihk="HN.608003696942779811"
97+ m="{ns:"images",k:"5045",
98+mid:"659EB92C317974F34517A1CCAEBEF76A578E08DEE",
99+surl:"http://www.page.url/",imgurl:"http://test.url/Test%20Query.jpg",
100+oh:"238",tft:"0",oi:"http://www.image.url/Images/Test%20Query.jpg"}"
101+ mid="59EB92C317974F34517A1CCAEBEF76A578E08DEE" onclick="return false;"
102+ t1="Test Query" t2="650 x 517 · 31 kB · jpeg" t3="www.short.url" h="ID=images,5045.1">
103+ <img src="https://tse4.mm.bing.net/th?id=HN.608003696942779811&o=4&pid=1.7"
104+ style="height:144px;" width="178" height="144"/>
107+ <div class="dg_u" style="width:178px;height:144px;left:17px;top:0px">
108+ <a href="#" ihk="HN.608003696942779811"
109+ m="{ns:"images",k:"5045",
110+mid:"659EB92C317974F34517A1CCAEBEF76A578E08DEE",
111+surl:"http://www.page.url/",imgurl:"http://test.url/Test%20Query.jpg",
112+oh:"238",tft:"0",oi:"http://www.image.url/Images/Test%20Query.jpg"}"
113+ mid="59EB92C317974F34517A1CCAEBEF76A578E08DEE" onclick="return false;"
114+ t1="Test Query" t2="650 x 517 · 31 kB · jpeg" t3="www.short.url" h="ID=images,5045.1">
115+ <img src="https://tse4.mm.bing.net/th?id=HN.608003696942779811&o=4&pid=1.7"
116+ style="height:144px;" width="178" height="144"/>
119+ <div class="dg_u" style="width:178px;height:144px;left:17px;top:0px">
120+ <a href="#" ihk="HN.608003696942779811"
121+ m="{ns:"images",k:"5045",
122+mid:"659EB92C317974F34517A1CCAEBEF76A578E08DEE",
123+surl:"http://www.page.url/",imgurl:"http://test.url/Test%20Query.jpg",
124+oh:"238",tft:"0",oi:"http://www.image.url/Images/Test%20Query.jpg"}"
125+ mid="59EB92C317974F34517A1CCAEBEF76A578E08DEE" onclick="return false;"
126+ t1="Test Query" t2="650 x 517 · 31 kB · jpeg" t3="www.short.url" h="ID=images,5045.1">
127+ <img src="https://tse4.mm.bing.net/th?id=HN.608003696942779811&o=4&pid=1.7"
128+ style="height:144px;" width="178" height="144"/>
131+ <div class="dg_u" style="width:178px;height:144px;left:17px;top:0px">
132+ <a href="#" ihk="HN.608003696942779811"
133+ m="{ns:"images",k:"5045",
134+mid:"659EB92C317974F34517A1CCAEBEF76A578E08DEE",
135+surl:"http://www.page.url/",imgurl:"http://test.url/Test%20Query.jpg",
136+oh:"238",tft:"0",oi:"http://www.image.url/Images/Test%20Query.jpg"}"
137+ mid="59EB92C317974F34517A1CCAEBEF76A578E08DEE" onclick="return false;"
138+ t1="Test Query" t2="650 x 517 · 31 kB · jpeg" t3="www.short.url" h="ID=images,5045.1">
139+ <img src="https://tse4.mm.bing.net/th?id=HN.608003696942779811&o=4&pid=1.7"
140+ style="height:144px;" width="178" height="144"/>
143+ <div class="dg_u" style="width:178px;height:144px;left:17px;top:0px">
144+ <a href="#" ihk="HN.608003696942779811"
145+ m="{ns:"images",k:"5045",
146+mid:"659EB92C317974F34517A1CCAEBEF76A578E08DEE",
147+surl:"http://www.page.url/",imgurl:"http://test.url/Test%20Query.jpg",
148+oh:"238",tft:"0",oi:"http://www.image.url/Images/Test%20Query.jpg"}"
149+ mid="59EB92C317974F34517A1CCAEBEF76A578E08DEE" onclick="return false;"
150+ t1="Test Query" t2="650 x 517 · 31 kB · jpeg" t3="www.short.url" h="ID=images,5045.1">
151+ <img src="https://tse4.mm.bing.net/th?id=HN.608003696942779811&o=4&pid=1.7"
152+ style="height:144px;" width="178" height="144"/>
155+ <div class="dg_u" style="width:178px;height:144px;left:17px;top:0px">
156+ <a href="#" ihk="HN.608003696942779811"
157+ m="{ns:"images",k:"5045",
158+mid:"659EB92C317974F34517A1CCAEBEF76A578E08DEE",
159+surl:"http://www.page.url/",imgurl:"http://test.url/Test%20Query.jpg",
160+oh:"238",tft:"0",oi:"http://www.image.url/Images/Test%20Query.jpg"}"
161+ mid="59EB92C317974F34517A1CCAEBEF76A578E08DEE" onclick="return false;"
162+ t1="Test Query" t2="650 x 517 · 31 kB · jpeg" t3="www.short.url" h="ID=images,5045.1">
163+ <img src="https://tse4.mm.bing.net/th?id=HN.608003696942779811&o=4&pid=1.7"
164+ style="height:144px;" width="178" height="144"/>
167+ <div class="dg_u" style="width:178px;height:144px;left:17px;top:0px">
168+ <a href="#" ihk="HN.608003696942779811"
169+ m="{ns:"images",k:"5045",
170+mid:"659EB92C317974F34517A1CCAEBEF76A578E08DEE",
171+surl:"http://www.page.url/",imgurl:"http://test.url/Test%20Query.jpg",
172+oh:"238",tft:"0",oi:"http://www.image.url/Images/Test%20Query.jpg"}"
173+ mid="59EB92C317974F34517A1CCAEBEF76A578E08DEE" onclick="return false;"
174+ t1="Test Query" t2="650 x 517 · 31 kB · jpeg" t3="www.short.url" h="ID=images,5045.1">
175+ <img src="https://tse4.mm.bing.net/th?id=HN.608003696942779811&o=4&pid=1.7"
176+ style="height:144px;" width="178" height="144"/>
179+ <div class="dg_u" style="width:178px;height:144px;left:17px;top:0px">
180+ <a href="#" ihk="HN.608003696942779811"
181+ m="{ns:"images",k:"5045",
182+mid:"659EB92C317974F34517A1CCAEBEF76A578E08DEE",
183+surl:"http://www.page.url/",imgurl:"http://test.url/Test%20Query.jpg",
184+oh:"238",tft:"0",oi:"http://www.image.url/Images/Test%20Query.jpg"}"
185+ mid="59EB92C317974F34517A1CCAEBEF76A578E08DEE" onclick="return false;"
186+ t1="Test Query" t2="650 x 517 · 31 kB · jpeg" t3="www.short.url" h="ID=images,5045.1">
187+ <img src="https://tse4.mm.bing.net/th?id=HN.608003696942779811&o=4&pid=1.7"
188+ style="height:144px;" width="178" height="144"/>
191+ <div class="dg_u" style="width:178px;height:144px;left:17px;top:0px">
192+ <a href="#" ihk="HN.608003696942779811"
193+ m="{ns:"images",k:"5045",
194+mid:"659EB92C317974F34517A1CCAEBEF76A578E08DEE",
195+surl:"http://www.page.url/",imgurl:"http://test.url/Test%20Query.jpg",
196+oh:"238",tft:"0",oi:"http://www.image.url/Images/Test%20Query.jpg"}"
197+ mid="59EB92C317974F34517A1CCAEBEF76A578E08DEE" onclick="return false;"
198+ t1="Test Query" t2="650 x 517 · 31 kB · jpeg" t3="www.short.url" h="ID=images,5045.1">
199+ <img src="https://tse4.mm.bing.net/th?id=HN.608003696942779811&o=4&pid=1.7"
200+ style="height:144px;" width="178" height="144"/>
203+ <div class="dg_u" style="width:178px;height:144px;left:17px;top:0px">
204+ <a href="#" ihk="HN.608003696942779811"
205+ m="{ns:"images",k:"5045",
206+mid:"659EB92C317974F34517A1CCAEBEF76A578E08DEE",
207+surl:"http://www.page.url/",imgurl:"http://test.url/Test%20Query.jpg",
208+oh:"238",tft:"0",oi:"http://www.image.url/Images/Test%20Query.jpg"}"
209+ mid="59EB92C317974F34517A1CCAEBEF76A578E08DEE" onclick="return false;"
210+ t1="Test Query" t2="650 x 517 · 31 kB · jpeg" t3="www.short.url" h="ID=images,5045.1">
211+ <img src="https://tse4.mm.bing.net/th?id=HN.608003696942779811&o=4&pid=1.7"
212+ style="height:144px;" width="178" height="144"/>
215+ <div class="dg_u" style="width:178px;height:144px;left:17px;top:0px">
216+ <a href="#" ihk="HN.608003696942779811"
217+ m="{ns:"images",k:"5045",
218+mid:"659EB92C317974F34517A1CCAEBEF76A578E08DEE",
219+surl:"http://www.page.url/",imgurl:"http://test.url/Test%20Query.jpg",
220+oh:"238",tft:"0",oi:"http://www.image.url/Images/Test%20Query.jpg"}"
221+ mid="59EB92C317974F34517A1CCAEBEF76A578E08DEE" onclick="return false;"
222+ t1="Test Query" t2="650 x 517 · 31 kB · jpeg" t3="www.short.url" h="ID=images,5045.1">
223+ <img src="https://tse4.mm.bing.net/th?id=HN.608003696942779811&o=4&pid=1.7"
224+ style="height:144px;" width="178" height="144"/>
227+ <div class="dg_u" style="width:178px;height:144px;left:17px;top:0px">
228+ <a href="#" ihk="HN.608003696942779811"
229+ m="{ns:"images",k:"5045",
230+mid:"659EB92C317974F34517A1CCAEBEF76A578E08DEE",
231+surl:"http://www.page.url/",imgurl:"http://test.url/Test%20Query.jpg",
232+oh:"238",tft:"0",oi:"http://www.image.url/Images/Test%20Query.jpg"}"
233+ mid="59EB92C317974F34517A1CCAEBEF76A578E08DEE" onclick="return false;"
234+ t1="Test Query" t2="650 x 517 · 31 kB · jpeg" t3="www.short.url" h="ID=images,5045.1">
235+ <img src="https://tse4.mm.bing.net/th?id=HN.608003696942779811&o=4&pid=1.7"
236+ style="height:144px;" width="178" height="144"/>
239+ <div class="dg_u" style="width:178px;height:144px;left:17px;top:0px">
240+ <a href="#" ihk="HN.608003696942779811"
241+ m="{ns:"images",k:"5045",
242+mid:"659EB92C317974F34517A1CCAEBEF76A578E08DEE",
243+surl:"http://www.page.url/",imgurl:"http://test.url/Test%20Query.jpg",
244+oh:"238",tft:"0",oi:"http://www.image.url/Images/Test%20Query.jpg"}"
245+ mid="59EB92C317974F34517A1CCAEBEF76A578E08DEE" onclick="return false;"
246+ t1="Test Query" t2="650 x 517 · 31 kB · jpeg" t3="www.short.url" h="ID=images,5045.1">
247+ <img src="https://tse4.mm.bing.net/th?id=HN.608003696942779811&o=4&pid=1.7"
248+ style="height:144px;" width="178" height="144"/>
251+ <div class="dg_u" style="width:178px;height:144px;left:17px;top:0px">
252+ <a href="#" ihk="HN.608003696942779811"
253+ m="{ns:"images",k:"5045",
254+mid:"659EB92C317974F34517A1CCAEBEF76A578E08DEE",
255+surl:"http://www.page.url/",imgurl:"http://test.url/Test%20Query.jpg",
256+oh:"238",tft:"0",oi:"http://www.image.url/Images/Test%20Query.jpg"}"
257+ mid="59EB92C317974F34517A1CCAEBEF76A578E08DEE" onclick="return false;"
258+ t1="Test Query" t2="650 x 517 · 31 kB · jpeg" t3="www.short.url" h="ID=images,5045.1">
259+ <img src="https://tse4.mm.bing.net/th?id=HN.608003696942779811&o=4&pid=1.7"
260+ style="height:144px;" width="178" height="144"/>
264+ html = html.replace('\r\n', '').replace('\n', '').replace('\r', '')
265+ response = mock.Mock(content=html)
266+ results = bing_images.response(response)
267+ self.assertEqual(type(results), list)
268+ self.assertEqual(len(results), 10)