diff --git a/src/_pytest/assertion/__init__.py b/src/_pytest/assertion/__init__.py index 0a57f6afa..ee7fa6a3a 100644 --- a/src/_pytest/assertion/__init__.py +++ b/src/_pytest/assertion/__init__.py @@ -2,6 +2,8 @@ support for presenting detailed information in failing assertions. """ import sys +from typing import Any +from typing import List from typing import Optional from _pytest.assertion import rewrite @@ -9,6 +11,7 @@ from _pytest.assertion import truncate from _pytest.assertion import util from _pytest.assertion.rewrite import assertstate_key from _pytest.compat import TYPE_CHECKING +from _pytest.config import Config from _pytest.config import hookimpl if TYPE_CHECKING: @@ -170,5 +173,7 @@ def pytest_sessionfinish(session): assertstate.hook.set_session(None) -def pytest_assertrepr_compare(config, op, left, right): +def pytest_assertrepr_compare( + config: Config, op: str, left: Any, right: Any +) -> Optional[List[str]]: return util.assertrepr_compare(config=config, op=op, left=left, right=right) diff --git a/testing/test_assertion.py b/testing/test_assertion.py index b12b3b119..3ce0f93e6 100644 --- a/testing/test_assertion.py +++ b/testing/test_assertion.py @@ -1,6 +1,9 @@ import collections.abc as collections_abc import sys import textwrap +from typing import Any +from typing import List +from typing import Optional import attr @@ -310,9 +313,13 @@ class TestBinReprIntegration: result.stdout.fnmatch_lines(["*test_hello*FAIL*", "*test_check*PASS*"]) -def callequal(left, right, verbose=0): +def callop(op: str, left: Any, right: Any, verbose: int = 0) -> Optional[List[str]]: config = mock_config(verbose=verbose) - return plugin.pytest_assertrepr_compare(config, "==", left, right) + return plugin.pytest_assertrepr_compare(config, op, left, right) + + +def callequal(left: Any, right: Any, verbose: int = 0) -> Optional[List[str]]: + return callop("==", left, right, verbose) class TestAssert_reprcompare: @@ -1068,10 +1075,13 @@ def test_rewritten(testdir): assert testdir.runpytest().ret == 0 -def test_reprcompare_notin(): - config = mock_config() - detail = plugin.pytest_assertrepr_compare(config, "not in", "foo", "aaafoobbb")[1:] - assert detail == ["'foo' is contained here:", " aaafoobbb", "? +++"] +def test_reprcompare_notin() -> None: + assert callop("not in", "foo", "aaafoobbb") == [ + "'foo' not in 'aaafoobbb'", + "'foo' is contained here:", + " aaafoobbb", + "? +++", + ] def test_reprcompare_whitespaces():