test_pickling.py revision 12391
112037Sandreas.sandberg@arm.comimport pytest 212391Sjason@lowepower.comfrom pybind11_tests import pickling as m 312037Sandreas.sandberg@arm.com 411986Sandreas.sandberg@arm.comtry: 511986Sandreas.sandberg@arm.com import cPickle as pickle # Use cPickle on Python 2.7 611986Sandreas.sandberg@arm.comexcept ImportError: 711986Sandreas.sandberg@arm.com import pickle 811986Sandreas.sandberg@arm.com 911986Sandreas.sandberg@arm.com 1012391Sjason@lowepower.com@pytest.mark.parametrize("cls_name", ["Pickleable", "PickleableNew"]) 1112391Sjason@lowepower.comdef test_roundtrip(cls_name): 1212391Sjason@lowepower.com cls = getattr(m, cls_name) 1312391Sjason@lowepower.com p = cls("test_value") 1411986Sandreas.sandberg@arm.com p.setExtra1(15) 1511986Sandreas.sandberg@arm.com p.setExtra2(48) 1611986Sandreas.sandberg@arm.com 1711986Sandreas.sandberg@arm.com data = pickle.dumps(p, 2) # Must use pickle protocol >= 2 1811986Sandreas.sandberg@arm.com p2 = pickle.loads(data) 1911986Sandreas.sandberg@arm.com assert p2.value() == p.value() 2011986Sandreas.sandberg@arm.com assert p2.extra1() == p.extra1() 2111986Sandreas.sandberg@arm.com assert p2.extra2() == p.extra2() 2211986Sandreas.sandberg@arm.com 2311986Sandreas.sandberg@arm.com 2412037Sandreas.sandberg@arm.com@pytest.unsupported_on_pypy 2512391Sjason@lowepower.com@pytest.mark.parametrize("cls_name", ["PickleableWithDict", "PickleableWithDictNew"]) 2612391Sjason@lowepower.comdef test_roundtrip_with_dict(cls_name): 2712391Sjason@lowepower.com cls = getattr(m, cls_name) 2812391Sjason@lowepower.com p = cls("test_value") 2911986Sandreas.sandberg@arm.com p.extra = 15 3011986Sandreas.sandberg@arm.com p.dynamic = "Attribute" 3111986Sandreas.sandberg@arm.com 3211986Sandreas.sandberg@arm.com data = pickle.dumps(p, pickle.HIGHEST_PROTOCOL) 3311986Sandreas.sandberg@arm.com p2 = pickle.loads(data) 3411986Sandreas.sandberg@arm.com assert p2.value == p.value 3511986Sandreas.sandberg@arm.com assert p2.extra == p.extra 3611986Sandreas.sandberg@arm.com assert p2.dynamic == p.dynamic 37