связанный: тимофуррер / красочный # 23
Я заново реализую чистое приглашение в python , чтобы оно моглоподдерживать больше оболочки.
Тем не менее, при тестировании цвета у меня получалось «неожиданное» поведение, то есть , которое я не понимаю.
вывод тестов
def test_prompt_symbol_is_colored_for_successful_command():
assert str(prompt.prompt_symbol()) == str(colors.primary('❯'))
> assert str(prompt.prompt_symbol()) == '\x1b[38;2;155;48;255m❯\x1b[39m'
E AssertionError: assert '❯' == '\x1b[38;2;155;48;255m❯\x1b[39m'
E - ❯
E + ❯ ← this one is purple
_colors_test.py_
def test_prompt_symbol_is_colored_for_successful_command():
assert str(prompt.prompt_symbol()) == str(colors.primary('❯'))
assert str(prompt.prompt_symbol()) == '\x1b[38;2;155;48;255m❯\x1b[39m'
Я запускаю тест с:
pytest -v tests/
colors.py
import colorful
primary = colorful.purple1
mute = colorful.gray
prompt.py
from pure import colors
def prompt_symbol(last_command_status=0):
symbol = colors.primary('❯') if last_command_status == 0 else colors.danger('❯')
return symbol
Вопрос
Первое утверждение выполнено успешно, а второе не выполнено, несмотря на то, что они должно быть эквивалентно .Когда я отрицаю первое утверждение, escape-последовательность отсутствует:
> assert str(prompt.prompt_symbol()) != str(colors.primary('❯'))
E AssertionError: assert '❯' != '❯'
E + where '❯' = str(<colorful.core.ColorfulString object at 0x7f545276f080>)
E + where <colorful.core.ColorfulString object at 0x7f545276f080> = <function prompt_symbol at 0x7f54527b79d8>()
E + where <function prompt_symbol at 0x7f54527b79d8> = prompt.prompt_symbol
E + and '❯' = str(<colorful.core.ColorfulString object at 0x7f545276f0b8>)
E + where <colorful.core.ColorfulString object at 0x7f545276f0b8> = <colorful.core.Colorful.ColorfulStyle object at 0x7f54527c2278>('❯')
E + where <colorful.core.Colorful.ColorfulStyle object at 0x7f54527c2278> = colors.primary
Выполнение команды вручную в python REPL дает мне:
>>> from pure import colors, prompt
>>> str(colors.primary('❯'))
'\x1b[38;2;155;48;255m❯\x1b[39m'
>>> str(prompt.prompt_symbol())
'\x1b[38;2;155;48;255m❯\x1b[39m'