Add unit tests for lib/ansible/module_utils/common/text/converters.py (#56915)
Co-Authored-By: Sviatoslav Sydorenko <wk.cvs.github@sydorenko.org.ua>
This commit is contained in:
parent
cac34ac568
commit
01ed7a489a
4 changed files with 255 additions and 0 deletions
|
@ -0,0 +1,95 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright 2019, Andrew Klychkov @Andersson007 <aaklychkov@mail.ru>
|
||||||
|
# Simplified BSD License (see licenses/simplified_bsd.txt or https://opensource.org/licenses/BSD-2-Clause)
|
||||||
|
|
||||||
|
from __future__ import absolute_import, division, print_function
|
||||||
|
__metaclass__ = type
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from ansible.module_utils.common.text.converters import container_to_bytes
|
||||||
|
|
||||||
|
|
||||||
|
DEFAULT_ENCODING = 'utf-8'
|
||||||
|
DEFAULT_ERR_HANDLER = 'surrogate_or_strict'
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
'test_input,expected',
|
||||||
|
[
|
||||||
|
({1: 1}, {1: 1}),
|
||||||
|
([1, 2], [1, 2]),
|
||||||
|
((1, 2), (1, 2)),
|
||||||
|
(1, 1),
|
||||||
|
(1.1, 1.1),
|
||||||
|
(b'str', b'str'),
|
||||||
|
(u'str', b'str'),
|
||||||
|
([u'str'], [b'str']),
|
||||||
|
((u'str'), (b'str')),
|
||||||
|
({u'str': u'str'}, {b'str': b'str'}),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
@pytest.mark.parametrize('encoding', ['utf-8', 'latin1', 'shift_jis', 'big5', 'koi8_r'])
|
||||||
|
@pytest.mark.parametrize('errors', ['strict', 'surrogate_or_strict', 'surrogate_then_replace'])
|
||||||
|
def test_container_to_bytes(test_input, expected, encoding, errors):
|
||||||
|
"""Test for passing objects to container_to_bytes()."""
|
||||||
|
assert container_to_bytes(test_input, encoding=encoding, errors=errors) == expected
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
'test_input,expected',
|
||||||
|
[
|
||||||
|
({1: 1}, {1: 1}),
|
||||||
|
([1, 2], [1, 2]),
|
||||||
|
((1, 2), (1, 2)),
|
||||||
|
(1, 1),
|
||||||
|
(1.1, 1.1),
|
||||||
|
(True, True),
|
||||||
|
(None, None),
|
||||||
|
(u'str', u'str'.encode(DEFAULT_ENCODING)),
|
||||||
|
(u'くらとみ', u'くらとみ'.encode(DEFAULT_ENCODING)),
|
||||||
|
(u'café', u'café'.encode(DEFAULT_ENCODING)),
|
||||||
|
(b'str', u'str'.encode(DEFAULT_ENCODING)),
|
||||||
|
(u'str', u'str'.encode(DEFAULT_ENCODING)),
|
||||||
|
([u'str'], [u'str'.encode(DEFAULT_ENCODING)]),
|
||||||
|
((u'str'), (u'str'.encode(DEFAULT_ENCODING))),
|
||||||
|
({u'str': u'str'}, {u'str'.encode(DEFAULT_ENCODING): u'str'.encode(DEFAULT_ENCODING)}),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
def test_container_to_bytes_default_encoding_err(test_input, expected):
|
||||||
|
"""
|
||||||
|
Test for passing objects to container_to_bytes(). Default encoding and errors
|
||||||
|
"""
|
||||||
|
assert container_to_bytes(test_input, encoding=DEFAULT_ENCODING,
|
||||||
|
errors=DEFAULT_ERR_HANDLER) == expected
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
'test_input,encoding',
|
||||||
|
[
|
||||||
|
(u'くらとみ', 'latin1'),
|
||||||
|
(u'café', 'shift_jis'),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
@pytest.mark.parametrize('errors', ['surrogate_or_strict', 'strict'])
|
||||||
|
def test_container_to_bytes_incomp_chars_and_encod(test_input, encoding, errors):
|
||||||
|
"""
|
||||||
|
Test for passing incompatible characters and encodings container_to_bytes().
|
||||||
|
"""
|
||||||
|
with pytest.raises(UnicodeEncodeError, match="codec can't encode"):
|
||||||
|
container_to_bytes(test_input, encoding=encoding, errors=errors)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
'test_input,encoding,expected',
|
||||||
|
[
|
||||||
|
(u'くらとみ', 'latin1', b'????'),
|
||||||
|
(u'café', 'shift_jis', b'caf?'),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
def test_container_to_bytes_surrogate_then_replace(test_input, encoding, expected):
|
||||||
|
"""
|
||||||
|
Test for container_to_bytes() with surrogate_then_replace err handler.
|
||||||
|
"""
|
||||||
|
assert container_to_bytes(test_input, encoding=encoding,
|
||||||
|
errors='surrogate_then_replace') == expected
|
|
@ -0,0 +1,78 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright 2019, Andrew Klychkov @Andersson007 <aaklychkov@mail.ru>
|
||||||
|
# Simplified BSD License (see licenses/simplified_bsd.txt or https://opensource.org/licenses/BSD-2-Clause)
|
||||||
|
|
||||||
|
from __future__ import absolute_import, division, print_function
|
||||||
|
__metaclass__ = type
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from ansible.module_utils.common.text.converters import container_to_text
|
||||||
|
|
||||||
|
|
||||||
|
DEFAULT_ENCODING = 'utf-8'
|
||||||
|
DEFAULT_ERR_HANDLER = 'surrogate_or_strict'
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
'test_input,expected',
|
||||||
|
[
|
||||||
|
({1: 1}, {1: 1}),
|
||||||
|
([1, 2], [1, 2]),
|
||||||
|
((1, 2), (1, 2)),
|
||||||
|
(1, 1),
|
||||||
|
(1.1, 1.1),
|
||||||
|
(b'str', u'str'),
|
||||||
|
(u'str', u'str'),
|
||||||
|
([b'str'], [u'str']),
|
||||||
|
((b'str'), (u'str')),
|
||||||
|
({b'str': b'str'}, {u'str': u'str'}),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
@pytest.mark.parametrize('encoding', ['utf-8', 'latin1', 'shift-jis', 'big5', 'koi8_r', ])
|
||||||
|
@pytest.mark.parametrize('errors', ['strict', 'surrogate_or_strict', 'surrogate_then_replace', ])
|
||||||
|
def test_container_to_text_different_types(test_input, expected, encoding, errors):
|
||||||
|
"""Test for passing objects to container_to_text()."""
|
||||||
|
assert container_to_text(test_input, encoding=encoding, errors=errors) == expected
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
'test_input,expected',
|
||||||
|
[
|
||||||
|
({1: 1}, {1: 1}),
|
||||||
|
([1, 2], [1, 2]),
|
||||||
|
((1, 2), (1, 2)),
|
||||||
|
(1, 1),
|
||||||
|
(1.1, 1.1),
|
||||||
|
(True, True),
|
||||||
|
(None, None),
|
||||||
|
(u'str', u'str'),
|
||||||
|
(u'くらとみ'.encode(DEFAULT_ENCODING), u'くらとみ'),
|
||||||
|
(u'café'.encode(DEFAULT_ENCODING), u'café'),
|
||||||
|
(u'str'.encode(DEFAULT_ENCODING), u'str'),
|
||||||
|
([u'str'.encode(DEFAULT_ENCODING)], [u'str']),
|
||||||
|
((u'str'.encode(DEFAULT_ENCODING)), (u'str')),
|
||||||
|
({b'str': b'str'}, {u'str': u'str'}),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
def test_container_to_text_default_encoding_and_err(test_input, expected):
|
||||||
|
"""
|
||||||
|
Test for passing objects to container_to_text(). Default encoding and errors
|
||||||
|
"""
|
||||||
|
assert container_to_text(test_input, encoding=DEFAULT_ENCODING,
|
||||||
|
errors=DEFAULT_ERR_HANDLER) == expected
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
'test_input,encoding,expected',
|
||||||
|
[
|
||||||
|
(u'й'.encode('utf-8'), 'latin1', u'й'),
|
||||||
|
(u'café'.encode('utf-8'), 'shift_jis', u'cafテゥ'),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
@pytest.mark.parametrize('errors', ['strict', 'surrogate_or_strict', 'surrogate_then_replace', ])
|
||||||
|
def test_container_to_text_incomp_encod_chars(test_input, encoding, errors, expected):
|
||||||
|
"""
|
||||||
|
Test for passing incompatible characters and encodings container_to_text().
|
||||||
|
"""
|
||||||
|
assert container_to_text(test_input, encoding=encoding, errors=errors) == expected
|
|
@ -0,0 +1,55 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright 2019, Andrew Klychkov @Andersson007 <aaklychkov@mail.ru>
|
||||||
|
# Simplified BSD License (see licenses/simplified_bsd.txt or https://opensource.org/licenses/BSD-2-Clause)
|
||||||
|
|
||||||
|
from __future__ import absolute_import, division, print_function
|
||||||
|
__metaclass__ = type
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from pytz import timezone as tz
|
||||||
|
|
||||||
|
from ansible.module_utils.common.text.converters import _json_encode_fallback
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
'test_input,expected',
|
||||||
|
[
|
||||||
|
(set([1]), [1]),
|
||||||
|
(datetime(2019, 5, 14, 13, 39, 38, 569047), '2019-05-14T13:39:38.569047'),
|
||||||
|
(datetime(2019, 5, 14, 13, 47, 16, 923866), '2019-05-14T13:47:16.923866'),
|
||||||
|
(datetime(2019, 6, 15, 14, 45, tzinfo=tz('UTC')), '2019-06-15T14:45:00+00:00'),
|
||||||
|
(datetime(2019, 6, 15, 14, 45, tzinfo=tz('Europe/Helsinki')), '2019-06-15T14:45:00+01:40'),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
def test_json_encode_fallback(test_input, expected):
|
||||||
|
"""
|
||||||
|
Test for passing expected objects to _json_encode_fallback().
|
||||||
|
"""
|
||||||
|
assert _json_encode_fallback(test_input) == expected
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
'test_input',
|
||||||
|
[
|
||||||
|
1,
|
||||||
|
1.1,
|
||||||
|
u'string',
|
||||||
|
b'string',
|
||||||
|
[1, 2],
|
||||||
|
True,
|
||||||
|
None,
|
||||||
|
{1: 1},
|
||||||
|
(1, 2),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
def test_json_encode_fallback_default_behavior(test_input):
|
||||||
|
"""
|
||||||
|
Test for _json_encode_fallback() default behavior.
|
||||||
|
|
||||||
|
It must fail with TypeError.
|
||||||
|
"""
|
||||||
|
with pytest.raises(TypeError, match='Cannot json serialize'):
|
||||||
|
_json_encode_fallback(test_input)
|
|
@ -0,0 +1,27 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright 2019, Andrew Klychkov @Andersson007 <aaklychkov@mail.ru>
|
||||||
|
# Simplified BSD License (see licenses/simplified_bsd.txt or https://opensource.org/licenses/BSD-2-Clause)
|
||||||
|
|
||||||
|
from __future__ import absolute_import, division, print_function
|
||||||
|
__metaclass__ = type
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from ansible.module_utils.common.text.converters import jsonify
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
'test_input,expected',
|
||||||
|
[
|
||||||
|
(1, '1'),
|
||||||
|
(u'string', u'"string"'),
|
||||||
|
(u'くらとみ', u'"\\u304f\\u3089\\u3068\\u307f"'),
|
||||||
|
(u'café', u'"caf\\u00e9"'),
|
||||||
|
(b'string', u'"string"'),
|
||||||
|
(False, u'false'),
|
||||||
|
(u'string'.encode('utf-8'), u'"string"'),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
def test_jsonify(test_input, expected):
|
||||||
|
"""Test for jsonify()."""
|
||||||
|
assert jsonify(test_input) == expected
|
Loading…
Reference in a new issue