Skip to content

ANSI escape codes for colored output not handled correctly with pytest.fail(reason=..., pytrace=False) #12849

Closed
@benverhees

Description

@benverhees
  • a detailed description of the bug or problem you are having

Description

There seems to be an inconsistency with how ANSI escape codes for colored output are handled in the failure reason when using pytest.fail() with pytrace=True versus pytrace=False.

In the case where pytrace=True, the colored output is rendered correctly in the failure message. However, when pytrace=False, the ANSI escape codes are not processed, and they partly appear as raw text in the terminal output.

  • minimal example if possible

Steps to Reproduce

from pytest import fail


def test_color_pytrace_true():
    fail(reason="\n\x1b[34mThis should be blue\x1b[0m", pytrace=True)


def test_color_pytrace_false():
    fail(reason="\n\x1b[34mThis should be blue\x1b[0m", pytrace=False)

Expected Behavior:

For pytrace=True: The ANSI escape codes for blue text (\x1b[34m...) should render correctly, resulting in the phrase "This should be blue" being displayed in blue.
For pytrace=False: The ANSI escape codes should still render the text in blue.

Actual Behavior:

For pytrace=True: The colored output is handled correctly, and the text "This should be blue" is displayed in blue.
For pytrace=False: The ANSI escape codes are partly displayed as raw text ([34mThis should be blue[0m), and the text is not colored.

Output from running the test

image
  • output of pip list from the virtual environment you are using
Package                   Version                         Editable project location
------------------------- ------------------------------- -----------------------------------
aiofiles                  24.1.0
aiohttp                   3.9.5
aiosignal                 1.3.1
annotated-types           0.6.0
anyio                     4.3.0
argcomplete               3.2.3
async-timeout             4.0.3
asyncio                   3.4.3
attrs                     23.2.0
backports.tarfile         1.1.1
beautifulsoup4            4.12.3
binary                    1.0.0
black                     24.3.0
blessed                   1.20.0
boltons                   21.0.0
bracex                    2.4
build                     1.2.1
cachetools                5.3.3
certifi                   2024.2.2
cfgv                      3.4.0
charset-normalizer        3.3.2
click                     8.1.7
click-option-group        0.5.6
colorama                  0.4.6
contourpy                 1.2.1
coverage                  7.4.4
cycler                    0.12.1
datamodel-code-generator  0.25.9
deepdiff                  6.7.1
defusedxml                0.7.1
distlib                   0.3.8
dnspython                 2.6.1
docutils                  0.21.2
editor                    1.6.6
email_validator           2.1.1
et-xmlfile                1.1.0
exceptiongroup            1.2.0
face                      22.0.0
filelock                  3.13.4
fonttools                 4.53.1
frozenlist                1.4.1
genson                    1.2.2
geojson                   3.1.0
glom                      22.1.0
google-api-core           2.19.0
google-auth               2.29.0
google-cloud-bigquery     3.23.0
google-cloud-core         2.4.1
google-crc32c             1.5.0
google-resumable-media    2.7.0
googleapis-common-protos  1.63.0
grpcio                    1.63.0
grpcio-status             1.62.2
h11                       0.14.0
httpcore                  1.0.5
httpx                     0.27.0
identify                  2.5.35
idna                      3.6
importlib_metadata        7.1.0
inflect                   5.6.2
iniconfig                 2.0.0
inquirer                  3.2.4
isodate                   0.6.1
isort                     5.13.2
jaraco.classes            3.4.0
jaraco.context            5.3.0
jaraco.functools          4.0.1
Jinja2                    3.1.3
jsonschema                4.22.0
jsonschema-specifications 2023.12.1
keyring                   25.2.0
kiwisolver                1.4.5
libcst                    1.3.1
loguru                    0.7.2
lxml                      5.2.2
markdown-it-py            3.0.0
MarkupSafe                2.1.5
matplotlib                3.9.2
mdurl                     0.1.2
more-itertools            10.2.0
multidict                 6.0.5
mypy-extensions           1.0.0
nh3                       0.2.17
nodeenv                   1.8.0
numpy                     1.26.4
openpyxl                  3.1.2
ordered-set               4.1.0
osm2geojson               0.2.5
packaging                 24.0
pandas                    2.2.2
pathspec                  0.12.1
peewee                    3.17.5
pillow                    10.4.0
pip                       23.0.1
pkginfo                   1.10.0
platformdirs              4.2.0
pluggy                    1.5.0
pre-commit                3.3.3
prettytable               3.10.0
proto-plus                1.23.0
protobuf                  4.25.3
pyasn1                    0.6.0
pyasn1_modules            0.4.0
pydantic                  2.6.4
pydantic_core             2.16.3
Pygments                  2.18.0
pyodata                   1.11.1
pyparsing                 3.1.4
pypinfo                   21.0.0
pyproject_hooks           1.1.0
pytest                    8.3.3
pytest-cov                5.0.0
pytest-loguru             0.4.0
python-dateutil           2.9.0.post0
pytz                      2024.1
PyYAML                    6.0.1
rdflib                    7.1.0a0
readchar                  4.0.6
readme_renderer           43.0
referencing               0.35.1
requests                  2.32.3
requests-toolbelt         1.0.0
rfc3986                   2.0.0
rich                      13.7.1
rpds-py                   0.18.1
rsa                       4.9
ruamel.yaml               0.17.40
ruamel.yaml.clib          0.2.8
ruff                      0.3.5
runs                      1.2.2
semgrep                   1.75.0
setuptools                65.5.0
setuptools-scm            8.1.0
shapely                   2.0.6
six                       1.16.0
sniffio                   1.3.1
soupsieve                 2.6
SPARQLWrapper             2.0.0
tinydb                    4.8.0
tinyrecord                0.2.0
toml                      0.10.2
tomli                     2.0.1
twine                     5.0.0
types-python-dateutil     2.9.0.20240821
types-PyYAML              6.0.12.20240311
types-requests            2.31.0.20240406
typing_extensions         4.11.0
tzdata                    2024.1
ujson                     5.10.0
Unidecode                 1.3.8
urllib3                   2.2.1
virtualenv                20.25.1
wcmatch                   8.5.2
wcwidth                   0.2.13
xarray                    2024.7.0
xmod                      1.8.1
yarl                      1.9.4
zipp                      3.18.1
  • pytest and operating system versions
pytest 8.3.3
ProductName:            macOS
ProductVersion:         14.2.1
BuildVersion:           23C71

Metadata

Metadata

Assignees

Labels

topic: reportingrelated to terminal output and user-facing messages and errorstype: bugproblem that needs to be addressed

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions