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