Skip to content

Commit 1deea66

Browse files
committed
Improve test coverage
1 parent 82271c9 commit 1deea66

File tree

8 files changed

+109
-76
lines changed

8 files changed

+109
-76
lines changed

.coveragerc

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,5 @@ branch = True
33
source = aiohttp, tests
44
omit = site-packages
55

6-
[report]
7-
exclude_lines =
8-
@abc.
9-
pragma: no cover
10-
116
[html]
127
directory = coverage

.travis.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ install:
99
- pip install flake8
1010
- pip install docutils
1111
- pip install coverage
12+
- pip install gunicorn
13+
- pip install chardet
1214
- python setup.py develop
1315

1416
script:

aiohttp/client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -741,7 +741,7 @@ def _get_encoding(self, encoding):
741741
encoding = params.get('charset')
742742
if not encoding and chardet:
743743
encoding = chardet.detect(self._content)['encoding']
744-
if not encoding: # pragma: no cover
744+
if not encoding:
745745
encoding = 'utf-8'
746746

747747
return encoding

tests/test_client.py

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
try:
1515
import chardet
16-
except ImportError:
16+
except ImportError: # pragma: no cover
1717
chardet = None
1818

1919

@@ -171,14 +171,27 @@ def second_call(*args, **kwargs):
171171
content.read.side_effect = side_effect
172172
self.response.close = unittest.mock.Mock()
173173

174-
if chardet is None:
174+
res = self.loop.run_until_complete(self.response.text())
175+
self.assertEqual(res, '{"тест": "пройден"}')
176+
self.assertTrue(self.response.close.called)
177+
178+
def test_text_detect_encoding_without_chardet(self):
179+
def side_effect(*args, **kwargs):
180+
def second_call(*args, **kwargs):
181+
raise aiohttp.EofStream
182+
fut = asyncio.Future(loop=self.loop)
183+
fut.set_result('{"тест": "пройден"}'.encode('cp1251'))
184+
content.read.side_effect = second_call
185+
return fut
186+
self.response.headers = {'CONTENT-TYPE': 'application/json'}
187+
content = self.response.content = unittest.mock.Mock()
188+
content.read.side_effect = side_effect
189+
self.response.close = unittest.mock.Mock()
190+
191+
with unittest.mock.patch('aiohttp.client.chardet', None):
175192
self.assertRaises(UnicodeDecodeError,
176193
self.loop.run_until_complete,
177194
self.response.text())
178-
else:
179-
res = self.loop.run_until_complete(self.response.text())
180-
self.assertEqual(res, '{"тест": "пройден"}')
181-
self.assertTrue(self.response.close.called)
182195

183196
def test_json(self):
184197
def side_effect(*args, **kwargs):
@@ -254,14 +267,27 @@ def second_call(*args, **kwargs):
254267
content.read.side_effect = side_effect
255268
self.response.close = unittest.mock.Mock()
256269

257-
if chardet is None:
270+
res = self.loop.run_until_complete(self.response.json())
271+
self.assertEqual(res, {'тест': 'пройден'})
272+
self.assertTrue(self.response.close.called)
273+
274+
def test_json_detect_encoding_without_chardet(self):
275+
def side_effect(*args, **kwargs):
276+
def second_call(*args, **kwargs):
277+
raise aiohttp.EofStream
278+
fut = asyncio.Future(loop=self.loop)
279+
fut.set_result('{"тест": "пройден"}'.encode('cp1251'))
280+
content.read.side_effect = second_call
281+
return fut
282+
self.response.headers = {'CONTENT-TYPE': 'application/json'}
283+
content = self.response.content = unittest.mock.Mock()
284+
content.read.side_effect = side_effect
285+
self.response.close = unittest.mock.Mock()
286+
287+
with unittest.mock.patch('aiohttp.client.chardet', None):
258288
self.assertRaises(UnicodeDecodeError,
259289
self.loop.run_until_complete,
260290
self.response.json())
261-
else:
262-
res = self.loop.run_until_complete(self.response.json())
263-
self.assertEqual(res, {'тест': 'пройден'})
264-
self.assertTrue(self.response.close.called)
265291

266292
def test_override_flow_control(self):
267293
class MyResponse(ClientResponse):

tests/test_client_functional.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1063,11 +1063,7 @@ class Functional(test_utils.Router):
10631063

10641064
@test_utils.Router.define('/method/([A-Za-z]+)$')
10651065
def method(self, match):
1066-
meth = match.group(1).upper()
1067-
if meth == self._method:
1068-
self._response(self._start_response(200))
1069-
else:
1070-
self._response(self._start_response(400))
1066+
self._response(self._start_response(200))
10711067

10721068
@test_utils.Router.define('/redirect_err$')
10731069
def redirect_err(self, match):

tests/test_connector.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,7 @@ def coro(*args, **kw):
394394
if isinstance(return_value, Exception):
395395
raise return_value
396396
return return_value
397-
yield
397+
yield # pragma: no cover
398398
mock.side_effect = coro
399399

400400
def test_ctor(self):

0 commit comments

Comments
 (0)