##// END OF EJS Templates
Merge pull request #3163 from rkern/fix-empty-frozen-set-pretty...
Min RK -
r10238:e9667ef7 merge
parent child Browse files
Show More
@@ -512,7 +512,7 b' def _default_pprint(obj, p, cycle):'
512 512 def _seq_pprinter_factory(start, end, basetype):
513 513 """
514 514 Factory that returns a pprint function useful for sequences. Used by
515 the default pprint for tuples, dicts, lists, sets and frozensets.
515 the default pprint for tuples, dicts, and lists.
516 516 """
517 517 def inner(obj, p, cycle):
518 518 typ = type(obj)
@@ -536,6 +536,40 b' def _seq_pprinter_factory(start, end, basetype):'
536 536 return inner
537 537
538 538
539 def _set_pprinter_factory(start, end, basetype):
540 """
541 Factory that returns a pprint function useful for sets and frozensets.
542 """
543 def inner(obj, p, cycle):
544 typ = type(obj)
545 if basetype is not None and typ is not basetype and typ.__repr__ != basetype.__repr__:
546 # If the subclass provides its own repr, use it instead.
547 return p.text(typ.__repr__(obj))
548
549 if cycle:
550 return p.text(start + '...' + end)
551 if len(obj) == 0:
552 # Special case.
553 p.text(basetype.__name__ + '()')
554 else:
555 step = len(start)
556 p.begin_group(step, start)
557 # Like dictionary keys, we will try to sort the items.
558 items = list(obj)
559 try:
560 items.sort()
561 except Exception:
562 # Sometimes the items don't sort.
563 pass
564 for idx, x in enumerate(items):
565 if idx:
566 p.text(',')
567 p.breakable()
568 p.pretty(x)
569 p.end_group(step, end)
570 return inner
571
572
539 573 def _dict_pprinter_factory(start, end, basetype=None):
540 574 """
541 575 Factory that returns a pprint function used by the default pprint of
@@ -668,8 +702,8 b' _type_pprinters = {'
668 702 list: _seq_pprinter_factory('[', ']', list),
669 703 dict: _dict_pprinter_factory('{', '}', dict),
670 704
671 set: _seq_pprinter_factory('{', '}', set),
672 frozenset: _seq_pprinter_factory('frozenset([', '])', frozenset),
705 set: _set_pprinter_factory('{', '}', set),
706 frozenset: _set_pprinter_factory('frozenset({', '})', frozenset),
673 707 super: _super_pprint,
674 708 _re_pattern_type: _re_pattern_pprint,
675 709 type: _type_pprint,
@@ -84,6 +84,20 b' def test_callability_checking():'
84 84
85 85 nt.assert_equal(gotoutput, expectedoutput)
86 86
87
88 def test_sets():
89 """
90 Test that set and frozenset use Python 3 formatting.
91 """
92 objects = [set(), frozenset(), set([1]), frozenset([1]), set([1, 2]),
93 frozenset([1, 2]), set([-1, -2, -3])]
94 expected = ['set()', 'frozenset()', '{1}', 'frozenset({1})', '{1, 2}',
95 'frozenset({1, 2})', '{-3, -2, -1}']
96 for obj, expected_output in zip(objects, expected):
97 got_output = pretty.pretty(obj)
98 yield nt.assert_equal, got_output, expected_output
99
100
87 101 @skip_without('xxlimited')
88 102 def test_pprint_heap_allocated_type():
89 103 """
General Comments 0
You need to be logged in to leave comments. Login now