Последовательности цветов игнорируются во время теста Python - PullRequest
0 голосов
/ 26 февраля 2019

связанный: тимофуррер / красочный # 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'

1 Ответ

0 голосов
/ 27 февраля 2019

Исправлено с флагом --capture=no (или -s) от pytest:

pytest -v --capture=no tests/

Подробнее см. https://github.com/timofurrer/colorful/issues/23#issuecomment-468008070.

...