1 new commit in pytest:
https://bitbucket.org/hpk42/pytest/commits/a79829a4061e/
Changeset: a79829a4061e
User: gutworth
Date: 2014-05-31 23:37:02
Summary: assert reinterpretation: try mangling attributes that look like
private class vars (fixes #514)
Affected #: 4 files
diff -r eac38fd28362f3f5d81ce2e39bf2f56189153782 -r
a79829a4061e5ff521cd94925910e8ad56e0112b CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,8 @@
NEXT (2.6)
-----------------------------------
+- fix issue514: teach assertion reinterpretation about private class attributes
+
- change -v output to include full node IDs of tests. Users can copy
a node ID from a test run, including line number, and use it as a
positional argument in order to run only a single test.
diff -r eac38fd28362f3f5d81ce2e39bf2f56189153782 -r
a79829a4061e5ff521cd94925910e8ad56e0112b _pytest/assertion/newinterpret.py
--- a/_pytest/assertion/newinterpret.py
+++ b/_pytest/assertion/newinterpret.py
@@ -286,7 +286,19 @@
source = "__exprinfo_expr.%s" % (attr.attr,)
co = self._compile(source)
try:
- result = self.frame.eval(co, __exprinfo_expr=source_result)
+ try:
+ result = self.frame.eval(co, __exprinfo_expr=source_result)
+ except AttributeError:
+ # Maybe the attribute name needs to be mangled?
+ if not attr.attr.startswith("__") or attr.attr.endswith("__"):
+ raise
+ source = "getattr(__exprinfo_expr.__class__, '__name__', '')"
+ co = self._compile(source)
+ class_name = self.frame.eval(co, __exprinfo_expr=source_result)
+ mangled_attr = "_" + class_name + attr.attr
+ source = "__exprinfo_expr.%s" % (mangled_attr,)
+ co = self._compile(source)
+ result = self.frame.eval(co, __exprinfo_expr=source_result)
except Exception:
raise Failure(explanation)
explanation = "%s\n{%s = %s.%s\n}" % (self.frame.repr(result),
diff -r eac38fd28362f3f5d81ce2e39bf2f56189153782 -r
a79829a4061e5ff521cd94925910e8ad56e0112b _pytest/assertion/oldinterpret.py
--- a/_pytest/assertion/oldinterpret.py
+++ b/_pytest/assertion/oldinterpret.py
@@ -355,7 +355,18 @@
expr.eval(frame)
source = '__exprinfo_expr.%s' % self.attrname
try:
- self.result = frame.eval(source, __exprinfo_expr=expr.result)
+ try:
+ self.result = frame.eval(source, __exprinfo_expr=expr.result)
+ except AttributeError:
+ # Maybe the attribute name needs to be mangled?
+ if (not self.attrname.startswith("__") or
+ self.attrname.endswith("__")):
+ raise
+ source = "getattr(__exprinfo_expr.__class__, '__name__', '')"
+ class_name = frame.eval(source, __exprinfo_expr=expr.result)
+ mangled_attr = "_" + class_name + self.attrname
+ source = "__exprinfo_expr.%s" % (mangled_attr,)
+ self.result = frame.eval(source, __exprinfo_expr=expr.result)
except passthroughex:
raise
except:
diff -r eac38fd28362f3f5d81ce2e39bf2f56189153782 -r
a79829a4061e5ff521cd94925910e8ad56e0112b testing/test_assertinterpret.py
--- a/testing/test_assertinterpret.py
+++ b/testing/test_assertinterpret.py
@@ -131,6 +131,18 @@
e = exvalue()
assert "x=5" in e.msg
+def test_private_class_variable():
+ class X:
+ def __init__(self):
+ self.__v = 41
+ def m(self):
+ assert self.__v == 42
+ try:
+ X().m()
+ except AssertionError:
+ e = exvalue()
+ assert "== 42" in e.msg
+
# These tests should both fail, but should fail nicely...
class WeirdRepr:
def __repr__(self):
Repository URL: https://bitbucket.org/hpk42/pytest/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
_______________________________________________
pytest-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pytest-commit