escape '%' in specialized comparison explanations (fixes #63)

This commit is contained in:
Benjamin Peterson 2011-07-19 21:42:00 -05:00
parent a70293fdb7
commit 2c4964d290
3 changed files with 13 additions and 1 deletions

View File

@ -1,6 +1,7 @@
Changes between 2.1.0 and 2.1.1.DEV
----------------------------------------------
- fix assertion rewriting on inserts involving strings containing '%'
- fix assertion rewriting on calls with a ** arg
- don't cache rewritten modules if bytecode generation is disabled
- fix assertion rewriting in read-only directories

View File

@ -45,7 +45,13 @@ def pytest_configure(config):
config=config, op=op, left=left, right=right)
for new_expl in hook_result:
if new_expl:
return '\n~'.join(new_expl)
res = '\n~'.join(new_expl)
if mode == "rewrite":
# The result will be fed back a python % formatting
# operation, which will fail if there are extraneous
# '%'s in the string. Escape them here.
res = res.replace("%", "%%")
return res
m = monkeypatch()
config._cleanup.append(m.undo)
m.setattr(py.builtin.builtins, 'AssertionError',

View File

@ -275,6 +275,11 @@ class TestAssertionRewrite:
assert myany(A() < 0)
assert "<MY42 object> < 0" in getmsg(f)
def test_formatchar(self):
def f():
assert "%test" == "test"
assert getmsg(f).startswith("assert '%test' == 'test'")
class TestRewriteOnImport: