summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2013-10-02 08:40:26 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2013-10-02 08:40:26 (GMT)
commitfdda200195f9747e411d3491aae0806bc1fcd919 (patch)
treeac3f3eca71003b0b1dd97208d43b4abaf15639d2 /Lib
parent3760d97f9b62be6d25a5530e35899d3612d7fb7b (diff)
downloadcpython-fdda200195f9747e411d3491aae0806bc1fcd919.zip
cpython-fdda200195f9747e411d3491aae0806bc1fcd919.tar.gz
cpython-fdda200195f9747e411d3491aae0806bc1fcd919.tar.bz2
Issue #19137: The pprint module now correctly formats empty set and frozenset
and instances of set and frozenset subclasses.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/pprint.py23
-rw-r--r--Lib/test/test_pprint.py104
2 files changed, 88 insertions, 39 deletions
diff --git a/Lib/pprint.py b/Lib/pprint.py
index 330099d..77f2a56 100644
--- a/Lib/pprint.py
+++ b/Lib/pprint.py
@@ -185,25 +185,18 @@ class PrettyPrinter:
if issubclass(typ, list):
write('[')
endchar = ']'
- elif issubclass(typ, set):
- if not length:
- write('set()')
- return
- write('set([')
- endchar = '])'
- object = _sorted(object)
- indent += 4
- elif issubclass(typ, frozenset):
+ elif issubclass(typ, tuple):
+ write('(')
+ endchar = ')'
+ else:
if not length:
- write('frozenset()')
+ write(rep)
return
- write('frozenset([')
+ write(typ.__name__)
+ write('([')
endchar = '])'
+ indent += len(typ.__name__) + 1
object = _sorted(object)
- indent += 10
- else:
- write('(')
- endchar = ')'
if self._indent_per_level > 1 and sepLines:
write((self._indent_per_level - 1) * ' ')
if length:
diff --git a/Lib/test/test_pprint.py b/Lib/test/test_pprint.py
index e0137df..50493f6 100644
--- a/Lib/test/test_pprint.py
+++ b/Lib/test/test_pprint.py
@@ -24,6 +24,20 @@ class tuple3(tuple):
def __repr__(self):
return tuple.__repr__(self)
+class set2(set):
+ pass
+
+class set3(set):
+ def __repr__(self):
+ return set.__repr__(self)
+
+class frozenset2(frozenset):
+ pass
+
+class frozenset3(frozenset):
+ def __repr__(self):
+ return frozenset.__repr__(self)
+
class dict2(dict):
pass
@@ -114,22 +128,24 @@ class QueryTestCase(unittest.TestCase):
for simple in (0, 0L, 0+0j, 0.0, "", uni(""),
(), tuple2(), tuple3(),
[], list2(), list3(),
+ set(), set2(), set3(),
+ frozenset(), frozenset2(), frozenset3(),
{}, dict2(), dict3(),
self.assertTrue, pprint,
-6, -6L, -6-6j, -1.5, "x", uni("x"), (3,), [3], {3: 6},
(1,2), [3,4], {5: 6},
tuple2((1,2)), tuple3((1,2)), tuple3(range(100)),
[3,4], list2([3,4]), list3([3,4]), list3(range(100)),
+ set({7}), set2({7}), set3({7}),
+ frozenset({8}), frozenset2({8}), frozenset3({8}),
dict2({5: 6}), dict3({5: 6}),
range(10, -11, -1)
):
native = repr(simple)
- for function in "pformat", "saferepr":
- f = getattr(pprint, function)
- got = f(simple)
- self.assertEqual(native, got,
- "expected %s got %s from pprint.%s" %
- (native, got, function))
+ self.assertEqual(pprint.pformat(simple), native)
+ self.assertEqual(pprint.pformat(simple, width=1, indent=0)
+ .replace('\n', ' '), native)
+ self.assertEqual(pprint.saferepr(simple), native)
def test_basic_line_wrap(self):
# verify basic line-wrapping operation
@@ -205,19 +221,59 @@ class QueryTestCase(unittest.TestCase):
self.assertEqual(DottedPrettyPrinter().pformat(o), exp)
def test_set_reprs(self):
- self.assertEqual(pprint.pformat(set()), 'set()')
+ self.assertEqual(pprint.pformat(set()), 'set([])')
self.assertEqual(pprint.pformat(set(range(3))), 'set([0, 1, 2])')
- self.assertEqual(pprint.pformat(frozenset()), 'frozenset()')
- self.assertEqual(pprint.pformat(frozenset(range(3))), 'frozenset([0, 1, 2])')
+ self.assertEqual(pprint.pformat(set(range(7)), width=20), '''\
+set([0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6])''')
+ self.assertEqual(pprint.pformat(set2(range(7)), width=20), '''\
+set2([0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6])''')
+ self.assertEqual(pprint.pformat(set3(range(7)), width=20),
+ 'set3([0, 1, 2, 3, 4, 5, 6])')
+
+ self.assertEqual(pprint.pformat(frozenset()), 'frozenset([])')
+ self.assertEqual(pprint.pformat(frozenset(range(3))),
+ 'frozenset([0, 1, 2])')
+ self.assertEqual(pprint.pformat(frozenset(range(7)), width=20), '''\
+frozenset([0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6])''')
+ self.assertEqual(pprint.pformat(frozenset2(range(7)), width=20), '''\
+frozenset2([0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6])''')
+ self.assertEqual(pprint.pformat(frozenset3(range(7)), width=20),
+ 'frozenset3([0, 1, 2, 3, 4, 5, 6])')
+
+ def test_set_of_sets_reprs(self):
cube_repr_tgt = """\
{frozenset([]): frozenset([frozenset([2]), frozenset([0]), frozenset([1])]),
- frozenset([0]): frozenset([frozenset(),
+ frozenset([0]): frozenset([frozenset([]),
frozenset([0, 2]),
frozenset([0, 1])]),
- frozenset([1]): frozenset([frozenset(),
+ frozenset([1]): frozenset([frozenset([]),
frozenset([1, 2]),
frozenset([0, 1])]),
- frozenset([2]): frozenset([frozenset(),
+ frozenset([2]): frozenset([frozenset([]),
frozenset([1, 2]),
frozenset([0, 2])]),
frozenset([1, 2]): frozenset([frozenset([2]),
@@ -243,7 +299,7 @@ class QueryTestCase(unittest.TestCase):
frozenset([frozenset([0]),
frozenset([0,
1])]),
- frozenset([frozenset(),
+ frozenset([frozenset([]),
frozenset([0])]),
frozenset([frozenset([2]),
frozenset([0,
@@ -259,7 +315,7 @@ class QueryTestCase(unittest.TestCase):
frozenset([frozenset([1]),
frozenset([1,
2])]),
- frozenset([frozenset(),
+ frozenset([frozenset([]),
frozenset([1])])]),
frozenset([frozenset([1, 2]), frozenset([1])]): frozenset([frozenset([frozenset([1,
2]),
@@ -269,7 +325,7 @@ class QueryTestCase(unittest.TestCase):
frozenset([frozenset([2]),
frozenset([1,
2])]),
- frozenset([frozenset(),
+ frozenset([frozenset([]),
frozenset([1])]),
frozenset([frozenset([1]),
frozenset([0,
@@ -285,7 +341,7 @@ class QueryTestCase(unittest.TestCase):
frozenset([frozenset([2]),
frozenset([0,
2])]),
- frozenset([frozenset(),
+ frozenset([frozenset([]),
frozenset([2])])]),
frozenset([frozenset([]), frozenset([0])]): frozenset([frozenset([frozenset([0]),
frozenset([0,
@@ -293,16 +349,16 @@ class QueryTestCase(unittest.TestCase):
frozenset([frozenset([0]),
frozenset([0,
2])]),
- frozenset([frozenset(),
+ frozenset([frozenset([]),
frozenset([1])]),
- frozenset([frozenset(),
+ frozenset([frozenset([]),
frozenset([2])])]),
- frozenset([frozenset([]), frozenset([1])]): frozenset([frozenset([frozenset(),
+ frozenset([frozenset([]), frozenset([1])]): frozenset([frozenset([frozenset([]),
frozenset([0])]),
frozenset([frozenset([1]),
frozenset([1,
2])]),
- frozenset([frozenset(),
+ frozenset([frozenset([]),
frozenset([2])]),
frozenset([frozenset([1]),
frozenset([0,
@@ -310,9 +366,9 @@ class QueryTestCase(unittest.TestCase):
frozenset([frozenset([2]), frozenset([])]): frozenset([frozenset([frozenset([2]),
frozenset([1,
2])]),
- frozenset([frozenset(),
+ frozenset([frozenset([]),
frozenset([0])]),
- frozenset([frozenset(),
+ frozenset([frozenset([]),
frozenset([1])]),
frozenset([frozenset([2]),
frozenset([0,
@@ -333,7 +389,7 @@ class QueryTestCase(unittest.TestCase):
frozenset([frozenset([1]),
frozenset([0,
1])])]),
- frozenset([frozenset([0]), frozenset([0, 1])]): frozenset([frozenset([frozenset(),
+ frozenset([frozenset([0]), frozenset([0, 1])]): frozenset([frozenset([frozenset([]),
frozenset([0])]),
frozenset([frozenset([0,
1]),
@@ -357,7 +413,7 @@ class QueryTestCase(unittest.TestCase):
frozenset([frozenset([0]),
frozenset([0,
2])]),
- frozenset([frozenset(),
+ frozenset([frozenset([]),
frozenset([2])])]),
frozenset([frozenset([0, 1, 2]), frozenset([0, 2])]): frozenset([frozenset([frozenset([1,
2]),