blob: 6cbcdf5161ff592fac93e17f44ccbf61b141f5a0 [file] [log] [blame]
Wenzel Jakob1d1f81b2016-12-16 15:00:46 +01001import pytest
Jason Rhinelander391c7542017-07-25 16:47:36 -04002from pybind11_tests import pickling as m
Wenzel Jakob1d1f81b2016-12-16 15:00:46 +01003
Dean Moldovana0c1ccf2016-08-12 13:50:00 +02004try:
5 import cPickle as pickle # Use cPickle on Python 2.7
6except ImportError:
7 import pickle
8
Dean Moldovana0c1ccf2016-08-12 13:50:00 +02009
10def test_roundtrip():
Jason Rhinelander391c7542017-07-25 16:47:36 -040011 p = m.Pickleable("test_value")
Dean Moldovana0c1ccf2016-08-12 13:50:00 +020012 p.setExtra1(15)
13 p.setExtra2(48)
14
15 data = pickle.dumps(p, 2) # Must use pickle protocol >= 2
16 p2 = pickle.loads(data)
17 assert p2.value() == p.value()
18 assert p2.extra1() == p.extra1()
19 assert p2.extra2() == p.extra2()
Dean Moldovan6fccf692016-10-11 01:12:48 +020020
21
Wenzel Jakob1d1f81b2016-12-16 15:00:46 +010022@pytest.unsupported_on_pypy
Dean Moldovan6fccf692016-10-11 01:12:48 +020023def test_roundtrip_with_dict():
Jason Rhinelander391c7542017-07-25 16:47:36 -040024 p = m.PickleableWithDict("test_value")
Dean Moldovan6fccf692016-10-11 01:12:48 +020025 p.extra = 15
26 p.dynamic = "Attribute"
27
28 data = pickle.dumps(p, pickle.HIGHEST_PROTOCOL)
29 p2 = pickle.loads(data)
30 assert p2.value == p.value
31 assert p2.extra == p.extra
32 assert p2.dynamic == p.dynamic