mirror of https://github.com/mahmoud/boltons.git
150 lines
5.6 KiB
Python
150 lines
5.6 KiB
Python
import re
|
|
import uuid
|
|
from unittest import TestCase
|
|
|
|
from boltons import strutils
|
|
|
|
|
|
def test_strip_ansi():
|
|
assert strutils.strip_ansi(
|
|
'\x1b[0m\x1b[1;36mart\x1b[46;34m\xdc') == 'art\xdc'
|
|
assert strutils.strip_ansi(
|
|
'\x1b[0m\x1b[1;36mart\x1b[46;34m\xdc') == 'artÜ'
|
|
assert strutils.strip_ansi(
|
|
'╒══════╕\n│ \x1b[1mCell\x1b[0m │\n╘══════╛') == (
|
|
'╒══════╕\n'
|
|
'│ Cell │\n'
|
|
'╘══════╛')
|
|
assert strutils.strip_ansi(
|
|
'ls\r\n\x1B[00m\x1b[01;31mfile.zip\x1b[00m\r\n\x1b[01;31m') == \
|
|
'ls\r\nfile.zip\r\n'
|
|
assert strutils.strip_ansi(
|
|
'\t\u001b[0;35mIP\u001b[0m\t\u001b[0;36m192.1.0.2\u001b[0m') == \
|
|
'\tIP\t192.1.0.2'
|
|
assert strutils.strip_ansi('(╯°□°)╯︵ \x1b[1m┻━┻\x1b[0m') == (
|
|
'(╯°□°)╯︵ ┻━┻')
|
|
assert strutils.strip_ansi('(╯°□°)╯︵ \x1b[1m┻━┻\x1b[0m') == (
|
|
'(╯°□°)╯︵ ┻━┻')
|
|
assert strutils.strip_ansi(
|
|
b'(\xe2\x95\xaf\xc2\xb0\xe2\x96\xa1\xc2\xb0)\xe2\x95\xaf\xef\xb8'
|
|
b'\xb5 \x1b[1m\xe2\x94\xbb\xe2\x94\x81\xe2\x94\xbb\x1b[0m') == (
|
|
b'(\xe2\x95\xaf\xc2\xb0\xe2\x96\xa1\xc2\xb0)\xe2\x95\xaf\xef\xb8'
|
|
b'\xb5 \xe2\x94\xbb\xe2\x94\x81\xe2\x94\xbb')
|
|
assert strutils.strip_ansi(
|
|
bytearray('(╯°□°)╯︵ \x1b[1m┻━┻\x1b[0m', 'utf-8')) == \
|
|
bytearray(
|
|
b'(\xe2\x95\xaf\xc2\xb0\xe2\x96\xa1\xc2\xb0)\xe2\x95\xaf\xef\xb8'
|
|
b'\xb5 \xe2\x94\xbb\xe2\x94\x81\xe2\x94\xbb')
|
|
|
|
|
|
def test_asciify():
|
|
ref = 'Beyoncé'
|
|
b = strutils.asciify(ref)
|
|
assert len(b) == len(b)
|
|
assert b[-1:].decode('ascii') == 'e'
|
|
|
|
|
|
def test_indent():
|
|
to_indent = '\nabc\ndef\n\nxyz\n'
|
|
ref = '\n abc\n def\n\n xyz\n'
|
|
assert strutils.indent(to_indent, ' ') == ref
|
|
|
|
|
|
def test_is_uuid():
|
|
assert strutils.is_uuid(uuid.uuid4()) == True
|
|
assert strutils.is_uuid(uuid.uuid4(), version=1) == False
|
|
assert strutils.is_uuid(str(uuid.uuid4())) == True
|
|
assert strutils.is_uuid(str(uuid.uuid4()), version=1) == False
|
|
assert strutils.is_uuid(set('garbage')) == False
|
|
|
|
|
|
def test_parse_int_list():
|
|
assert strutils.parse_int_list("1,3,5-8,10-11,15") == [1, 3, 5, 6, 7, 8, 10, 11, 15]
|
|
|
|
assert strutils.parse_int_list("1,3,5-8,10-11,15,") == [1, 3, 5, 6, 7, 8, 10, 11, 15]
|
|
assert strutils.parse_int_list(",1,3,5-8,10-11,15") == [1, 3, 5, 6, 7, 8, 10, 11, 15]
|
|
assert strutils.parse_int_list(" 1, 3 ,5-8,10-11,15 ") == [1, 3, 5, 6, 7, 8, 10, 11, 15]
|
|
assert strutils.parse_int_list("3,1,5-8,10-11,15") == [1, 3, 5, 6, 7, 8, 10, 11, 15]
|
|
|
|
assert strutils.parse_int_list("5-8") == [5, 6, 7, 8]
|
|
assert strutils.parse_int_list("8-5") == [5, 6, 7, 8]
|
|
|
|
def test_format_int_list():
|
|
assert strutils.format_int_list([1, 3, 5, 6, 7, 8, 10, 11, 15]) == '1,3,5-8,10-11,15'
|
|
assert strutils.format_int_list([5, 6, 7, 8]) == '5-8'
|
|
|
|
assert strutils.format_int_list([1, 3, 5, 6, 7, 8, 10, 11, 15], delim_space=True) == '1, 3, 5-8, 10-11, 15'
|
|
assert strutils.format_int_list([5, 6, 7, 8], delim_space=True) == '5-8'
|
|
|
|
|
|
class TestMultiReplace(TestCase):
|
|
|
|
def test_simple_substitutions(self):
|
|
"""Test replacing multiple values."""
|
|
m = strutils.MultiReplace({r'cat': 'kedi', r'purple': 'mor', })
|
|
self.assertEqual(m.sub('The cat is purple'), 'The kedi is mor')
|
|
|
|
def test_shortcut_function(self):
|
|
"""Test replacing multiple values."""
|
|
self.assertEqual(
|
|
strutils.multi_replace(
|
|
'The cat is purple',
|
|
{r'cat': 'kedi', r'purple': 'mor', }
|
|
),
|
|
'The kedi is mor'
|
|
)
|
|
|
|
def test_substitutions_in_word(self):
|
|
"""Test replacing multiple values that are substrings of a word."""
|
|
m = strutils.MultiReplace({r'cat': 'kedi', r'purple': 'mor', })
|
|
self.assertEqual(m.sub('Thecatispurple'), 'Thekediismor')
|
|
|
|
def test_sub_with_regex(self):
|
|
"""Test substitutions with a regular expression."""
|
|
m = strutils.MultiReplace({
|
|
r'cat': 'kedi',
|
|
r'purple': 'mor',
|
|
r'q\w+?t': 'dinglehopper'
|
|
}, regex=True)
|
|
self.assertEqual(
|
|
m.sub('The purple cat ate a quart of jelly'),
|
|
'The mor kedi ate a dinglehopper of jelly'
|
|
)
|
|
|
|
def test_sub_with_list(self):
|
|
"""Test substitutions from an iterable instead of a dictionary."""
|
|
m = strutils.MultiReplace([
|
|
(r'cat', 'kedi'),
|
|
(r'purple', 'mor'),
|
|
(r'q\w+?t', 'dinglehopper'),
|
|
], regex=True)
|
|
self.assertEqual(
|
|
m.sub('The purple cat ate a quart of jelly'),
|
|
'The mor kedi ate a dinglehopper of jelly'
|
|
)
|
|
|
|
def test_sub_with_compiled_regex(self):
|
|
"""Test substitutions where some regular expressiosn are compiled."""
|
|
exp = re.compile(r'q\w+?t')
|
|
m = strutils.MultiReplace([
|
|
(r'cat', 'kedi'),
|
|
(r'purple', 'mor'),
|
|
(exp, 'dinglehopper'),
|
|
])
|
|
self.assertEqual(
|
|
m.sub('The purple cat ate a quart of jelly'),
|
|
'The mor kedi ate a dinglehopper of jelly'
|
|
)
|
|
|
|
def test_substitutions_with_regex_chars(self):
|
|
"""Test replacing values that have special regex characters."""
|
|
m = strutils.MultiReplace({'cat.+': 'kedi', r'purple': 'mor', })
|
|
self.assertEqual(m.sub('The cat.+ is purple'), 'The kedi is mor')
|
|
|
|
|
|
def test_roundzip():
|
|
aaa = b'a' * 10000
|
|
assert strutils.gunzip_bytes(strutils.gzip_bytes(aaa)) == aaa
|
|
|
|
assert strutils.gunzip_bytes(strutils.gzip_bytes(b'')) == b''
|