63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
import logging
|
|
from unittest.mock import patch
|
|
from pytest import (
|
|
raises, fixture
|
|
)
|
|
|
|
from kiwi.utils.codec import Codec
|
|
|
|
from kiwi.exceptions import KiwiDecodingError
|
|
|
|
|
|
class TestCodec:
|
|
@fixture(autouse=True)
|
|
def inject_fixtures(self, caplog):
|
|
self._caplog = caplog
|
|
|
|
def setup(self):
|
|
self.literal = bytes(b'\xc3\xbc')
|
|
|
|
def setup_method(self, cls):
|
|
self.setup()
|
|
|
|
@patch('kiwi.utils.codec.Codec._wrapped_decode')
|
|
def test_decode_ascii_failure(self, mock_decode):
|
|
msg = 'utf-8 compatible string'
|
|
|
|
def mocked_decode(literal, encoding, error_handling_schema):
|
|
if encoding:
|
|
return msg
|
|
else:
|
|
raise KiwiDecodingError('ascii decoding failure')
|
|
|
|
mock_decode.side_effect = mocked_decode
|
|
with self._caplog.at_level(logging.WARNING):
|
|
assert msg == Codec.decode(self.literal)
|
|
|
|
def test_decode_None_literal(self):
|
|
assert '' == Codec.decode(None)
|
|
|
|
@patch('kiwi.utils.codec.Codec._wrapped_decode')
|
|
def test_decode(self, mock_decode):
|
|
msg = 'utf-8 compatible string'
|
|
mock_decode.return_value = msg
|
|
assert msg == Codec.decode(self.literal)
|
|
|
|
@patch('kiwi.utils.codec.Codec._wrapped_decode')
|
|
def test_decode_utf8_failure(self, mock_decode):
|
|
def mocked_decode(literal, encoding, error_handling_schema):
|
|
if encoding:
|
|
raise KiwiDecodingError('utf-8 decoding failure')
|
|
else:
|
|
raise KiwiDecodingError('ascii decoding failure')
|
|
|
|
mock_decode.side_effect = mocked_decode
|
|
with raises(KiwiDecodingError):
|
|
with self._caplog.at_level(logging.WARNING):
|
|
Codec.decode(self.literal)
|
|
|
|
def test_wrapped_decode(self):
|
|
assert self.literal.decode() == Codec._wrapped_decode(
|
|
self.literal, 'utf-8'
|
|
)
|