test_pickling.py revision 14299
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
3714299Sbbruce@ucdavis.edu
3814299Sbbruce@ucdavis.edu
3914299Sbbruce@ucdavis.edudef test_enum_pickle():
4014299Sbbruce@ucdavis.edu    from pybind11_tests import enums as e
4114299Sbbruce@ucdavis.edu    data = pickle.dumps(e.EOne, 2)
4214299Sbbruce@ucdavis.edu    assert e.EOne == pickle.loads(data)
43