47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
		
		
			
		
	
	
			47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
|  | # -*- coding: utf-8 -*- | ||
|  | import pytest | ||
|  | 
 | ||
|  | import env  # noqa: F401 | ||
|  | 
 | ||
|  | from pybind11_tests import pickling as m | ||
|  | 
 | ||
|  | try: | ||
|  |     import cPickle as pickle  # Use cPickle on Python 2.7 | ||
|  | except ImportError: | ||
|  |     import pickle | ||
|  | 
 | ||
|  | 
 | ||
|  | @pytest.mark.parametrize("cls_name", ["Pickleable", "PickleableNew"]) | ||
|  | def test_roundtrip(cls_name): | ||
|  |     cls = getattr(m, cls_name) | ||
|  |     p = cls("test_value") | ||
|  |     p.setExtra1(15) | ||
|  |     p.setExtra2(48) | ||
|  | 
 | ||
|  |     data = pickle.dumps(p, 2)  # Must use pickle protocol >= 2 | ||
|  |     p2 = pickle.loads(data) | ||
|  |     assert p2.value() == p.value() | ||
|  |     assert p2.extra1() == p.extra1() | ||
|  |     assert p2.extra2() == p.extra2() | ||
|  | 
 | ||
|  | 
 | ||
|  | @pytest.mark.xfail("env.PYPY") | ||
|  | @pytest.mark.parametrize("cls_name", ["PickleableWithDict", "PickleableWithDictNew"]) | ||
|  | def test_roundtrip_with_dict(cls_name): | ||
|  |     cls = getattr(m, cls_name) | ||
|  |     p = cls("test_value") | ||
|  |     p.extra = 15 | ||
|  |     p.dynamic = "Attribute" | ||
|  | 
 | ||
|  |     data = pickle.dumps(p, pickle.HIGHEST_PROTOCOL) | ||
|  |     p2 = pickle.loads(data) | ||
|  |     assert p2.value == p.value | ||
|  |     assert p2.extra == p.extra | ||
|  |     assert p2.dynamic == p.dynamic | ||
|  | 
 | ||
|  | 
 | ||
|  | def test_enum_pickle(): | ||
|  |     from pybind11_tests import enums as e | ||
|  |     data = pickle.dumps(e.EOne, 2) | ||
|  |     assert e.EOne == pickle.loads(data) |