17db96d56Sopenharmony_ci# -*- coding: utf-8 -*-
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ciimport collections
47db96d56Sopenharmony_ciimport contextlib
57db96d56Sopenharmony_ciimport dataclasses
67db96d56Sopenharmony_ciimport io
77db96d56Sopenharmony_ciimport itertools
87db96d56Sopenharmony_ciimport pprint
97db96d56Sopenharmony_ciimport random
107db96d56Sopenharmony_ciimport test.support
117db96d56Sopenharmony_ciimport test.test_set
127db96d56Sopenharmony_ciimport types
137db96d56Sopenharmony_ciimport unittest
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ci# list, tuple and dict subclasses that do or don't overwrite __repr__
167db96d56Sopenharmony_ciclass list2(list):
177db96d56Sopenharmony_ci    pass
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_ciclass list3(list):
207db96d56Sopenharmony_ci    def __repr__(self):
217db96d56Sopenharmony_ci        return list.__repr__(self)
227db96d56Sopenharmony_ci
237db96d56Sopenharmony_ciclass list_custom_repr(list):
247db96d56Sopenharmony_ci    def __repr__(self):
257db96d56Sopenharmony_ci        return '*'*len(list.__repr__(self))
267db96d56Sopenharmony_ci
277db96d56Sopenharmony_ciclass tuple2(tuple):
287db96d56Sopenharmony_ci    pass
297db96d56Sopenharmony_ci
307db96d56Sopenharmony_ciclass tuple3(tuple):
317db96d56Sopenharmony_ci    def __repr__(self):
327db96d56Sopenharmony_ci        return tuple.__repr__(self)
337db96d56Sopenharmony_ci
347db96d56Sopenharmony_ciclass tuple_custom_repr(tuple):
357db96d56Sopenharmony_ci    def __repr__(self):
367db96d56Sopenharmony_ci        return '*'*len(tuple.__repr__(self))
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ciclass set2(set):
397db96d56Sopenharmony_ci    pass
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ciclass set3(set):
427db96d56Sopenharmony_ci    def __repr__(self):
437db96d56Sopenharmony_ci        return set.__repr__(self)
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_ciclass set_custom_repr(set):
467db96d56Sopenharmony_ci    def __repr__(self):
477db96d56Sopenharmony_ci        return '*'*len(set.__repr__(self))
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ciclass frozenset2(frozenset):
507db96d56Sopenharmony_ci    pass
517db96d56Sopenharmony_ci
527db96d56Sopenharmony_ciclass frozenset3(frozenset):
537db96d56Sopenharmony_ci    def __repr__(self):
547db96d56Sopenharmony_ci        return frozenset.__repr__(self)
557db96d56Sopenharmony_ci
567db96d56Sopenharmony_ciclass frozenset_custom_repr(frozenset):
577db96d56Sopenharmony_ci    def __repr__(self):
587db96d56Sopenharmony_ci        return '*'*len(frozenset.__repr__(self))
597db96d56Sopenharmony_ci
607db96d56Sopenharmony_ciclass dict2(dict):
617db96d56Sopenharmony_ci    pass
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_ciclass dict3(dict):
647db96d56Sopenharmony_ci    def __repr__(self):
657db96d56Sopenharmony_ci        return dict.__repr__(self)
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ciclass dict_custom_repr(dict):
687db96d56Sopenharmony_ci    def __repr__(self):
697db96d56Sopenharmony_ci        return '*'*len(dict.__repr__(self))
707db96d56Sopenharmony_ci
717db96d56Sopenharmony_ci@dataclasses.dataclass
727db96d56Sopenharmony_ciclass dataclass1:
737db96d56Sopenharmony_ci    field1: str
747db96d56Sopenharmony_ci    field2: int
757db96d56Sopenharmony_ci    field3: bool = False
767db96d56Sopenharmony_ci    field4: int = dataclasses.field(default=1, repr=False)
777db96d56Sopenharmony_ci
787db96d56Sopenharmony_ci@dataclasses.dataclass
797db96d56Sopenharmony_ciclass dataclass2:
807db96d56Sopenharmony_ci    a: int = 1
817db96d56Sopenharmony_ci    def __repr__(self):
827db96d56Sopenharmony_ci        return "custom repr that doesn't fit within pprint width"
837db96d56Sopenharmony_ci
847db96d56Sopenharmony_ci@dataclasses.dataclass(repr=False)
857db96d56Sopenharmony_ciclass dataclass3:
867db96d56Sopenharmony_ci    a: int = 1
877db96d56Sopenharmony_ci
887db96d56Sopenharmony_ci@dataclasses.dataclass
897db96d56Sopenharmony_ciclass dataclass4:
907db96d56Sopenharmony_ci    a: "dataclass4"
917db96d56Sopenharmony_ci    b: int = 1
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ci@dataclasses.dataclass
947db96d56Sopenharmony_ciclass dataclass5:
957db96d56Sopenharmony_ci    a: "dataclass6"
967db96d56Sopenharmony_ci    b: int = 1
977db96d56Sopenharmony_ci
987db96d56Sopenharmony_ci@dataclasses.dataclass
997db96d56Sopenharmony_ciclass dataclass6:
1007db96d56Sopenharmony_ci    c: "dataclass5"
1017db96d56Sopenharmony_ci    d: int = 1
1027db96d56Sopenharmony_ci
1037db96d56Sopenharmony_ciclass Unorderable:
1047db96d56Sopenharmony_ci    def __repr__(self):
1057db96d56Sopenharmony_ci        return str(id(self))
1067db96d56Sopenharmony_ci
1077db96d56Sopenharmony_ci# Class Orderable is orderable with any type
1087db96d56Sopenharmony_ciclass Orderable:
1097db96d56Sopenharmony_ci    def __init__(self, hash):
1107db96d56Sopenharmony_ci        self._hash = hash
1117db96d56Sopenharmony_ci    def __lt__(self, other):
1127db96d56Sopenharmony_ci        return False
1137db96d56Sopenharmony_ci    def __gt__(self, other):
1147db96d56Sopenharmony_ci        return self != other
1157db96d56Sopenharmony_ci    def __le__(self, other):
1167db96d56Sopenharmony_ci        return self == other
1177db96d56Sopenharmony_ci    def __ge__(self, other):
1187db96d56Sopenharmony_ci        return True
1197db96d56Sopenharmony_ci    def __eq__(self, other):
1207db96d56Sopenharmony_ci        return self is other
1217db96d56Sopenharmony_ci    def __ne__(self, other):
1227db96d56Sopenharmony_ci        return self is not other
1237db96d56Sopenharmony_ci    def __hash__(self):
1247db96d56Sopenharmony_ci        return self._hash
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_ciclass QueryTestCase(unittest.TestCase):
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci    def setUp(self):
1297db96d56Sopenharmony_ci        self.a = list(range(100))
1307db96d56Sopenharmony_ci        self.b = list(range(200))
1317db96d56Sopenharmony_ci        self.a[-12] = self.b
1327db96d56Sopenharmony_ci
1337db96d56Sopenharmony_ci    def test_init(self):
1347db96d56Sopenharmony_ci        pp = pprint.PrettyPrinter()
1357db96d56Sopenharmony_ci        pp = pprint.PrettyPrinter(indent=4, width=40, depth=5,
1367db96d56Sopenharmony_ci                                  stream=io.StringIO(), compact=True)
1377db96d56Sopenharmony_ci        pp = pprint.PrettyPrinter(4, 40, 5, io.StringIO())
1387db96d56Sopenharmony_ci        pp = pprint.PrettyPrinter(sort_dicts=False)
1397db96d56Sopenharmony_ci        with self.assertRaises(TypeError):
1407db96d56Sopenharmony_ci            pp = pprint.PrettyPrinter(4, 40, 5, io.StringIO(), True)
1417db96d56Sopenharmony_ci        self.assertRaises(ValueError, pprint.PrettyPrinter, indent=-1)
1427db96d56Sopenharmony_ci        self.assertRaises(ValueError, pprint.PrettyPrinter, depth=0)
1437db96d56Sopenharmony_ci        self.assertRaises(ValueError, pprint.PrettyPrinter, depth=-1)
1447db96d56Sopenharmony_ci        self.assertRaises(ValueError, pprint.PrettyPrinter, width=0)
1457db96d56Sopenharmony_ci
1467db96d56Sopenharmony_ci    def test_basic(self):
1477db96d56Sopenharmony_ci        # Verify .isrecursive() and .isreadable() w/o recursion
1487db96d56Sopenharmony_ci        pp = pprint.PrettyPrinter()
1497db96d56Sopenharmony_ci        for safe in (2, 2.0, 2j, "abc", [3], (2,2), {3: 3}, b"def",
1507db96d56Sopenharmony_ci                     bytearray(b"ghi"), True, False, None, ...,
1517db96d56Sopenharmony_ci                     self.a, self.b):
1527db96d56Sopenharmony_ci            # module-level convenience functions
1537db96d56Sopenharmony_ci            self.assertFalse(pprint.isrecursive(safe),
1547db96d56Sopenharmony_ci                             "expected not isrecursive for %r" % (safe,))
1557db96d56Sopenharmony_ci            self.assertTrue(pprint.isreadable(safe),
1567db96d56Sopenharmony_ci                            "expected isreadable for %r" % (safe,))
1577db96d56Sopenharmony_ci            # PrettyPrinter methods
1587db96d56Sopenharmony_ci            self.assertFalse(pp.isrecursive(safe),
1597db96d56Sopenharmony_ci                             "expected not isrecursive for %r" % (safe,))
1607db96d56Sopenharmony_ci            self.assertTrue(pp.isreadable(safe),
1617db96d56Sopenharmony_ci                            "expected isreadable for %r" % (safe,))
1627db96d56Sopenharmony_ci
1637db96d56Sopenharmony_ci    def test_stdout_is_None(self):
1647db96d56Sopenharmony_ci        with contextlib.redirect_stdout(None):
1657db96d56Sopenharmony_ci            # smoke test - there is no output to check
1667db96d56Sopenharmony_ci            value = 'this should not fail'
1677db96d56Sopenharmony_ci            pprint.pprint(value)
1687db96d56Sopenharmony_ci            pprint.PrettyPrinter().pprint(value)
1697db96d56Sopenharmony_ci
1707db96d56Sopenharmony_ci    def test_knotted(self):
1717db96d56Sopenharmony_ci        # Verify .isrecursive() and .isreadable() w/ recursion
1727db96d56Sopenharmony_ci        # Tie a knot.
1737db96d56Sopenharmony_ci        self.b[67] = self.a
1747db96d56Sopenharmony_ci        # Messy dict.
1757db96d56Sopenharmony_ci        self.d = {}
1767db96d56Sopenharmony_ci        self.d[0] = self.d[1] = self.d[2] = self.d
1777db96d56Sopenharmony_ci
1787db96d56Sopenharmony_ci        pp = pprint.PrettyPrinter()
1797db96d56Sopenharmony_ci
1807db96d56Sopenharmony_ci        for icky in self.a, self.b, self.d, (self.d, self.d):
1817db96d56Sopenharmony_ci            self.assertTrue(pprint.isrecursive(icky), "expected isrecursive")
1827db96d56Sopenharmony_ci            self.assertFalse(pprint.isreadable(icky), "expected not isreadable")
1837db96d56Sopenharmony_ci            self.assertTrue(pp.isrecursive(icky), "expected isrecursive")
1847db96d56Sopenharmony_ci            self.assertFalse(pp.isreadable(icky), "expected not isreadable")
1857db96d56Sopenharmony_ci
1867db96d56Sopenharmony_ci        # Break the cycles.
1877db96d56Sopenharmony_ci        self.d.clear()
1887db96d56Sopenharmony_ci        del self.a[:]
1897db96d56Sopenharmony_ci        del self.b[:]
1907db96d56Sopenharmony_ci
1917db96d56Sopenharmony_ci        for safe in self.a, self.b, self.d, (self.d, self.d):
1927db96d56Sopenharmony_ci            # module-level convenience functions
1937db96d56Sopenharmony_ci            self.assertFalse(pprint.isrecursive(safe),
1947db96d56Sopenharmony_ci                             "expected not isrecursive for %r" % (safe,))
1957db96d56Sopenharmony_ci            self.assertTrue(pprint.isreadable(safe),
1967db96d56Sopenharmony_ci                            "expected isreadable for %r" % (safe,))
1977db96d56Sopenharmony_ci            # PrettyPrinter methods
1987db96d56Sopenharmony_ci            self.assertFalse(pp.isrecursive(safe),
1997db96d56Sopenharmony_ci                             "expected not isrecursive for %r" % (safe,))
2007db96d56Sopenharmony_ci            self.assertTrue(pp.isreadable(safe),
2017db96d56Sopenharmony_ci                            "expected isreadable for %r" % (safe,))
2027db96d56Sopenharmony_ci
2037db96d56Sopenharmony_ci    def test_unreadable(self):
2047db96d56Sopenharmony_ci        # Not recursive but not readable anyway
2057db96d56Sopenharmony_ci        pp = pprint.PrettyPrinter()
2067db96d56Sopenharmony_ci        for unreadable in type(3), pprint, pprint.isrecursive:
2077db96d56Sopenharmony_ci            # module-level convenience functions
2087db96d56Sopenharmony_ci            self.assertFalse(pprint.isrecursive(unreadable),
2097db96d56Sopenharmony_ci                             "expected not isrecursive for %r" % (unreadable,))
2107db96d56Sopenharmony_ci            self.assertFalse(pprint.isreadable(unreadable),
2117db96d56Sopenharmony_ci                             "expected not isreadable for %r" % (unreadable,))
2127db96d56Sopenharmony_ci            # PrettyPrinter methods
2137db96d56Sopenharmony_ci            self.assertFalse(pp.isrecursive(unreadable),
2147db96d56Sopenharmony_ci                             "expected not isrecursive for %r" % (unreadable,))
2157db96d56Sopenharmony_ci            self.assertFalse(pp.isreadable(unreadable),
2167db96d56Sopenharmony_ci                             "expected not isreadable for %r" % (unreadable,))
2177db96d56Sopenharmony_ci
2187db96d56Sopenharmony_ci    def test_same_as_repr(self):
2197db96d56Sopenharmony_ci        # Simple objects, small containers and classes that override __repr__
2207db96d56Sopenharmony_ci        # to directly call super's __repr__.
2217db96d56Sopenharmony_ci        # For those the result should be the same as repr().
2227db96d56Sopenharmony_ci        # Ahem.  The docs don't say anything about that -- this appears to
2237db96d56Sopenharmony_ci        # be testing an implementation quirk.  Starting in Python 2.5, it's
2247db96d56Sopenharmony_ci        # not true for dicts:  pprint always sorts dicts by key now; before,
2257db96d56Sopenharmony_ci        # it sorted a dict display if and only if the display required
2267db96d56Sopenharmony_ci        # multiple lines.  For that reason, dicts with more than one element
2277db96d56Sopenharmony_ci        # aren't tested here.
2287db96d56Sopenharmony_ci        for simple in (0, 0, 0+0j, 0.0, "", b"", bytearray(),
2297db96d56Sopenharmony_ci                       (), tuple2(), tuple3(),
2307db96d56Sopenharmony_ci                       [], list2(), list3(),
2317db96d56Sopenharmony_ci                       set(), set2(), set3(),
2327db96d56Sopenharmony_ci                       frozenset(), frozenset2(), frozenset3(),
2337db96d56Sopenharmony_ci                       {}, dict2(), dict3(),
2347db96d56Sopenharmony_ci                       self.assertTrue, pprint,
2357db96d56Sopenharmony_ci                       -6, -6, -6-6j, -1.5, "x", b"x", bytearray(b"x"),
2367db96d56Sopenharmony_ci                       (3,), [3], {3: 6},
2377db96d56Sopenharmony_ci                       (1,2), [3,4], {5: 6},
2387db96d56Sopenharmony_ci                       tuple2((1,2)), tuple3((1,2)), tuple3(range(100)),
2397db96d56Sopenharmony_ci                       [3,4], list2([3,4]), list3([3,4]), list3(range(100)),
2407db96d56Sopenharmony_ci                       set({7}), set2({7}), set3({7}),
2417db96d56Sopenharmony_ci                       frozenset({8}), frozenset2({8}), frozenset3({8}),
2427db96d56Sopenharmony_ci                       dict2({5: 6}), dict3({5: 6}),
2437db96d56Sopenharmony_ci                       range(10, -11, -1),
2447db96d56Sopenharmony_ci                       True, False, None, ...,
2457db96d56Sopenharmony_ci                      ):
2467db96d56Sopenharmony_ci            native = repr(simple)
2477db96d56Sopenharmony_ci            self.assertEqual(pprint.pformat(simple), native)
2487db96d56Sopenharmony_ci            self.assertEqual(pprint.pformat(simple, width=1, indent=0)
2497db96d56Sopenharmony_ci                             .replace('\n', ' '), native)
2507db96d56Sopenharmony_ci            self.assertEqual(pprint.pformat(simple, underscore_numbers=True), native)
2517db96d56Sopenharmony_ci            self.assertEqual(pprint.saferepr(simple), native)
2527db96d56Sopenharmony_ci
2537db96d56Sopenharmony_ci    def test_container_repr_override_called(self):
2547db96d56Sopenharmony_ci        N = 1000
2557db96d56Sopenharmony_ci        # Ensure that __repr__ override is called for subclasses of containers
2567db96d56Sopenharmony_ci
2577db96d56Sopenharmony_ci        for cont in (list_custom_repr(),
2587db96d56Sopenharmony_ci                     list_custom_repr([1,2,3]),
2597db96d56Sopenharmony_ci                     list_custom_repr(range(N)),
2607db96d56Sopenharmony_ci                     tuple_custom_repr(),
2617db96d56Sopenharmony_ci                     tuple_custom_repr([1,2,3]),
2627db96d56Sopenharmony_ci                     tuple_custom_repr(range(N)),
2637db96d56Sopenharmony_ci                     set_custom_repr(),
2647db96d56Sopenharmony_ci                     set_custom_repr([1,2,3]),
2657db96d56Sopenharmony_ci                     set_custom_repr(range(N)),
2667db96d56Sopenharmony_ci                     frozenset_custom_repr(),
2677db96d56Sopenharmony_ci                     frozenset_custom_repr([1,2,3]),
2687db96d56Sopenharmony_ci                     frozenset_custom_repr(range(N)),
2697db96d56Sopenharmony_ci                     dict_custom_repr(),
2707db96d56Sopenharmony_ci                     dict_custom_repr({5: 6}),
2717db96d56Sopenharmony_ci                     dict_custom_repr(zip(range(N),range(N))),
2727db96d56Sopenharmony_ci                    ):
2737db96d56Sopenharmony_ci            native = repr(cont)
2747db96d56Sopenharmony_ci            expected = '*' * len(native)
2757db96d56Sopenharmony_ci            self.assertEqual(pprint.pformat(cont), expected)
2767db96d56Sopenharmony_ci            self.assertEqual(pprint.pformat(cont, width=1, indent=0), expected)
2777db96d56Sopenharmony_ci            self.assertEqual(pprint.saferepr(cont), expected)
2787db96d56Sopenharmony_ci
2797db96d56Sopenharmony_ci    def test_basic_line_wrap(self):
2807db96d56Sopenharmony_ci        # verify basic line-wrapping operation
2817db96d56Sopenharmony_ci        o = {'RPM_cal': 0,
2827db96d56Sopenharmony_ci             'RPM_cal2': 48059,
2837db96d56Sopenharmony_ci             'Speed_cal': 0,
2847db96d56Sopenharmony_ci             'controldesk_runtime_us': 0,
2857db96d56Sopenharmony_ci             'main_code_runtime_us': 0,
2867db96d56Sopenharmony_ci             'read_io_runtime_us': 0,
2877db96d56Sopenharmony_ci             'write_io_runtime_us': 43690}
2887db96d56Sopenharmony_ci        exp = """\
2897db96d56Sopenharmony_ci{'RPM_cal': 0,
2907db96d56Sopenharmony_ci 'RPM_cal2': 48059,
2917db96d56Sopenharmony_ci 'Speed_cal': 0,
2927db96d56Sopenharmony_ci 'controldesk_runtime_us': 0,
2937db96d56Sopenharmony_ci 'main_code_runtime_us': 0,
2947db96d56Sopenharmony_ci 'read_io_runtime_us': 0,
2957db96d56Sopenharmony_ci 'write_io_runtime_us': 43690}"""
2967db96d56Sopenharmony_ci        for type in [dict, dict2]:
2977db96d56Sopenharmony_ci            self.assertEqual(pprint.pformat(type(o)), exp)
2987db96d56Sopenharmony_ci
2997db96d56Sopenharmony_ci        o = range(100)
3007db96d56Sopenharmony_ci        exp = '[%s]' % ',\n '.join(map(str, o))
3017db96d56Sopenharmony_ci        for type in [list, list2]:
3027db96d56Sopenharmony_ci            self.assertEqual(pprint.pformat(type(o)), exp)
3037db96d56Sopenharmony_ci
3047db96d56Sopenharmony_ci        o = tuple(range(100))
3057db96d56Sopenharmony_ci        exp = '(%s)' % ',\n '.join(map(str, o))
3067db96d56Sopenharmony_ci        for type in [tuple, tuple2]:
3077db96d56Sopenharmony_ci            self.assertEqual(pprint.pformat(type(o)), exp)
3087db96d56Sopenharmony_ci
3097db96d56Sopenharmony_ci        # indent parameter
3107db96d56Sopenharmony_ci        o = range(100)
3117db96d56Sopenharmony_ci        exp = '[   %s]' % ',\n    '.join(map(str, o))
3127db96d56Sopenharmony_ci        for type in [list, list2]:
3137db96d56Sopenharmony_ci            self.assertEqual(pprint.pformat(type(o), indent=4), exp)
3147db96d56Sopenharmony_ci
3157db96d56Sopenharmony_ci    def test_nested_indentations(self):
3167db96d56Sopenharmony_ci        o1 = list(range(10))
3177db96d56Sopenharmony_ci        o2 = dict(first=1, second=2, third=3)
3187db96d56Sopenharmony_ci        o = [o1, o2]
3197db96d56Sopenharmony_ci        expected = """\
3207db96d56Sopenharmony_ci[   [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
3217db96d56Sopenharmony_ci    {'first': 1, 'second': 2, 'third': 3}]"""
3227db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(o, indent=4, width=42), expected)
3237db96d56Sopenharmony_ci        expected = """\
3247db96d56Sopenharmony_ci[   [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
3257db96d56Sopenharmony_ci    {   'first': 1,
3267db96d56Sopenharmony_ci        'second': 2,
3277db96d56Sopenharmony_ci        'third': 3}]"""
3287db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(o, indent=4, width=41), expected)
3297db96d56Sopenharmony_ci
3307db96d56Sopenharmony_ci    def test_width(self):
3317db96d56Sopenharmony_ci        expected = """\
3327db96d56Sopenharmony_ci[[[[[[1, 2, 3],
3337db96d56Sopenharmony_ci     '1 2']]]],
3347db96d56Sopenharmony_ci {1: [1, 2, 3],
3357db96d56Sopenharmony_ci  2: [12, 34]},
3367db96d56Sopenharmony_ci 'abc def ghi',
3377db96d56Sopenharmony_ci ('ab cd ef',),
3387db96d56Sopenharmony_ci set2({1, 23}),
3397db96d56Sopenharmony_ci [[[[[1, 2, 3],
3407db96d56Sopenharmony_ci     '1 2']]]]]"""
3417db96d56Sopenharmony_ci        o = eval(expected)
3427db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(o, width=15), expected)
3437db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(o, width=16), expected)
3447db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(o, width=25), expected)
3457db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(o, width=14), """\
3467db96d56Sopenharmony_ci[[[[[[1,
3477db96d56Sopenharmony_ci      2,
3487db96d56Sopenharmony_ci      3],
3497db96d56Sopenharmony_ci     '1 '
3507db96d56Sopenharmony_ci     '2']]]],
3517db96d56Sopenharmony_ci {1: [1,
3527db96d56Sopenharmony_ci      2,
3537db96d56Sopenharmony_ci      3],
3547db96d56Sopenharmony_ci  2: [12,
3557db96d56Sopenharmony_ci      34]},
3567db96d56Sopenharmony_ci 'abc def '
3577db96d56Sopenharmony_ci 'ghi',
3587db96d56Sopenharmony_ci ('ab cd '
3597db96d56Sopenharmony_ci  'ef',),
3607db96d56Sopenharmony_ci set2({1,
3617db96d56Sopenharmony_ci       23}),
3627db96d56Sopenharmony_ci [[[[[1,
3637db96d56Sopenharmony_ci      2,
3647db96d56Sopenharmony_ci      3],
3657db96d56Sopenharmony_ci     '1 '
3667db96d56Sopenharmony_ci     '2']]]]]""")
3677db96d56Sopenharmony_ci
3687db96d56Sopenharmony_ci    def test_integer(self):
3697db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(1234567), '1234567')
3707db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(1234567, underscore_numbers=True), '1_234_567')
3717db96d56Sopenharmony_ci
3727db96d56Sopenharmony_ci        class Temperature(int):
3737db96d56Sopenharmony_ci            def __new__(cls, celsius_degrees):
3747db96d56Sopenharmony_ci                return super().__new__(Temperature, celsius_degrees)
3757db96d56Sopenharmony_ci            def __repr__(self):
3767db96d56Sopenharmony_ci                kelvin_degrees = self + 273.15
3777db96d56Sopenharmony_ci                return f"{kelvin_degrees}°K"
3787db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(Temperature(1000)), '1273.15°K')
3797db96d56Sopenharmony_ci
3807db96d56Sopenharmony_ci    def test_sorted_dict(self):
3817db96d56Sopenharmony_ci        # Starting in Python 2.5, pprint sorts dict displays by key regardless
3827db96d56Sopenharmony_ci        # of how small the dictionary may be.
3837db96d56Sopenharmony_ci        # Before the change, on 32-bit Windows pformat() gave order
3847db96d56Sopenharmony_ci        # 'a', 'c', 'b' here, so this test failed.
3857db96d56Sopenharmony_ci        d = {'a': 1, 'b': 1, 'c': 1}
3867db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(d), "{'a': 1, 'b': 1, 'c': 1}")
3877db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat([d, d]),
3887db96d56Sopenharmony_ci            "[{'a': 1, 'b': 1, 'c': 1}, {'a': 1, 'b': 1, 'c': 1}]")
3897db96d56Sopenharmony_ci
3907db96d56Sopenharmony_ci        # The next one is kind of goofy.  The sorted order depends on the
3917db96d56Sopenharmony_ci        # alphabetic order of type names:  "int" < "str" < "tuple".  Before
3927db96d56Sopenharmony_ci        # Python 2.5, this was in the test_same_as_repr() test.  It's worth
3937db96d56Sopenharmony_ci        # keeping around for now because it's one of few tests of pprint
3947db96d56Sopenharmony_ci        # against a crazy mix of types.
3957db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat({"xy\tab\n": (3,), 5: [[]], (): {}}),
3967db96d56Sopenharmony_ci            r"{5: [[]], 'xy\tab\n': (3,), (): {}}")
3977db96d56Sopenharmony_ci
3987db96d56Sopenharmony_ci    def test_sort_dict(self):
3997db96d56Sopenharmony_ci        d = dict.fromkeys('cba')
4007db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(d, sort_dicts=False), "{'c': None, 'b': None, 'a': None}")
4017db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat([d, d], sort_dicts=False),
4027db96d56Sopenharmony_ci            "[{'c': None, 'b': None, 'a': None}, {'c': None, 'b': None, 'a': None}]")
4037db96d56Sopenharmony_ci
4047db96d56Sopenharmony_ci    def test_ordered_dict(self):
4057db96d56Sopenharmony_ci        d = collections.OrderedDict()
4067db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(d, width=1), 'OrderedDict()')
4077db96d56Sopenharmony_ci        d = collections.OrderedDict([])
4087db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(d, width=1), 'OrderedDict()')
4097db96d56Sopenharmony_ci        words = 'the quick brown fox jumped over a lazy dog'.split()
4107db96d56Sopenharmony_ci        d = collections.OrderedDict(zip(words, itertools.count()))
4117db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(d),
4127db96d56Sopenharmony_ci"""\
4137db96d56Sopenharmony_ciOrderedDict([('the', 0),
4147db96d56Sopenharmony_ci             ('quick', 1),
4157db96d56Sopenharmony_ci             ('brown', 2),
4167db96d56Sopenharmony_ci             ('fox', 3),
4177db96d56Sopenharmony_ci             ('jumped', 4),
4187db96d56Sopenharmony_ci             ('over', 5),
4197db96d56Sopenharmony_ci             ('a', 6),
4207db96d56Sopenharmony_ci             ('lazy', 7),
4217db96d56Sopenharmony_ci             ('dog', 8)])""")
4227db96d56Sopenharmony_ci
4237db96d56Sopenharmony_ci    def test_mapping_proxy(self):
4247db96d56Sopenharmony_ci        words = 'the quick brown fox jumped over a lazy dog'.split()
4257db96d56Sopenharmony_ci        d = dict(zip(words, itertools.count()))
4267db96d56Sopenharmony_ci        m = types.MappingProxyType(d)
4277db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(m), """\
4287db96d56Sopenharmony_cimappingproxy({'a': 6,
4297db96d56Sopenharmony_ci              'brown': 2,
4307db96d56Sopenharmony_ci              'dog': 8,
4317db96d56Sopenharmony_ci              'fox': 3,
4327db96d56Sopenharmony_ci              'jumped': 4,
4337db96d56Sopenharmony_ci              'lazy': 7,
4347db96d56Sopenharmony_ci              'over': 5,
4357db96d56Sopenharmony_ci              'quick': 1,
4367db96d56Sopenharmony_ci              'the': 0})""")
4377db96d56Sopenharmony_ci        d = collections.OrderedDict(zip(words, itertools.count()))
4387db96d56Sopenharmony_ci        m = types.MappingProxyType(d)
4397db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(m), """\
4407db96d56Sopenharmony_cimappingproxy(OrderedDict([('the', 0),
4417db96d56Sopenharmony_ci                          ('quick', 1),
4427db96d56Sopenharmony_ci                          ('brown', 2),
4437db96d56Sopenharmony_ci                          ('fox', 3),
4447db96d56Sopenharmony_ci                          ('jumped', 4),
4457db96d56Sopenharmony_ci                          ('over', 5),
4467db96d56Sopenharmony_ci                          ('a', 6),
4477db96d56Sopenharmony_ci                          ('lazy', 7),
4487db96d56Sopenharmony_ci                          ('dog', 8)]))""")
4497db96d56Sopenharmony_ci
4507db96d56Sopenharmony_ci    def test_empty_simple_namespace(self):
4517db96d56Sopenharmony_ci        ns = types.SimpleNamespace()
4527db96d56Sopenharmony_ci        formatted = pprint.pformat(ns)
4537db96d56Sopenharmony_ci        self.assertEqual(formatted, "namespace()")
4547db96d56Sopenharmony_ci
4557db96d56Sopenharmony_ci    def test_small_simple_namespace(self):
4567db96d56Sopenharmony_ci        ns = types.SimpleNamespace(a=1, b=2)
4577db96d56Sopenharmony_ci        formatted = pprint.pformat(ns)
4587db96d56Sopenharmony_ci        self.assertEqual(formatted, "namespace(a=1, b=2)")
4597db96d56Sopenharmony_ci
4607db96d56Sopenharmony_ci    def test_simple_namespace(self):
4617db96d56Sopenharmony_ci        ns = types.SimpleNamespace(
4627db96d56Sopenharmony_ci            the=0,
4637db96d56Sopenharmony_ci            quick=1,
4647db96d56Sopenharmony_ci            brown=2,
4657db96d56Sopenharmony_ci            fox=3,
4667db96d56Sopenharmony_ci            jumped=4,
4677db96d56Sopenharmony_ci            over=5,
4687db96d56Sopenharmony_ci            a=6,
4697db96d56Sopenharmony_ci            lazy=7,
4707db96d56Sopenharmony_ci            dog=8,
4717db96d56Sopenharmony_ci        )
4727db96d56Sopenharmony_ci        formatted = pprint.pformat(ns, width=60, indent=4)
4737db96d56Sopenharmony_ci        self.assertEqual(formatted, """\
4747db96d56Sopenharmony_cinamespace(the=0,
4757db96d56Sopenharmony_ci          quick=1,
4767db96d56Sopenharmony_ci          brown=2,
4777db96d56Sopenharmony_ci          fox=3,
4787db96d56Sopenharmony_ci          jumped=4,
4797db96d56Sopenharmony_ci          over=5,
4807db96d56Sopenharmony_ci          a=6,
4817db96d56Sopenharmony_ci          lazy=7,
4827db96d56Sopenharmony_ci          dog=8)""")
4837db96d56Sopenharmony_ci
4847db96d56Sopenharmony_ci    def test_simple_namespace_subclass(self):
4857db96d56Sopenharmony_ci        class AdvancedNamespace(types.SimpleNamespace): pass
4867db96d56Sopenharmony_ci        ns = AdvancedNamespace(
4877db96d56Sopenharmony_ci            the=0,
4887db96d56Sopenharmony_ci            quick=1,
4897db96d56Sopenharmony_ci            brown=2,
4907db96d56Sopenharmony_ci            fox=3,
4917db96d56Sopenharmony_ci            jumped=4,
4927db96d56Sopenharmony_ci            over=5,
4937db96d56Sopenharmony_ci            a=6,
4947db96d56Sopenharmony_ci            lazy=7,
4957db96d56Sopenharmony_ci            dog=8,
4967db96d56Sopenharmony_ci        )
4977db96d56Sopenharmony_ci        formatted = pprint.pformat(ns, width=60)
4987db96d56Sopenharmony_ci        self.assertEqual(formatted, """\
4997db96d56Sopenharmony_ciAdvancedNamespace(the=0,
5007db96d56Sopenharmony_ci                  quick=1,
5017db96d56Sopenharmony_ci                  brown=2,
5027db96d56Sopenharmony_ci                  fox=3,
5037db96d56Sopenharmony_ci                  jumped=4,
5047db96d56Sopenharmony_ci                  over=5,
5057db96d56Sopenharmony_ci                  a=6,
5067db96d56Sopenharmony_ci                  lazy=7,
5077db96d56Sopenharmony_ci                  dog=8)""")
5087db96d56Sopenharmony_ci
5097db96d56Sopenharmony_ci    def test_empty_dataclass(self):
5107db96d56Sopenharmony_ci        dc = dataclasses.make_dataclass("MyDataclass", ())()
5117db96d56Sopenharmony_ci        formatted = pprint.pformat(dc)
5127db96d56Sopenharmony_ci        self.assertEqual(formatted, "MyDataclass()")
5137db96d56Sopenharmony_ci
5147db96d56Sopenharmony_ci    def test_small_dataclass(self):
5157db96d56Sopenharmony_ci        dc = dataclass1("text", 123)
5167db96d56Sopenharmony_ci        formatted = pprint.pformat(dc)
5177db96d56Sopenharmony_ci        self.assertEqual(formatted, "dataclass1(field1='text', field2=123, field3=False)")
5187db96d56Sopenharmony_ci
5197db96d56Sopenharmony_ci    def test_larger_dataclass(self):
5207db96d56Sopenharmony_ci        dc = dataclass1("some fairly long text", int(1e10), True)
5217db96d56Sopenharmony_ci        formatted = pprint.pformat([dc, dc], width=60, indent=4)
5227db96d56Sopenharmony_ci        self.assertEqual(formatted, """\
5237db96d56Sopenharmony_ci[   dataclass1(field1='some fairly long text',
5247db96d56Sopenharmony_ci               field2=10000000000,
5257db96d56Sopenharmony_ci               field3=True),
5267db96d56Sopenharmony_ci    dataclass1(field1='some fairly long text',
5277db96d56Sopenharmony_ci               field2=10000000000,
5287db96d56Sopenharmony_ci               field3=True)]""")
5297db96d56Sopenharmony_ci
5307db96d56Sopenharmony_ci    def test_dataclass_with_repr(self):
5317db96d56Sopenharmony_ci        dc = dataclass2()
5327db96d56Sopenharmony_ci        formatted = pprint.pformat(dc, width=20)
5337db96d56Sopenharmony_ci        self.assertEqual(formatted, "custom repr that doesn't fit within pprint width")
5347db96d56Sopenharmony_ci
5357db96d56Sopenharmony_ci    def test_dataclass_no_repr(self):
5367db96d56Sopenharmony_ci        dc = dataclass3()
5377db96d56Sopenharmony_ci        formatted = pprint.pformat(dc, width=10)
5387db96d56Sopenharmony_ci        self.assertRegex(formatted, r"<test.test_pprint.dataclass3 object at \w+>")
5397db96d56Sopenharmony_ci
5407db96d56Sopenharmony_ci    def test_recursive_dataclass(self):
5417db96d56Sopenharmony_ci        dc = dataclass4(None)
5427db96d56Sopenharmony_ci        dc.a = dc
5437db96d56Sopenharmony_ci        formatted = pprint.pformat(dc, width=10)
5447db96d56Sopenharmony_ci        self.assertEqual(formatted, """\
5457db96d56Sopenharmony_cidataclass4(a=...,
5467db96d56Sopenharmony_ci           b=1)""")
5477db96d56Sopenharmony_ci
5487db96d56Sopenharmony_ci    def test_cyclic_dataclass(self):
5497db96d56Sopenharmony_ci        dc5 = dataclass5(None)
5507db96d56Sopenharmony_ci        dc6 = dataclass6(None)
5517db96d56Sopenharmony_ci        dc5.a = dc6
5527db96d56Sopenharmony_ci        dc6.c = dc5
5537db96d56Sopenharmony_ci        formatted = pprint.pformat(dc5, width=10)
5547db96d56Sopenharmony_ci        self.assertEqual(formatted, """\
5557db96d56Sopenharmony_cidataclass5(a=dataclass6(c=...,
5567db96d56Sopenharmony_ci                        d=1),
5577db96d56Sopenharmony_ci           b=1)""")
5587db96d56Sopenharmony_ci
5597db96d56Sopenharmony_ci    def test_subclassing(self):
5607db96d56Sopenharmony_ci        # length(repr(obj)) > width
5617db96d56Sopenharmony_ci        o = {'names with spaces': 'should be presented using repr()',
5627db96d56Sopenharmony_ci             'others.should.not.be': 'like.this'}
5637db96d56Sopenharmony_ci        exp = """\
5647db96d56Sopenharmony_ci{'names with spaces': 'should be presented using repr()',
5657db96d56Sopenharmony_ci others.should.not.be: like.this}"""
5667db96d56Sopenharmony_ci
5677db96d56Sopenharmony_ci        dotted_printer = DottedPrettyPrinter()
5687db96d56Sopenharmony_ci        self.assertEqual(dotted_printer.pformat(o), exp)
5697db96d56Sopenharmony_ci
5707db96d56Sopenharmony_ci        # length(repr(obj)) < width
5717db96d56Sopenharmony_ci        o1 = ['with space']
5727db96d56Sopenharmony_ci        exp1 = "['with space']"
5737db96d56Sopenharmony_ci        self.assertEqual(dotted_printer.pformat(o1), exp1)
5747db96d56Sopenharmony_ci        o2 = ['without.space']
5757db96d56Sopenharmony_ci        exp2 = "[without.space]"
5767db96d56Sopenharmony_ci        self.assertEqual(dotted_printer.pformat(o2), exp2)
5777db96d56Sopenharmony_ci
5787db96d56Sopenharmony_ci    def test_set_reprs(self):
5797db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(set()), 'set()')
5807db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(set(range(3))), '{0, 1, 2}')
5817db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(set(range(7)), width=20), '''\
5827db96d56Sopenharmony_ci{0,
5837db96d56Sopenharmony_ci 1,
5847db96d56Sopenharmony_ci 2,
5857db96d56Sopenharmony_ci 3,
5867db96d56Sopenharmony_ci 4,
5877db96d56Sopenharmony_ci 5,
5887db96d56Sopenharmony_ci 6}''')
5897db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(set2(range(7)), width=20), '''\
5907db96d56Sopenharmony_ciset2({0,
5917db96d56Sopenharmony_ci      1,
5927db96d56Sopenharmony_ci      2,
5937db96d56Sopenharmony_ci      3,
5947db96d56Sopenharmony_ci      4,
5957db96d56Sopenharmony_ci      5,
5967db96d56Sopenharmony_ci      6})''')
5977db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(set3(range(7)), width=20),
5987db96d56Sopenharmony_ci                         'set3({0, 1, 2, 3, 4, 5, 6})')
5997db96d56Sopenharmony_ci
6007db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(frozenset()), 'frozenset()')
6017db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(frozenset(range(3))),
6027db96d56Sopenharmony_ci                         'frozenset({0, 1, 2})')
6037db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(frozenset(range(7)), width=20), '''\
6047db96d56Sopenharmony_cifrozenset({0,
6057db96d56Sopenharmony_ci           1,
6067db96d56Sopenharmony_ci           2,
6077db96d56Sopenharmony_ci           3,
6087db96d56Sopenharmony_ci           4,
6097db96d56Sopenharmony_ci           5,
6107db96d56Sopenharmony_ci           6})''')
6117db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(frozenset2(range(7)), width=20), '''\
6127db96d56Sopenharmony_cifrozenset2({0,
6137db96d56Sopenharmony_ci            1,
6147db96d56Sopenharmony_ci            2,
6157db96d56Sopenharmony_ci            3,
6167db96d56Sopenharmony_ci            4,
6177db96d56Sopenharmony_ci            5,
6187db96d56Sopenharmony_ci            6})''')
6197db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(frozenset3(range(7)), width=20),
6207db96d56Sopenharmony_ci                         'frozenset3({0, 1, 2, 3, 4, 5, 6})')
6217db96d56Sopenharmony_ci
6227db96d56Sopenharmony_ci    @unittest.expectedFailure
6237db96d56Sopenharmony_ci    #See http://bugs.python.org/issue13907
6247db96d56Sopenharmony_ci    @test.support.cpython_only
6257db96d56Sopenharmony_ci    def test_set_of_sets_reprs(self):
6267db96d56Sopenharmony_ci        # This test creates a complex arrangement of frozensets and
6277db96d56Sopenharmony_ci        # compares the pretty-printed repr against a string hard-coded in
6287db96d56Sopenharmony_ci        # the test.  The hard-coded repr depends on the sort order of
6297db96d56Sopenharmony_ci        # frozensets.
6307db96d56Sopenharmony_ci        #
6317db96d56Sopenharmony_ci        # However, as the docs point out: "Since sets only define
6327db96d56Sopenharmony_ci        # partial ordering (subset relationships), the output of the
6337db96d56Sopenharmony_ci        # list.sort() method is undefined for lists of sets."
6347db96d56Sopenharmony_ci        #
6357db96d56Sopenharmony_ci        # In a nutshell, the test assumes frozenset({0}) will always
6367db96d56Sopenharmony_ci        # sort before frozenset({1}), but:
6377db96d56Sopenharmony_ci        #
6387db96d56Sopenharmony_ci        # >>> frozenset({0}) < frozenset({1})
6397db96d56Sopenharmony_ci        # False
6407db96d56Sopenharmony_ci        # >>> frozenset({1}) < frozenset({0})
6417db96d56Sopenharmony_ci        # False
6427db96d56Sopenharmony_ci        #
6437db96d56Sopenharmony_ci        # Consequently, this test is fragile and
6447db96d56Sopenharmony_ci        # implementation-dependent.  Small changes to Python's sort
6457db96d56Sopenharmony_ci        # algorithm cause the test to fail when it should pass.
6467db96d56Sopenharmony_ci        # XXX Or changes to the dictionary implementation...
6477db96d56Sopenharmony_ci
6487db96d56Sopenharmony_ci        cube_repr_tgt = """\
6497db96d56Sopenharmony_ci{frozenset(): frozenset({frozenset({2}), frozenset({0}), frozenset({1})}),
6507db96d56Sopenharmony_ci frozenset({0}): frozenset({frozenset(),
6517db96d56Sopenharmony_ci                            frozenset({0, 2}),
6527db96d56Sopenharmony_ci                            frozenset({0, 1})}),
6537db96d56Sopenharmony_ci frozenset({1}): frozenset({frozenset(),
6547db96d56Sopenharmony_ci                            frozenset({1, 2}),
6557db96d56Sopenharmony_ci                            frozenset({0, 1})}),
6567db96d56Sopenharmony_ci frozenset({2}): frozenset({frozenset(),
6577db96d56Sopenharmony_ci                            frozenset({1, 2}),
6587db96d56Sopenharmony_ci                            frozenset({0, 2})}),
6597db96d56Sopenharmony_ci frozenset({1, 2}): frozenset({frozenset({2}),
6607db96d56Sopenharmony_ci                               frozenset({1}),
6617db96d56Sopenharmony_ci                               frozenset({0, 1, 2})}),
6627db96d56Sopenharmony_ci frozenset({0, 2}): frozenset({frozenset({2}),
6637db96d56Sopenharmony_ci                               frozenset({0}),
6647db96d56Sopenharmony_ci                               frozenset({0, 1, 2})}),
6657db96d56Sopenharmony_ci frozenset({0, 1}): frozenset({frozenset({0}),
6667db96d56Sopenharmony_ci                               frozenset({1}),
6677db96d56Sopenharmony_ci                               frozenset({0, 1, 2})}),
6687db96d56Sopenharmony_ci frozenset({0, 1, 2}): frozenset({frozenset({1, 2}),
6697db96d56Sopenharmony_ci                                  frozenset({0, 2}),
6707db96d56Sopenharmony_ci                                  frozenset({0, 1})})}"""
6717db96d56Sopenharmony_ci        cube = test.test_set.cube(3)
6727db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(cube), cube_repr_tgt)
6737db96d56Sopenharmony_ci        cubo_repr_tgt = """\
6747db96d56Sopenharmony_ci{frozenset({frozenset({0, 2}), frozenset({0})}): frozenset({frozenset({frozenset({0,
6757db96d56Sopenharmony_ci                                                                                  2}),
6767db96d56Sopenharmony_ci                                                                       frozenset({0,
6777db96d56Sopenharmony_ci                                                                                  1,
6787db96d56Sopenharmony_ci                                                                                  2})}),
6797db96d56Sopenharmony_ci                                                            frozenset({frozenset({0}),
6807db96d56Sopenharmony_ci                                                                       frozenset({0,
6817db96d56Sopenharmony_ci                                                                                  1})}),
6827db96d56Sopenharmony_ci                                                            frozenset({frozenset(),
6837db96d56Sopenharmony_ci                                                                       frozenset({0})}),
6847db96d56Sopenharmony_ci                                                            frozenset({frozenset({2}),
6857db96d56Sopenharmony_ci                                                                       frozenset({0,
6867db96d56Sopenharmony_ci                                                                                  2})})}),
6877db96d56Sopenharmony_ci frozenset({frozenset({0, 1}), frozenset({1})}): frozenset({frozenset({frozenset({0,
6887db96d56Sopenharmony_ci                                                                                  1}),
6897db96d56Sopenharmony_ci                                                                       frozenset({0,
6907db96d56Sopenharmony_ci                                                                                  1,
6917db96d56Sopenharmony_ci                                                                                  2})}),
6927db96d56Sopenharmony_ci                                                            frozenset({frozenset({0}),
6937db96d56Sopenharmony_ci                                                                       frozenset({0,
6947db96d56Sopenharmony_ci                                                                                  1})}),
6957db96d56Sopenharmony_ci                                                            frozenset({frozenset({1}),
6967db96d56Sopenharmony_ci                                                                       frozenset({1,
6977db96d56Sopenharmony_ci                                                                                  2})}),
6987db96d56Sopenharmony_ci                                                            frozenset({frozenset(),
6997db96d56Sopenharmony_ci                                                                       frozenset({1})})}),
7007db96d56Sopenharmony_ci frozenset({frozenset({1, 2}), frozenset({1})}): frozenset({frozenset({frozenset({1,
7017db96d56Sopenharmony_ci                                                                                  2}),
7027db96d56Sopenharmony_ci                                                                       frozenset({0,
7037db96d56Sopenharmony_ci                                                                                  1,
7047db96d56Sopenharmony_ci                                                                                  2})}),
7057db96d56Sopenharmony_ci                                                            frozenset({frozenset({2}),
7067db96d56Sopenharmony_ci                                                                       frozenset({1,
7077db96d56Sopenharmony_ci                                                                                  2})}),
7087db96d56Sopenharmony_ci                                                            frozenset({frozenset(),
7097db96d56Sopenharmony_ci                                                                       frozenset({1})}),
7107db96d56Sopenharmony_ci                                                            frozenset({frozenset({1}),
7117db96d56Sopenharmony_ci                                                                       frozenset({0,
7127db96d56Sopenharmony_ci                                                                                  1})})}),
7137db96d56Sopenharmony_ci frozenset({frozenset({1, 2}), frozenset({2})}): frozenset({frozenset({frozenset({1,
7147db96d56Sopenharmony_ci                                                                                  2}),
7157db96d56Sopenharmony_ci                                                                       frozenset({0,
7167db96d56Sopenharmony_ci                                                                                  1,
7177db96d56Sopenharmony_ci                                                                                  2})}),
7187db96d56Sopenharmony_ci                                                            frozenset({frozenset({1}),
7197db96d56Sopenharmony_ci                                                                       frozenset({1,
7207db96d56Sopenharmony_ci                                                                                  2})}),
7217db96d56Sopenharmony_ci                                                            frozenset({frozenset({2}),
7227db96d56Sopenharmony_ci                                                                       frozenset({0,
7237db96d56Sopenharmony_ci                                                                                  2})}),
7247db96d56Sopenharmony_ci                                                            frozenset({frozenset(),
7257db96d56Sopenharmony_ci                                                                       frozenset({2})})}),
7267db96d56Sopenharmony_ci frozenset({frozenset(), frozenset({0})}): frozenset({frozenset({frozenset({0}),
7277db96d56Sopenharmony_ci                                                                 frozenset({0,
7287db96d56Sopenharmony_ci                                                                            1})}),
7297db96d56Sopenharmony_ci                                                      frozenset({frozenset({0}),
7307db96d56Sopenharmony_ci                                                                 frozenset({0,
7317db96d56Sopenharmony_ci                                                                            2})}),
7327db96d56Sopenharmony_ci                                                      frozenset({frozenset(),
7337db96d56Sopenharmony_ci                                                                 frozenset({1})}),
7347db96d56Sopenharmony_ci                                                      frozenset({frozenset(),
7357db96d56Sopenharmony_ci                                                                 frozenset({2})})}),
7367db96d56Sopenharmony_ci frozenset({frozenset(), frozenset({1})}): frozenset({frozenset({frozenset(),
7377db96d56Sopenharmony_ci                                                                 frozenset({0})}),
7387db96d56Sopenharmony_ci                                                      frozenset({frozenset({1}),
7397db96d56Sopenharmony_ci                                                                 frozenset({1,
7407db96d56Sopenharmony_ci                                                                            2})}),
7417db96d56Sopenharmony_ci                                                      frozenset({frozenset(),
7427db96d56Sopenharmony_ci                                                                 frozenset({2})}),
7437db96d56Sopenharmony_ci                                                      frozenset({frozenset({1}),
7447db96d56Sopenharmony_ci                                                                 frozenset({0,
7457db96d56Sopenharmony_ci                                                                            1})})}),
7467db96d56Sopenharmony_ci frozenset({frozenset({2}), frozenset()}): frozenset({frozenset({frozenset({2}),
7477db96d56Sopenharmony_ci                                                                 frozenset({1,
7487db96d56Sopenharmony_ci                                                                            2})}),
7497db96d56Sopenharmony_ci                                                      frozenset({frozenset(),
7507db96d56Sopenharmony_ci                                                                 frozenset({0})}),
7517db96d56Sopenharmony_ci                                                      frozenset({frozenset(),
7527db96d56Sopenharmony_ci                                                                 frozenset({1})}),
7537db96d56Sopenharmony_ci                                                      frozenset({frozenset({2}),
7547db96d56Sopenharmony_ci                                                                 frozenset({0,
7557db96d56Sopenharmony_ci                                                                            2})})}),
7567db96d56Sopenharmony_ci frozenset({frozenset({0, 1, 2}), frozenset({0, 1})}): frozenset({frozenset({frozenset({1,
7577db96d56Sopenharmony_ci                                                                                        2}),
7587db96d56Sopenharmony_ci                                                                             frozenset({0,
7597db96d56Sopenharmony_ci                                                                                        1,
7607db96d56Sopenharmony_ci                                                                                        2})}),
7617db96d56Sopenharmony_ci                                                                  frozenset({frozenset({0,
7627db96d56Sopenharmony_ci                                                                                        2}),
7637db96d56Sopenharmony_ci                                                                             frozenset({0,
7647db96d56Sopenharmony_ci                                                                                        1,
7657db96d56Sopenharmony_ci                                                                                        2})}),
7667db96d56Sopenharmony_ci                                                                  frozenset({frozenset({0}),
7677db96d56Sopenharmony_ci                                                                             frozenset({0,
7687db96d56Sopenharmony_ci                                                                                        1})}),
7697db96d56Sopenharmony_ci                                                                  frozenset({frozenset({1}),
7707db96d56Sopenharmony_ci                                                                             frozenset({0,
7717db96d56Sopenharmony_ci                                                                                        1})})}),
7727db96d56Sopenharmony_ci frozenset({frozenset({0}), frozenset({0, 1})}): frozenset({frozenset({frozenset(),
7737db96d56Sopenharmony_ci                                                                       frozenset({0})}),
7747db96d56Sopenharmony_ci                                                            frozenset({frozenset({0,
7757db96d56Sopenharmony_ci                                                                                  1}),
7767db96d56Sopenharmony_ci                                                                       frozenset({0,
7777db96d56Sopenharmony_ci                                                                                  1,
7787db96d56Sopenharmony_ci                                                                                  2})}),
7797db96d56Sopenharmony_ci                                                            frozenset({frozenset({0}),
7807db96d56Sopenharmony_ci                                                                       frozenset({0,
7817db96d56Sopenharmony_ci                                                                                  2})}),
7827db96d56Sopenharmony_ci                                                            frozenset({frozenset({1}),
7837db96d56Sopenharmony_ci                                                                       frozenset({0,
7847db96d56Sopenharmony_ci                                                                                  1})})}),
7857db96d56Sopenharmony_ci frozenset({frozenset({2}), frozenset({0, 2})}): frozenset({frozenset({frozenset({0,
7867db96d56Sopenharmony_ci                                                                                  2}),
7877db96d56Sopenharmony_ci                                                                       frozenset({0,
7887db96d56Sopenharmony_ci                                                                                  1,
7897db96d56Sopenharmony_ci                                                                                  2})}),
7907db96d56Sopenharmony_ci                                                            frozenset({frozenset({2}),
7917db96d56Sopenharmony_ci                                                                       frozenset({1,
7927db96d56Sopenharmony_ci                                                                                  2})}),
7937db96d56Sopenharmony_ci                                                            frozenset({frozenset({0}),
7947db96d56Sopenharmony_ci                                                                       frozenset({0,
7957db96d56Sopenharmony_ci                                                                                  2})}),
7967db96d56Sopenharmony_ci                                                            frozenset({frozenset(),
7977db96d56Sopenharmony_ci                                                                       frozenset({2})})}),
7987db96d56Sopenharmony_ci frozenset({frozenset({0, 1, 2}), frozenset({0, 2})}): frozenset({frozenset({frozenset({1,
7997db96d56Sopenharmony_ci                                                                                        2}),
8007db96d56Sopenharmony_ci                                                                             frozenset({0,
8017db96d56Sopenharmony_ci                                                                                        1,
8027db96d56Sopenharmony_ci                                                                                        2})}),
8037db96d56Sopenharmony_ci                                                                  frozenset({frozenset({0,
8047db96d56Sopenharmony_ci                                                                                        1}),
8057db96d56Sopenharmony_ci                                                                             frozenset({0,
8067db96d56Sopenharmony_ci                                                                                        1,
8077db96d56Sopenharmony_ci                                                                                        2})}),
8087db96d56Sopenharmony_ci                                                                  frozenset({frozenset({0}),
8097db96d56Sopenharmony_ci                                                                             frozenset({0,
8107db96d56Sopenharmony_ci                                                                                        2})}),
8117db96d56Sopenharmony_ci                                                                  frozenset({frozenset({2}),
8127db96d56Sopenharmony_ci                                                                             frozenset({0,
8137db96d56Sopenharmony_ci                                                                                        2})})}),
8147db96d56Sopenharmony_ci frozenset({frozenset({1, 2}), frozenset({0, 1, 2})}): frozenset({frozenset({frozenset({0,
8157db96d56Sopenharmony_ci                                                                                        2}),
8167db96d56Sopenharmony_ci                                                                             frozenset({0,
8177db96d56Sopenharmony_ci                                                                                        1,
8187db96d56Sopenharmony_ci                                                                                        2})}),
8197db96d56Sopenharmony_ci                                                                  frozenset({frozenset({0,
8207db96d56Sopenharmony_ci                                                                                        1}),
8217db96d56Sopenharmony_ci                                                                             frozenset({0,
8227db96d56Sopenharmony_ci                                                                                        1,
8237db96d56Sopenharmony_ci                                                                                        2})}),
8247db96d56Sopenharmony_ci                                                                  frozenset({frozenset({2}),
8257db96d56Sopenharmony_ci                                                                             frozenset({1,
8267db96d56Sopenharmony_ci                                                                                        2})}),
8277db96d56Sopenharmony_ci                                                                  frozenset({frozenset({1}),
8287db96d56Sopenharmony_ci                                                                             frozenset({1,
8297db96d56Sopenharmony_ci                                                                                        2})})})}"""
8307db96d56Sopenharmony_ci
8317db96d56Sopenharmony_ci        cubo = test.test_set.linegraph(cube)
8327db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(cubo), cubo_repr_tgt)
8337db96d56Sopenharmony_ci
8347db96d56Sopenharmony_ci    def test_depth(self):
8357db96d56Sopenharmony_ci        nested_tuple = (1, (2, (3, (4, (5, 6)))))
8367db96d56Sopenharmony_ci        nested_dict = {1: {2: {3: {4: {5: {6: 6}}}}}}
8377db96d56Sopenharmony_ci        nested_list = [1, [2, [3, [4, [5, [6, []]]]]]]
8387db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(nested_tuple), repr(nested_tuple))
8397db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(nested_dict), repr(nested_dict))
8407db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(nested_list), repr(nested_list))
8417db96d56Sopenharmony_ci
8427db96d56Sopenharmony_ci        lv1_tuple = '(1, (...))'
8437db96d56Sopenharmony_ci        lv1_dict = '{1: {...}}'
8447db96d56Sopenharmony_ci        lv1_list = '[1, [...]]'
8457db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(nested_tuple, depth=1), lv1_tuple)
8467db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(nested_dict, depth=1), lv1_dict)
8477db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(nested_list, depth=1), lv1_list)
8487db96d56Sopenharmony_ci
8497db96d56Sopenharmony_ci    def test_sort_unorderable_values(self):
8507db96d56Sopenharmony_ci        # Issue 3976:  sorted pprints fail for unorderable values.
8517db96d56Sopenharmony_ci        n = 20
8527db96d56Sopenharmony_ci        keys = [Unorderable() for i in range(n)]
8537db96d56Sopenharmony_ci        random.shuffle(keys)
8547db96d56Sopenharmony_ci        skeys = sorted(keys, key=id)
8557db96d56Sopenharmony_ci        clean = lambda s: s.replace(' ', '').replace('\n','')
8567db96d56Sopenharmony_ci
8577db96d56Sopenharmony_ci        self.assertEqual(clean(pprint.pformat(set(keys))),
8587db96d56Sopenharmony_ci            '{' + ','.join(map(repr, skeys)) + '}')
8597db96d56Sopenharmony_ci        self.assertEqual(clean(pprint.pformat(frozenset(keys))),
8607db96d56Sopenharmony_ci            'frozenset({' + ','.join(map(repr, skeys)) + '})')
8617db96d56Sopenharmony_ci        self.assertEqual(clean(pprint.pformat(dict.fromkeys(keys))),
8627db96d56Sopenharmony_ci            '{' + ','.join('%r:None' % k for k in skeys) + '}')
8637db96d56Sopenharmony_ci
8647db96d56Sopenharmony_ci        # Issue 10017: TypeError on user-defined types as dict keys.
8657db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat({Unorderable: 0, 1: 0}),
8667db96d56Sopenharmony_ci                         '{1: 0, ' + repr(Unorderable) +': 0}')
8677db96d56Sopenharmony_ci
8687db96d56Sopenharmony_ci        # Issue 14998: TypeError on tuples with NoneTypes as dict keys.
8697db96d56Sopenharmony_ci        keys = [(1,), (None,)]
8707db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(dict.fromkeys(keys, 0)),
8717db96d56Sopenharmony_ci                         '{%r: 0, %r: 0}' % tuple(sorted(keys, key=id)))
8727db96d56Sopenharmony_ci
8737db96d56Sopenharmony_ci    def test_sort_orderable_and_unorderable_values(self):
8747db96d56Sopenharmony_ci        # Issue 22721:  sorted pprints is not stable
8757db96d56Sopenharmony_ci        a = Unorderable()
8767db96d56Sopenharmony_ci        b = Orderable(hash(a))  # should have the same hash value
8777db96d56Sopenharmony_ci        # self-test
8787db96d56Sopenharmony_ci        self.assertLess(a, b)
8797db96d56Sopenharmony_ci        self.assertLess(str(type(b)), str(type(a)))
8807db96d56Sopenharmony_ci        self.assertEqual(sorted([b, a]), [a, b])
8817db96d56Sopenharmony_ci        self.assertEqual(sorted([a, b]), [a, b])
8827db96d56Sopenharmony_ci        # set
8837db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(set([b, a]), width=1),
8847db96d56Sopenharmony_ci                         '{%r,\n %r}' % (a, b))
8857db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(set([a, b]), width=1),
8867db96d56Sopenharmony_ci                         '{%r,\n %r}' % (a, b))
8877db96d56Sopenharmony_ci        # dict
8887db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(dict.fromkeys([b, a]), width=1),
8897db96d56Sopenharmony_ci                         '{%r: None,\n %r: None}' % (a, b))
8907db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(dict.fromkeys([a, b]), width=1),
8917db96d56Sopenharmony_ci                         '{%r: None,\n %r: None}' % (a, b))
8927db96d56Sopenharmony_ci
8937db96d56Sopenharmony_ci    def test_str_wrap(self):
8947db96d56Sopenharmony_ci        # pprint tries to wrap strings intelligently
8957db96d56Sopenharmony_ci        fox = 'the quick brown fox jumped over a lazy dog'
8967db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(fox, width=19), """\
8977db96d56Sopenharmony_ci('the quick brown '
8987db96d56Sopenharmony_ci 'fox jumped over '
8997db96d56Sopenharmony_ci 'a lazy dog')""")
9007db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat({'a': 1, 'b': fox, 'c': 2},
9017db96d56Sopenharmony_ci                                        width=25), """\
9027db96d56Sopenharmony_ci{'a': 1,
9037db96d56Sopenharmony_ci 'b': 'the quick brown '
9047db96d56Sopenharmony_ci      'fox jumped over '
9057db96d56Sopenharmony_ci      'a lazy dog',
9067db96d56Sopenharmony_ci 'c': 2}""")
9077db96d56Sopenharmony_ci        # With some special characters
9087db96d56Sopenharmony_ci        # - \n always triggers a new line in the pprint
9097db96d56Sopenharmony_ci        # - \t and \n are escaped
9107db96d56Sopenharmony_ci        # - non-ASCII is allowed
9117db96d56Sopenharmony_ci        # - an apostrophe doesn't disrupt the pprint
9127db96d56Sopenharmony_ci        special = "Portons dix bons \"whiskys\"\nà l'avocat goujat\t qui fumait au zoo"
9137db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(special, width=68), repr(special))
9147db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(special, width=31), """\
9157db96d56Sopenharmony_ci('Portons dix bons "whiskys"\\n'
9167db96d56Sopenharmony_ci "à l'avocat goujat\\t qui "
9177db96d56Sopenharmony_ci 'fumait au zoo')""")
9187db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(special, width=20), """\
9197db96d56Sopenharmony_ci('Portons dix bons '
9207db96d56Sopenharmony_ci '"whiskys"\\n'
9217db96d56Sopenharmony_ci "à l'avocat "
9227db96d56Sopenharmony_ci 'goujat\\t qui '
9237db96d56Sopenharmony_ci 'fumait au zoo')""")
9247db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat([[[[[special]]]]], width=35), """\
9257db96d56Sopenharmony_ci[[[[['Portons dix bons "whiskys"\\n'
9267db96d56Sopenharmony_ci     "à l'avocat goujat\\t qui "
9277db96d56Sopenharmony_ci     'fumait au zoo']]]]]""")
9287db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat([[[[[special]]]]], width=25), """\
9297db96d56Sopenharmony_ci[[[[['Portons dix bons '
9307db96d56Sopenharmony_ci     '"whiskys"\\n'
9317db96d56Sopenharmony_ci     "à l'avocat "
9327db96d56Sopenharmony_ci     'goujat\\t qui '
9337db96d56Sopenharmony_ci     'fumait au zoo']]]]]""")
9347db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat([[[[[special]]]]], width=23), """\
9357db96d56Sopenharmony_ci[[[[['Portons dix '
9367db96d56Sopenharmony_ci     'bons "whiskys"\\n'
9377db96d56Sopenharmony_ci     "à l'avocat "
9387db96d56Sopenharmony_ci     'goujat\\t qui '
9397db96d56Sopenharmony_ci     'fumait au '
9407db96d56Sopenharmony_ci     'zoo']]]]]""")
9417db96d56Sopenharmony_ci        # An unwrappable string is formatted as its repr
9427db96d56Sopenharmony_ci        unwrappable = "x" * 100
9437db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(unwrappable, width=80), repr(unwrappable))
9447db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(''), "''")
9457db96d56Sopenharmony_ci        # Check that the pprint is a usable repr
9467db96d56Sopenharmony_ci        special *= 10
9477db96d56Sopenharmony_ci        for width in range(3, 40):
9487db96d56Sopenharmony_ci            formatted = pprint.pformat(special, width=width)
9497db96d56Sopenharmony_ci            self.assertEqual(eval(formatted), special)
9507db96d56Sopenharmony_ci            formatted = pprint.pformat([special] * 2, width=width)
9517db96d56Sopenharmony_ci            self.assertEqual(eval(formatted), [special] * 2)
9527db96d56Sopenharmony_ci
9537db96d56Sopenharmony_ci    def test_compact(self):
9547db96d56Sopenharmony_ci        o = ([list(range(i * i)) for i in range(5)] +
9557db96d56Sopenharmony_ci             [list(range(i)) for i in range(6)])
9567db96d56Sopenharmony_ci        expected = """\
9577db96d56Sopenharmony_ci[[], [0], [0, 1, 2, 3],
9587db96d56Sopenharmony_ci [0, 1, 2, 3, 4, 5, 6, 7, 8],
9597db96d56Sopenharmony_ci [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
9607db96d56Sopenharmony_ci  14, 15],
9617db96d56Sopenharmony_ci [], [0], [0, 1], [0, 1, 2], [0, 1, 2, 3],
9627db96d56Sopenharmony_ci [0, 1, 2, 3, 4]]"""
9637db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(o, width=47, compact=True), expected)
9647db96d56Sopenharmony_ci
9657db96d56Sopenharmony_ci    def test_compact_width(self):
9667db96d56Sopenharmony_ci        levels = 20
9677db96d56Sopenharmony_ci        number = 10
9687db96d56Sopenharmony_ci        o = [0] * number
9697db96d56Sopenharmony_ci        for i in range(levels - 1):
9707db96d56Sopenharmony_ci            o = [o]
9717db96d56Sopenharmony_ci        for w in range(levels * 2 + 1, levels + 3 * number - 1):
9727db96d56Sopenharmony_ci            lines = pprint.pformat(o, width=w, compact=True).splitlines()
9737db96d56Sopenharmony_ci            maxwidth = max(map(len, lines))
9747db96d56Sopenharmony_ci            self.assertLessEqual(maxwidth, w)
9757db96d56Sopenharmony_ci            self.assertGreater(maxwidth, w - 3)
9767db96d56Sopenharmony_ci
9777db96d56Sopenharmony_ci    def test_bytes_wrap(self):
9787db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(b'', width=1), "b''")
9797db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(b'abcd', width=1), "b'abcd'")
9807db96d56Sopenharmony_ci        letters = b'abcdefghijklmnopqrstuvwxyz'
9817db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(letters, width=29), repr(letters))
9827db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(letters, width=19), """\
9837db96d56Sopenharmony_ci(b'abcdefghijkl'
9847db96d56Sopenharmony_ci b'mnopqrstuvwxyz')""")
9857db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(letters, width=18), """\
9867db96d56Sopenharmony_ci(b'abcdefghijkl'
9877db96d56Sopenharmony_ci b'mnopqrstuvwx'
9887db96d56Sopenharmony_ci b'yz')""")
9897db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(letters, width=16), """\
9907db96d56Sopenharmony_ci(b'abcdefghijkl'
9917db96d56Sopenharmony_ci b'mnopqrstuvwx'
9927db96d56Sopenharmony_ci b'yz')""")
9937db96d56Sopenharmony_ci        special = bytes(range(16))
9947db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(special, width=61), repr(special))
9957db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(special, width=48), """\
9967db96d56Sopenharmony_ci(b'\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b'
9977db96d56Sopenharmony_ci b'\\x0c\\r\\x0e\\x0f')""")
9987db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(special, width=32), """\
9997db96d56Sopenharmony_ci(b'\\x00\\x01\\x02\\x03'
10007db96d56Sopenharmony_ci b'\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b'
10017db96d56Sopenharmony_ci b'\\x0c\\r\\x0e\\x0f')""")
10027db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(special, width=1), """\
10037db96d56Sopenharmony_ci(b'\\x00\\x01\\x02\\x03'
10047db96d56Sopenharmony_ci b'\\x04\\x05\\x06\\x07'
10057db96d56Sopenharmony_ci b'\\x08\\t\\n\\x0b'
10067db96d56Sopenharmony_ci b'\\x0c\\r\\x0e\\x0f')""")
10077db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat({'a': 1, 'b': letters, 'c': 2},
10087db96d56Sopenharmony_ci                                        width=21), """\
10097db96d56Sopenharmony_ci{'a': 1,
10107db96d56Sopenharmony_ci 'b': b'abcdefghijkl'
10117db96d56Sopenharmony_ci      b'mnopqrstuvwx'
10127db96d56Sopenharmony_ci      b'yz',
10137db96d56Sopenharmony_ci 'c': 2}""")
10147db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat({'a': 1, 'b': letters, 'c': 2},
10157db96d56Sopenharmony_ci                                        width=20), """\
10167db96d56Sopenharmony_ci{'a': 1,
10177db96d56Sopenharmony_ci 'b': b'abcdefgh'
10187db96d56Sopenharmony_ci      b'ijklmnop'
10197db96d56Sopenharmony_ci      b'qrstuvwxyz',
10207db96d56Sopenharmony_ci 'c': 2}""")
10217db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat([[[[[[letters]]]]]], width=25), """\
10227db96d56Sopenharmony_ci[[[[[[b'abcdefghijklmnop'
10237db96d56Sopenharmony_ci      b'qrstuvwxyz']]]]]]""")
10247db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat([[[[[[special]]]]]], width=41), """\
10257db96d56Sopenharmony_ci[[[[[[b'\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07'
10267db96d56Sopenharmony_ci      b'\\x08\\t\\n\\x0b\\x0c\\r\\x0e\\x0f']]]]]]""")
10277db96d56Sopenharmony_ci        # Check that the pprint is a usable repr
10287db96d56Sopenharmony_ci        for width in range(1, 64):
10297db96d56Sopenharmony_ci            formatted = pprint.pformat(special, width=width)
10307db96d56Sopenharmony_ci            self.assertEqual(eval(formatted), special)
10317db96d56Sopenharmony_ci            formatted = pprint.pformat([special] * 2, width=width)
10327db96d56Sopenharmony_ci            self.assertEqual(eval(formatted), [special] * 2)
10337db96d56Sopenharmony_ci
10347db96d56Sopenharmony_ci    def test_bytearray_wrap(self):
10357db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(bytearray(), width=1), "bytearray(b'')")
10367db96d56Sopenharmony_ci        letters = bytearray(b'abcdefghijklmnopqrstuvwxyz')
10377db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(letters, width=40), repr(letters))
10387db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(letters, width=28), """\
10397db96d56Sopenharmony_cibytearray(b'abcdefghijkl'
10407db96d56Sopenharmony_ci          b'mnopqrstuvwxyz')""")
10417db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(letters, width=27), """\
10427db96d56Sopenharmony_cibytearray(b'abcdefghijkl'
10437db96d56Sopenharmony_ci          b'mnopqrstuvwx'
10447db96d56Sopenharmony_ci          b'yz')""")
10457db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(letters, width=25), """\
10467db96d56Sopenharmony_cibytearray(b'abcdefghijkl'
10477db96d56Sopenharmony_ci          b'mnopqrstuvwx'
10487db96d56Sopenharmony_ci          b'yz')""")
10497db96d56Sopenharmony_ci        special = bytearray(range(16))
10507db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(special, width=72), repr(special))
10517db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(special, width=57), """\
10527db96d56Sopenharmony_cibytearray(b'\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b'
10537db96d56Sopenharmony_ci          b'\\x0c\\r\\x0e\\x0f')""")
10547db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(special, width=41), """\
10557db96d56Sopenharmony_cibytearray(b'\\x00\\x01\\x02\\x03'
10567db96d56Sopenharmony_ci          b'\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b'
10577db96d56Sopenharmony_ci          b'\\x0c\\r\\x0e\\x0f')""")
10587db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(special, width=1), """\
10597db96d56Sopenharmony_cibytearray(b'\\x00\\x01\\x02\\x03'
10607db96d56Sopenharmony_ci          b'\\x04\\x05\\x06\\x07'
10617db96d56Sopenharmony_ci          b'\\x08\\t\\n\\x0b'
10627db96d56Sopenharmony_ci          b'\\x0c\\r\\x0e\\x0f')""")
10637db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat({'a': 1, 'b': letters, 'c': 2},
10647db96d56Sopenharmony_ci                                        width=31), """\
10657db96d56Sopenharmony_ci{'a': 1,
10667db96d56Sopenharmony_ci 'b': bytearray(b'abcdefghijkl'
10677db96d56Sopenharmony_ci                b'mnopqrstuvwx'
10687db96d56Sopenharmony_ci                b'yz'),
10697db96d56Sopenharmony_ci 'c': 2}""")
10707db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat([[[[[letters]]]]], width=37), """\
10717db96d56Sopenharmony_ci[[[[[bytearray(b'abcdefghijklmnop'
10727db96d56Sopenharmony_ci               b'qrstuvwxyz')]]]]]""")
10737db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat([[[[[special]]]]], width=50), """\
10747db96d56Sopenharmony_ci[[[[[bytearray(b'\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07'
10757db96d56Sopenharmony_ci               b'\\x08\\t\\n\\x0b\\x0c\\r\\x0e\\x0f')]]]]]""")
10767db96d56Sopenharmony_ci
10777db96d56Sopenharmony_ci    def test_default_dict(self):
10787db96d56Sopenharmony_ci        d = collections.defaultdict(int)
10797db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(d, width=1), "defaultdict(<class 'int'>, {})")
10807db96d56Sopenharmony_ci        words = 'the quick brown fox jumped over a lazy dog'.split()
10817db96d56Sopenharmony_ci        d = collections.defaultdict(int, zip(words, itertools.count()))
10827db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(d),
10837db96d56Sopenharmony_ci"""\
10847db96d56Sopenharmony_cidefaultdict(<class 'int'>,
10857db96d56Sopenharmony_ci            {'a': 6,
10867db96d56Sopenharmony_ci             'brown': 2,
10877db96d56Sopenharmony_ci             'dog': 8,
10887db96d56Sopenharmony_ci             'fox': 3,
10897db96d56Sopenharmony_ci             'jumped': 4,
10907db96d56Sopenharmony_ci             'lazy': 7,
10917db96d56Sopenharmony_ci             'over': 5,
10927db96d56Sopenharmony_ci             'quick': 1,
10937db96d56Sopenharmony_ci             'the': 0})""")
10947db96d56Sopenharmony_ci
10957db96d56Sopenharmony_ci    def test_counter(self):
10967db96d56Sopenharmony_ci        d = collections.Counter()
10977db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(d, width=1), "Counter()")
10987db96d56Sopenharmony_ci        d = collections.Counter('senselessness')
10997db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(d, width=40),
11007db96d56Sopenharmony_ci"""\
11017db96d56Sopenharmony_ciCounter({'s': 6,
11027db96d56Sopenharmony_ci         'e': 4,
11037db96d56Sopenharmony_ci         'n': 2,
11047db96d56Sopenharmony_ci         'l': 1})""")
11057db96d56Sopenharmony_ci
11067db96d56Sopenharmony_ci    def test_chainmap(self):
11077db96d56Sopenharmony_ci        d = collections.ChainMap()
11087db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(d, width=1), "ChainMap({})")
11097db96d56Sopenharmony_ci        words = 'the quick brown fox jumped over a lazy dog'.split()
11107db96d56Sopenharmony_ci        items = list(zip(words, itertools.count()))
11117db96d56Sopenharmony_ci        d = collections.ChainMap(dict(items))
11127db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(d),
11137db96d56Sopenharmony_ci"""\
11147db96d56Sopenharmony_ciChainMap({'a': 6,
11157db96d56Sopenharmony_ci          'brown': 2,
11167db96d56Sopenharmony_ci          'dog': 8,
11177db96d56Sopenharmony_ci          'fox': 3,
11187db96d56Sopenharmony_ci          'jumped': 4,
11197db96d56Sopenharmony_ci          'lazy': 7,
11207db96d56Sopenharmony_ci          'over': 5,
11217db96d56Sopenharmony_ci          'quick': 1,
11227db96d56Sopenharmony_ci          'the': 0})""")
11237db96d56Sopenharmony_ci        d = collections.ChainMap(dict(items), collections.OrderedDict(items))
11247db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(d),
11257db96d56Sopenharmony_ci"""\
11267db96d56Sopenharmony_ciChainMap({'a': 6,
11277db96d56Sopenharmony_ci          'brown': 2,
11287db96d56Sopenharmony_ci          'dog': 8,
11297db96d56Sopenharmony_ci          'fox': 3,
11307db96d56Sopenharmony_ci          'jumped': 4,
11317db96d56Sopenharmony_ci          'lazy': 7,
11327db96d56Sopenharmony_ci          'over': 5,
11337db96d56Sopenharmony_ci          'quick': 1,
11347db96d56Sopenharmony_ci          'the': 0},
11357db96d56Sopenharmony_ci         OrderedDict([('the', 0),
11367db96d56Sopenharmony_ci                      ('quick', 1),
11377db96d56Sopenharmony_ci                      ('brown', 2),
11387db96d56Sopenharmony_ci                      ('fox', 3),
11397db96d56Sopenharmony_ci                      ('jumped', 4),
11407db96d56Sopenharmony_ci                      ('over', 5),
11417db96d56Sopenharmony_ci                      ('a', 6),
11427db96d56Sopenharmony_ci                      ('lazy', 7),
11437db96d56Sopenharmony_ci                      ('dog', 8)]))""")
11447db96d56Sopenharmony_ci
11457db96d56Sopenharmony_ci    def test_deque(self):
11467db96d56Sopenharmony_ci        d = collections.deque()
11477db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(d, width=1), "deque([])")
11487db96d56Sopenharmony_ci        d = collections.deque(maxlen=7)
11497db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(d, width=1), "deque([], maxlen=7)")
11507db96d56Sopenharmony_ci        words = 'the quick brown fox jumped over a lazy dog'.split()
11517db96d56Sopenharmony_ci        d = collections.deque(zip(words, itertools.count()))
11527db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(d),
11537db96d56Sopenharmony_ci"""\
11547db96d56Sopenharmony_cideque([('the', 0),
11557db96d56Sopenharmony_ci       ('quick', 1),
11567db96d56Sopenharmony_ci       ('brown', 2),
11577db96d56Sopenharmony_ci       ('fox', 3),
11587db96d56Sopenharmony_ci       ('jumped', 4),
11597db96d56Sopenharmony_ci       ('over', 5),
11607db96d56Sopenharmony_ci       ('a', 6),
11617db96d56Sopenharmony_ci       ('lazy', 7),
11627db96d56Sopenharmony_ci       ('dog', 8)])""")
11637db96d56Sopenharmony_ci        d = collections.deque(zip(words, itertools.count()), maxlen=7)
11647db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(d),
11657db96d56Sopenharmony_ci"""\
11667db96d56Sopenharmony_cideque([('brown', 2),
11677db96d56Sopenharmony_ci       ('fox', 3),
11687db96d56Sopenharmony_ci       ('jumped', 4),
11697db96d56Sopenharmony_ci       ('over', 5),
11707db96d56Sopenharmony_ci       ('a', 6),
11717db96d56Sopenharmony_ci       ('lazy', 7),
11727db96d56Sopenharmony_ci       ('dog', 8)],
11737db96d56Sopenharmony_ci      maxlen=7)""")
11747db96d56Sopenharmony_ci
11757db96d56Sopenharmony_ci    def test_user_dict(self):
11767db96d56Sopenharmony_ci        d = collections.UserDict()
11777db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(d, width=1), "{}")
11787db96d56Sopenharmony_ci        words = 'the quick brown fox jumped over a lazy dog'.split()
11797db96d56Sopenharmony_ci        d = collections.UserDict(zip(words, itertools.count()))
11807db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(d),
11817db96d56Sopenharmony_ci"""\
11827db96d56Sopenharmony_ci{'a': 6,
11837db96d56Sopenharmony_ci 'brown': 2,
11847db96d56Sopenharmony_ci 'dog': 8,
11857db96d56Sopenharmony_ci 'fox': 3,
11867db96d56Sopenharmony_ci 'jumped': 4,
11877db96d56Sopenharmony_ci 'lazy': 7,
11887db96d56Sopenharmony_ci 'over': 5,
11897db96d56Sopenharmony_ci 'quick': 1,
11907db96d56Sopenharmony_ci 'the': 0}""")
11917db96d56Sopenharmony_ci
11927db96d56Sopenharmony_ci    def test_user_list(self):
11937db96d56Sopenharmony_ci        d = collections.UserList()
11947db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(d, width=1), "[]")
11957db96d56Sopenharmony_ci        words = 'the quick brown fox jumped over a lazy dog'.split()
11967db96d56Sopenharmony_ci        d = collections.UserList(zip(words, itertools.count()))
11977db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(d),
11987db96d56Sopenharmony_ci"""\
11997db96d56Sopenharmony_ci[('the', 0),
12007db96d56Sopenharmony_ci ('quick', 1),
12017db96d56Sopenharmony_ci ('brown', 2),
12027db96d56Sopenharmony_ci ('fox', 3),
12037db96d56Sopenharmony_ci ('jumped', 4),
12047db96d56Sopenharmony_ci ('over', 5),
12057db96d56Sopenharmony_ci ('a', 6),
12067db96d56Sopenharmony_ci ('lazy', 7),
12077db96d56Sopenharmony_ci ('dog', 8)]""")
12087db96d56Sopenharmony_ci
12097db96d56Sopenharmony_ci    def test_user_string(self):
12107db96d56Sopenharmony_ci        d = collections.UserString('')
12117db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(d, width=1), "''")
12127db96d56Sopenharmony_ci        d = collections.UserString('the quick brown fox jumped over a lazy dog')
12137db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat(d, width=20),
12147db96d56Sopenharmony_ci"""\
12157db96d56Sopenharmony_ci('the quick brown '
12167db96d56Sopenharmony_ci 'fox jumped over '
12177db96d56Sopenharmony_ci 'a lazy dog')""")
12187db96d56Sopenharmony_ci        self.assertEqual(pprint.pformat({1: d}, width=20),
12197db96d56Sopenharmony_ci"""\
12207db96d56Sopenharmony_ci{1: 'the quick '
12217db96d56Sopenharmony_ci    'brown fox '
12227db96d56Sopenharmony_ci    'jumped over a '
12237db96d56Sopenharmony_ci    'lazy dog'}""")
12247db96d56Sopenharmony_ci
12257db96d56Sopenharmony_ci
12267db96d56Sopenharmony_ciclass DottedPrettyPrinter(pprint.PrettyPrinter):
12277db96d56Sopenharmony_ci
12287db96d56Sopenharmony_ci    def format(self, object, context, maxlevels, level):
12297db96d56Sopenharmony_ci        if isinstance(object, str):
12307db96d56Sopenharmony_ci            if ' ' in object:
12317db96d56Sopenharmony_ci                return repr(object), 1, 0
12327db96d56Sopenharmony_ci            else:
12337db96d56Sopenharmony_ci                return object, 0, 0
12347db96d56Sopenharmony_ci        else:
12357db96d56Sopenharmony_ci            return pprint.PrettyPrinter.format(
12367db96d56Sopenharmony_ci                self, object, context, maxlevels, level)
12377db96d56Sopenharmony_ci
12387db96d56Sopenharmony_ci
12397db96d56Sopenharmony_ciif __name__ == "__main__":
12407db96d56Sopenharmony_ci    unittest.main()
1241