Merge pull request #9025 from davidszotten/more_verbose_for_ci
This commit is contained in:
commit
14b79a66a3
|
@ -0,0 +1,4 @@
|
||||||
|
|
||||||
|
Full diffs are now always shown for equality assertions of iterables when
|
||||||
|
`CI` or ``BUILD_NUMBER`` is found in the environment, even when ``-v`` isn't
|
||||||
|
used.
|
|
@ -3,10 +3,10 @@
|
||||||
Current default behaviour is to truncate assertion explanations at
|
Current default behaviour is to truncate assertion explanations at
|
||||||
~8 terminal lines, unless running in "-vv" mode or running on CI.
|
~8 terminal lines, unless running in "-vv" mode or running on CI.
|
||||||
"""
|
"""
|
||||||
import os
|
|
||||||
from typing import List
|
from typing import List
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
|
from _pytest.assertion import util
|
||||||
from _pytest.nodes import Item
|
from _pytest.nodes import Item
|
||||||
|
|
||||||
|
|
||||||
|
@ -27,13 +27,7 @@ def truncate_if_required(
|
||||||
def _should_truncate_item(item: Item) -> bool:
|
def _should_truncate_item(item: Item) -> bool:
|
||||||
"""Whether or not this test item is eligible for truncation."""
|
"""Whether or not this test item is eligible for truncation."""
|
||||||
verbose = item.config.option.verbose
|
verbose = item.config.option.verbose
|
||||||
return verbose < 2 and not _running_on_ci()
|
return verbose < 2 and not util.running_on_ci()
|
||||||
|
|
||||||
|
|
||||||
def _running_on_ci() -> bool:
|
|
||||||
"""Check if we're currently running on a CI system."""
|
|
||||||
env_vars = ["CI", "BUILD_NUMBER"]
|
|
||||||
return any(var in os.environ for var in env_vars)
|
|
||||||
|
|
||||||
|
|
||||||
def _truncate_explanation(
|
def _truncate_explanation(
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
"""Utilities for assertion debugging."""
|
"""Utilities for assertion debugging."""
|
||||||
import collections.abc
|
import collections.abc
|
||||||
|
import os
|
||||||
import pprint
|
import pprint
|
||||||
from typing import AbstractSet
|
from typing import AbstractSet
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
@ -17,7 +18,6 @@ from _pytest._io.saferepr import safeformat
|
||||||
from _pytest._io.saferepr import saferepr
|
from _pytest._io.saferepr import saferepr
|
||||||
from _pytest.config import Config
|
from _pytest.config import Config
|
||||||
|
|
||||||
|
|
||||||
# The _reprcompare attribute on the util module is used by the new assertion
|
# The _reprcompare attribute on the util module is used by the new assertion
|
||||||
# interpretation code and assertion rewriter to detect this plugin was
|
# interpretation code and assertion rewriter to detect this plugin was
|
||||||
# loaded and in turn call the hooks defined here as part of the
|
# loaded and in turn call the hooks defined here as part of the
|
||||||
|
@ -287,7 +287,7 @@ def _surrounding_parens_on_own_lines(lines: List[str]) -> None:
|
||||||
def _compare_eq_iterable(
|
def _compare_eq_iterable(
|
||||||
left: Iterable[Any], right: Iterable[Any], verbose: int = 0
|
left: Iterable[Any], right: Iterable[Any], verbose: int = 0
|
||||||
) -> List[str]:
|
) -> List[str]:
|
||||||
if not verbose:
|
if not verbose and not running_on_ci():
|
||||||
return ["Use -v to get the full diff"]
|
return ["Use -v to get the full diff"]
|
||||||
# dynamic import to speedup pytest
|
# dynamic import to speedup pytest
|
||||||
import difflib
|
import difflib
|
||||||
|
@ -490,3 +490,9 @@ def _notin_text(term: str, text: str, verbose: int = 0) -> List[str]:
|
||||||
else:
|
else:
|
||||||
newdiff.append(line)
|
newdiff.append(line)
|
||||||
return newdiff
|
return newdiff
|
||||||
|
|
||||||
|
|
||||||
|
def running_on_ci() -> bool:
|
||||||
|
"""Check if we're currently running on a CI system."""
|
||||||
|
env_vars = ["CI", "BUILD_NUMBER"]
|
||||||
|
return any(var in os.environ for var in env_vars)
|
||||||
|
|
|
@ -13,6 +13,7 @@ import pytest
|
||||||
from _pytest import outcomes
|
from _pytest import outcomes
|
||||||
from _pytest.assertion import truncate
|
from _pytest.assertion import truncate
|
||||||
from _pytest.assertion import util
|
from _pytest.assertion import util
|
||||||
|
from _pytest.monkeypatch import MonkeyPatch
|
||||||
from _pytest.pytester import Pytester
|
from _pytest.pytester import Pytester
|
||||||
|
|
||||||
|
|
||||||
|
@ -448,6 +449,25 @@ class TestAssert_reprcompare:
|
||||||
assert verbose_expl is not None
|
assert verbose_expl is not None
|
||||||
assert "\n".join(verbose_expl).endswith(textwrap.dedent(expected).strip())
|
assert "\n".join(verbose_expl).endswith(textwrap.dedent(expected).strip())
|
||||||
|
|
||||||
|
def test_iterable_full_diff_ci(
|
||||||
|
self, monkeypatch: MonkeyPatch, pytester: Pytester
|
||||||
|
) -> None:
|
||||||
|
pytester.makepyfile(
|
||||||
|
r"""
|
||||||
|
def test_full_diff():
|
||||||
|
left = [0, 1]
|
||||||
|
right = [0, 2]
|
||||||
|
assert left == right
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
monkeypatch.setenv("CI", "true")
|
||||||
|
result = pytester.runpytest()
|
||||||
|
result.stdout.fnmatch_lines(["E Full diff:"])
|
||||||
|
|
||||||
|
monkeypatch.delenv("CI", raising=False)
|
||||||
|
result = pytester.runpytest()
|
||||||
|
result.stdout.fnmatch_lines(["E Use -v to get the full diff"])
|
||||||
|
|
||||||
def test_list_different_lengths(self) -> None:
|
def test_list_different_lengths(self) -> None:
|
||||||
expl = callequal([0, 1], [0, 1, 2])
|
expl = callequal([0, 1], [0, 1, 2])
|
||||||
assert expl is not None
|
assert expl is not None
|
||||||
|
|
Loading…
Reference in New Issue