From 76cede83c0a4bfbe099b8df5ab23b79976c45d6a Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 24 May 2011 17:30:35 -0500 Subject: [PATCH] add a way to disable assertion rewriting for a module --- _pytest/assertrewrite.py | 6 +++++- testing/test_assertrewrite.py | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/_pytest/assertrewrite.py b/_pytest/assertrewrite.py index f6bf31516..ad4f48f1a 100644 --- a/_pytest/assertrewrite.py +++ b/_pytest/assertrewrite.py @@ -98,7 +98,11 @@ class AssertionRewriter(ast.NodeVisitor): for item in mod.body: if (expect_docstring and isinstance(item, ast.Expr) and isinstance(item.value, ast.Str)): - lineno += len(item.value.s.splitlines()) - 1 + doc = item.value.s + if "PYTEST_DONT_REWRITE" in doc: + # The module has disabled assertion rewriting. + return + lineno += len(doc) - 1 expect_docstring = False elif (not isinstance(item, ast.ImportFrom) or item.level > 0 and item.identifier != "__future__"): diff --git a/testing/test_assertrewrite.py b/testing/test_assertrewrite.py index a3d831b22..4e478d6d6 100644 --- a/testing/test_assertrewrite.py +++ b/testing/test_assertrewrite.py @@ -76,6 +76,14 @@ class TestAssertionRewrite: assert imp.col_offset == 0 assert isinstance(m.body[5], ast.Expr) + def test_dont_rewrite(self): + s = """'PYTEST_DONT_REWRITE'\nassert 14""" + m = rewrite(s) + assert len(m.body) == 2 + assert isinstance(m.body[0].value, ast.Str) + assert isinstance(m.body[1], ast.Assert) + assert m.body[1].msg is None + def test_name(self): def f(): assert False