diff --git a/src/_pytest/assertion/rewrite.py b/src/_pytest/assertion/rewrite.py index 0567e8fb8..7627cb968 100644 --- a/src/_pytest/assertion/rewrite.py +++ b/src/_pytest/assertion/rewrite.py @@ -33,9 +33,6 @@ PYTEST_TAG = "{}-pytest-{}".format(sys.implementation.cache_tag, version) PYC_EXT = ".py" + (__debug__ and "c" or "o") PYC_TAIL = "." + PYTEST_TAG + PYC_EXT -AST_IS = ast.Is() -AST_NONE = ast.NameConstant(None) - class AssertionRewritingHook: """PEP302/PEP451 import hook which rewrites asserts.""" @@ -857,7 +854,7 @@ class AssertionRewriter(ast.NodeVisitor): internally already. See issue #3191 for more details. """ - val_is_none = ast.Compare(node, [AST_IS], [AST_NONE]) + val_is_none = ast.Compare(node, [ast.Is()], [ast.NameConstant(None)]) send_warning = ast.parse( """\ from _pytest.warning_types import PytestAssertRewriteWarning diff --git a/testing/test_assertion.py b/testing/test_assertion.py index 8079c45a0..a8321686d 100644 --- a/testing/test_assertion.py +++ b/testing/test_assertion.py @@ -1302,3 +1302,23 @@ def test_exit_from_assertrepr_compare(monkeypatch): with pytest.raises(outcomes.Exit, match="Quitting debugger"): callequal(1, 1) + + +def test_assertion_location_with_coverage(testdir): + """This used to report the wrong location when run with coverage (#5754).""" + p = testdir.makepyfile( + """ + def test(): + assert False, 1 + assert False, 2 + """ + ) + result = testdir.runpytest(str(p)) + result.stdout.fnmatch_lines( + [ + "> assert False, 1", + "E AssertionError: 1", + "E assert False", + "*= 1 failed in*", + ] + )