Use the plus/minus unicode symbol in the repr string.

This was a challenge because it had to work in python2 and python3,
which have almost opposite unicode models, and I couldn't use the six
library.  I'm also not sure the solution I found would work in python3
before python3.3, because I use the u'' string prefix which I think was
initially not part of python3.
This commit is contained in:
Kale Kundert
2016-03-07 16:40:41 -08:00
parent dd28e28b34
commit bf97d5b817
2 changed files with 6 additions and 4 deletions

View File

@@ -1339,7 +1339,7 @@ class RaisesContext(object):
# builtin pytest.approx helper
class approx:
class approx(object):
""" assert that two numbers (or two sets of numbers) are equal to each
other within some margin.
@@ -1410,10 +1410,11 @@ class approx:
def __repr__(self):
from collections import Iterable
plus_minus = lambda x: '{} \u00B1 {:.1e}'.format(x, self._get_margin(x))
utf_8 = lambda s: s.encode('utf-8') if sys.version_info.major == 2 else s
plus_minus = lambda x: utf_8(u'{} \u00b1 {:.1e}'.format(x, self._get_margin(x)))
if isinstance(self.expected, Iterable):
return str([plus_minus(x) for x in self.expected])
return ', '.join([plus_minus(x) for x in self.expected])
else:
return plus_minus(self.expected)