# coding: utf-8
"""Unicode version level tests for wcwidth."""
# std imports
import warnings
# 3rd party
import pytest
# local
import wcwidth
def test_latest():
"""wcwidth._wcmatch_version('latest') returns tail item."""
# given,
expected = wcwidth.list_versions()[-1]
# exercise,
result = wcwidth._wcmatch_version('latest')
# verify.
assert result == expected
def test_exact_410_str():
"""wcwidth._wcmatch_version('4.1.0') returns equal value (str)."""
# given,
given = expected = '4.1.0'
# exercise,
result = wcwidth._wcmatch_version(given)
# verify.
assert result == expected
def test_exact_410_unicode():
"""wcwidth._wcmatch_version(u'4.1.0') returns equal value (unicode)."""
# given,
given = expected = u'4.1.0'
# exercise,
result = wcwidth._wcmatch_version(given)
# verify.
assert result == expected
def test_nearest_505_str():
"""wcwidth._wcmatch_version('5.0.5') returns nearest '5.0.0'. (str)"""
# given
given, expected = '5.0.5', '5.0.0'
# exercise
result = wcwidth._wcmatch_version(given)
# verify.
assert result == expected
def test_nearest_505_unicode():
"""wcwidth._wcmatch_version(u'5.0.5') returns nearest u'5.0.0'. (unicode)"""
# given
given, expected = u'5.0.5', u'5.0.0'
# exercise
result = wcwidth._wcmatch_version(given)
# verify.
assert result == expected
def test_nearest_lowint40_str():
"""wcwidth._wcmatch_version('4.0') returns nearest '4.1.0'."""
# given
given, expected = '4.0', '4.1.0'
warnings.resetwarnings()
wcwidth._wcmatch_version.cache_clear()
# exercise
with pytest.warns(UserWarning):
# warns that given version is lower than any available
result = wcwidth._wcmatch_version(given)
# verify.
assert result == expected
def test_nearest_lowint40_unicode():
"""wcwidth._wcmatch_version(u'4.0') returns nearest u'4.1.0'."""
# given
given, expected = u'4.0', u'4.1.0'
warnings.resetwarnings()
wcwidth._wcmatch_version.cache_clear()
# exercise
with pytest.warns(UserWarning):
# warns that given version is lower than any available
result = wcwidth._wcmatch_version(given)
# verify.
assert result == expected
def test_nearest_800_str():
"""wcwidth._wcmatch_version('8') returns nearest '8.0.0'."""
# given
given, expected = '8', '8.0.0'
# exercise
result = wcwidth._wcmatch_version(given)
# verify.
assert result == expected
def test_nearest_800_unicode():
"""wcwidth._wcmatch_version(u'8') returns nearest u'8.0.0'."""
# given
given, expected = u'8', u'8.0.0'
# exercise
result = wcwidth._wcmatch_version(given)
# verify.
assert result == expected
def test_nearest_999_str():
"""wcwidth._wcmatch_version('999.0') returns nearest (latest)."""
# given
given, expected = '999.0', wcwidth.list_versions()[-1]
# exercise
result = wcwidth._wcmatch_version(given)
# verify.
assert result == expected
def test_nearest_999_unicode():
"""wcwidth._wcmatch_version(u'999.0') returns nearest (latest)."""
# given
given, expected = u'999.0', wcwidth.list_versions()[-1]
# exercise
result = wcwidth._wcmatch_version(given)
# verify.
assert result == expected
def test_nonint_unicode():
"""wcwidth._wcmatch_version(u'x.y.z') returns latest (unicode)."""
# given
given, expected = u'x.y.z', wcwidth.list_versions()[-1]
warnings.resetwarnings()
wcwidth._wcmatch_version.cache_clear()
# exercise
with pytest.warns(UserWarning):
# warns that given version is not valid
result = wcwidth._wcmatch_version(given)
# verify.
assert result == expected
def test_nonint_str():
"""wcwidth._wcmatch_version(u'x.y.z') returns latest (str)."""
# given
given, expected = 'x.y.z', wcwidth.list_versions()[-1]
warnings.resetwarnings()
wcwidth._wcmatch_version.cache_clear()
# exercise
with pytest.warns(UserWarning):
# warns that given version is not valid
result = wcwidth._wcmatch_version(given)
# verify.
assert result == expected