diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /contrib/python/wcwidth/tests | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'contrib/python/wcwidth/tests')
-rwxr-xr-x | contrib/python/wcwidth/tests/test_core.py | 154 | ||||
-rw-r--r-- | contrib/python/wcwidth/tests/test_ucslevel.py | 184 | ||||
-rw-r--r-- | contrib/python/wcwidth/tests/ya.make | 16 |
3 files changed, 354 insertions, 0 deletions
diff --git a/contrib/python/wcwidth/tests/test_core.py b/contrib/python/wcwidth/tests/test_core.py new file mode 100755 index 00000000000..e61a27efd79 --- /dev/null +++ b/contrib/python/wcwidth/tests/test_core.py @@ -0,0 +1,154 @@ +# coding: utf-8 +"""Core tests for wcwidth module.""" +# 3rd party +import pkg_resources + +# local +import wcwidth + + +def test_package_version(): + """wcwidth.__version__ is expected value.""" + # given, + expected = pkg_resources.get_distribution('wcwidth').version + + # exercise, + result = wcwidth.__version__ + + # verify. + assert result == expected + + +def test_hello_jp(): + u""" + Width of Japanese phrase: コンニチハ, セカイ! + + Given a phrase of 5 and 3 Katakana ideographs, joined with + 3 English-ASCII punctuation characters, totaling 11, this + phrase consumes 19 cells of a terminal emulator. + """ + # given, + phrase = u'コンニチハ, セカイ!' + expect_length_each = (2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 1) + expect_length_phrase = sum(expect_length_each) + + # exercise, + length_each = tuple(map(wcwidth.wcwidth, phrase)) + length_phrase = wcwidth.wcswidth(phrase) + + # verify. + assert length_each == expect_length_each + assert length_phrase == expect_length_phrase + + +def test_wcswidth_substr(): + """ + Test wcswidth() optional 2nd parameter, ``n``. + + ``n`` determines at which position of the string + to stop counting length. + """ + # given, + phrase = u'コンニチハ, セカイ!' + end = 7 + expect_length_each = (2, 2, 2, 2, 2, 1, 1,) + expect_length_phrase = sum(expect_length_each) + + # exercise, + length_phrase = wcwidth.wcswidth(phrase, end) + + # verify. + assert length_phrase == expect_length_phrase + + +def test_null_width_0(): + """NULL (0) reports width 0.""" + # given, + phrase = u'abc\x00def' + expect_length_each = (1, 1, 1, 0, 1, 1, 1) + expect_length_phrase = sum(expect_length_each) + + # exercise, + length_each = tuple(map(wcwidth.wcwidth, phrase)) + length_phrase = wcwidth.wcswidth(phrase, len(phrase)) + + # verify. + assert length_each == expect_length_each + assert length_phrase == expect_length_phrase + + +def test_control_c0_width_negative_1(): + """CSI (Control sequence initiate) reports width -1 for ESC.""" + # given, + phrase = u'\x1b[0m' + expect_length_each = (-1, 1, 1, 1) + expect_length_phrase = -1 + + # exercise, + length_each = tuple(map(wcwidth.wcwidth, phrase)) + length_phrase = wcwidth.wcswidth(phrase, len(phrase)) + + # verify. + assert length_each == expect_length_each + assert length_phrase == expect_length_phrase + + +def test_combining_width(): + """Simple test combining reports total width of 4.""" + # given, + phrase = u'--\u05bf--' + expect_length_each = (1, 1, 0, 1, 1) + expect_length_phrase = 4 + + # exercise, + length_each = tuple(map(wcwidth.wcwidth, phrase)) + length_phrase = wcwidth.wcswidth(phrase, len(phrase)) + + # verify. + assert length_each == expect_length_each + assert length_phrase == expect_length_phrase + + +def test_combining_cafe(): + u"""Phrase cafe + COMBINING ACUTE ACCENT is café of length 4.""" + phrase = u"cafe\u0301" + expect_length_each = (1, 1, 1, 1, 0) + expect_length_phrase = 4 + + # exercise, + length_each = tuple(map(wcwidth.wcwidth, phrase)) + length_phrase = wcwidth.wcswidth(phrase, len(phrase)) + + # verify. + assert length_each == expect_length_each + assert length_phrase == expect_length_phrase + + +def test_combining_enclosing(): + u"""CYRILLIC CAPITAL LETTER A + COMBINING CYRILLIC HUNDRED THOUSANDS SIGN is А҈ of length 1.""" + phrase = u"\u0410\u0488" + expect_length_each = (1, 0) + expect_length_phrase = 1 + + # exercise, + length_each = tuple(map(wcwidth.wcwidth, phrase)) + length_phrase = wcwidth.wcswidth(phrase, len(phrase)) + + # verify. + assert length_each == expect_length_each + assert length_phrase == expect_length_phrase + + +def test_combining_spacing(): + u"""Balinese kapal (ship) is ᬓᬨᬮ᭄ of length 4.""" + phrase = u"\u1B13\u1B28\u1B2E\u1B44" + expect_length_each = (1, 1, 1, 1) + expect_length_phrase = 4 + + # exercise, + length_each = tuple(map(wcwidth.wcwidth, phrase)) + length_phrase = wcwidth.wcswidth(phrase, len(phrase)) + + # verify. + assert length_each == expect_length_each + assert length_phrase == expect_length_phrase diff --git a/contrib/python/wcwidth/tests/test_ucslevel.py b/contrib/python/wcwidth/tests/test_ucslevel.py new file mode 100644 index 00000000000..0e2ff668ea6 --- /dev/null +++ b/contrib/python/wcwidth/tests/test_ucslevel.py @@ -0,0 +1,184 @@ +# coding: utf-8 +"""Unicode version level tests for wcwidth.""" +# std imports +import json +import warnings + +# 3rd party +import pytest +import pkg_resources + +# 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 diff --git a/contrib/python/wcwidth/tests/ya.make b/contrib/python/wcwidth/tests/ya.make new file mode 100644 index 00000000000..560d9b40025 --- /dev/null +++ b/contrib/python/wcwidth/tests/ya.make @@ -0,0 +1,16 @@ +PY23_TEST() + +OWNER(g:python-contrib) + +PEERDIR( + contrib/python/wcwidth +) + +TEST_SRCS( + test_core.py + test_ucslevel.py +) + +NO_LINT() + +END() |