17db96d56Sopenharmony_ciimport pickle 27db96d56Sopenharmony_ciimport pickletools 37db96d56Sopenharmony_cifrom test import support 47db96d56Sopenharmony_cifrom test.pickletester import AbstractPickleTests 57db96d56Sopenharmony_ciimport doctest 67db96d56Sopenharmony_ciimport unittest 77db96d56Sopenharmony_ci 87db96d56Sopenharmony_ciclass OptimizedPickleTests(AbstractPickleTests, unittest.TestCase): 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ci def dumps(self, arg, proto=None, **kwargs): 117db96d56Sopenharmony_ci return pickletools.optimize(pickle.dumps(arg, proto, **kwargs)) 127db96d56Sopenharmony_ci 137db96d56Sopenharmony_ci def loads(self, buf, **kwds): 147db96d56Sopenharmony_ci return pickle.loads(buf, **kwds) 157db96d56Sopenharmony_ci 167db96d56Sopenharmony_ci # Test relies on precise output of dumps() 177db96d56Sopenharmony_ci test_pickle_to_2x = None 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_ci # Test relies on writing by chunks into a file object. 207db96d56Sopenharmony_ci test_framed_write_sizes_with_delayed_writer = None 217db96d56Sopenharmony_ci 227db96d56Sopenharmony_ci def test_optimize_long_binget(self): 237db96d56Sopenharmony_ci data = [str(i) for i in range(257)] 247db96d56Sopenharmony_ci data.append(data[-1]) 257db96d56Sopenharmony_ci for proto in range(pickle.HIGHEST_PROTOCOL + 1): 267db96d56Sopenharmony_ci pickled = pickle.dumps(data, proto) 277db96d56Sopenharmony_ci unpickled = pickle.loads(pickled) 287db96d56Sopenharmony_ci self.assertEqual(unpickled, data) 297db96d56Sopenharmony_ci self.assertIs(unpickled[-1], unpickled[-2]) 307db96d56Sopenharmony_ci 317db96d56Sopenharmony_ci pickled2 = pickletools.optimize(pickled) 327db96d56Sopenharmony_ci unpickled2 = pickle.loads(pickled2) 337db96d56Sopenharmony_ci self.assertEqual(unpickled2, data) 347db96d56Sopenharmony_ci self.assertIs(unpickled2[-1], unpickled2[-2]) 357db96d56Sopenharmony_ci self.assertNotIn(pickle.LONG_BINGET, pickled2) 367db96d56Sopenharmony_ci self.assertNotIn(pickle.LONG_BINPUT, pickled2) 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ci def test_optimize_binput_and_memoize(self): 397db96d56Sopenharmony_ci pickled = (b'\x80\x04\x95\x15\x00\x00\x00\x00\x00\x00\x00' 407db96d56Sopenharmony_ci b']\x94(\x8c\x04spamq\x01\x8c\x03ham\x94h\x02e.') 417db96d56Sopenharmony_ci # 0: \x80 PROTO 4 427db96d56Sopenharmony_ci # 2: \x95 FRAME 21 437db96d56Sopenharmony_ci # 11: ] EMPTY_LIST 447db96d56Sopenharmony_ci # 12: \x94 MEMOIZE 457db96d56Sopenharmony_ci # 13: ( MARK 467db96d56Sopenharmony_ci # 14: \x8c SHORT_BINUNICODE 'spam' 477db96d56Sopenharmony_ci # 20: q BINPUT 1 487db96d56Sopenharmony_ci # 22: \x8c SHORT_BINUNICODE 'ham' 497db96d56Sopenharmony_ci # 27: \x94 MEMOIZE 507db96d56Sopenharmony_ci # 28: h BINGET 2 517db96d56Sopenharmony_ci # 30: e APPENDS (MARK at 13) 527db96d56Sopenharmony_ci # 31: . STOP 537db96d56Sopenharmony_ci self.assertIn(pickle.BINPUT, pickled) 547db96d56Sopenharmony_ci unpickled = pickle.loads(pickled) 557db96d56Sopenharmony_ci self.assertEqual(unpickled, ['spam', 'ham', 'ham']) 567db96d56Sopenharmony_ci self.assertIs(unpickled[1], unpickled[2]) 577db96d56Sopenharmony_ci 587db96d56Sopenharmony_ci pickled2 = pickletools.optimize(pickled) 597db96d56Sopenharmony_ci unpickled2 = pickle.loads(pickled2) 607db96d56Sopenharmony_ci self.assertEqual(unpickled2, ['spam', 'ham', 'ham']) 617db96d56Sopenharmony_ci self.assertIs(unpickled2[1], unpickled2[2]) 627db96d56Sopenharmony_ci self.assertNotIn(pickle.BINPUT, pickled2) 637db96d56Sopenharmony_ci 647db96d56Sopenharmony_ci 657db96d56Sopenharmony_ciclass MiscTestCase(unittest.TestCase): 667db96d56Sopenharmony_ci def test__all__(self): 677db96d56Sopenharmony_ci not_exported = { 687db96d56Sopenharmony_ci 'bytes_types', 697db96d56Sopenharmony_ci 'UP_TO_NEWLINE', 'TAKEN_FROM_ARGUMENT1', 707db96d56Sopenharmony_ci 'TAKEN_FROM_ARGUMENT4', 'TAKEN_FROM_ARGUMENT4U', 717db96d56Sopenharmony_ci 'TAKEN_FROM_ARGUMENT8U', 'ArgumentDescriptor', 727db96d56Sopenharmony_ci 'read_uint1', 'read_uint2', 'read_int4', 'read_uint4', 737db96d56Sopenharmony_ci 'read_uint8', 'read_stringnl', 'read_stringnl_noescape', 747db96d56Sopenharmony_ci 'read_stringnl_noescape_pair', 'read_string1', 757db96d56Sopenharmony_ci 'read_string4', 'read_bytes1', 'read_bytes4', 767db96d56Sopenharmony_ci 'read_bytes8', 'read_bytearray8', 'read_unicodestringnl', 777db96d56Sopenharmony_ci 'read_unicodestring1', 'read_unicodestring4', 787db96d56Sopenharmony_ci 'read_unicodestring8', 'read_decimalnl_short', 797db96d56Sopenharmony_ci 'read_decimalnl_long', 'read_floatnl', 'read_float8', 807db96d56Sopenharmony_ci 'read_long1', 'read_long4', 817db96d56Sopenharmony_ci 'uint1', 'uint2', 'int4', 'uint4', 'uint8', 'stringnl', 827db96d56Sopenharmony_ci 'stringnl_noescape', 'stringnl_noescape_pair', 'string1', 837db96d56Sopenharmony_ci 'string4', 'bytes1', 'bytes4', 'bytes8', 'bytearray8', 847db96d56Sopenharmony_ci 'unicodestringnl', 'unicodestring1', 'unicodestring4', 857db96d56Sopenharmony_ci 'unicodestring8', 'decimalnl_short', 'decimalnl_long', 867db96d56Sopenharmony_ci 'floatnl', 'float8', 'long1', 'long4', 877db96d56Sopenharmony_ci 'StackObject', 887db96d56Sopenharmony_ci 'pyint', 'pylong', 'pyinteger_or_bool', 'pybool', 'pyfloat', 897db96d56Sopenharmony_ci 'pybytes_or_str', 'pystring', 'pybytes', 'pybytearray', 907db96d56Sopenharmony_ci 'pyunicode', 'pynone', 'pytuple', 'pylist', 'pydict', 917db96d56Sopenharmony_ci 'pyset', 'pyfrozenset', 'pybuffer', 'anyobject', 927db96d56Sopenharmony_ci 'markobject', 'stackslice', 'OpcodeInfo', 'opcodes', 937db96d56Sopenharmony_ci 'code2op', 947db96d56Sopenharmony_ci } 957db96d56Sopenharmony_ci support.check__all__(self, pickletools, not_exported=not_exported) 967db96d56Sopenharmony_ci 977db96d56Sopenharmony_ci 987db96d56Sopenharmony_cidef load_tests(loader, tests, pattern): 997db96d56Sopenharmony_ci tests.addTest(doctest.DocTestSuite(pickletools)) 1007db96d56Sopenharmony_ci return tests 1017db96d56Sopenharmony_ci 1027db96d56Sopenharmony_ci 1037db96d56Sopenharmony_ciif __name__ == "__main__": 1047db96d56Sopenharmony_ci unittest.main() 105