|
8 | 8 | import functools |
9 | 9 | import dill |
10 | 10 | import sys |
| 11 | +from dill._dill import _create_function |
11 | 12 | dill.settings['recurse'] = True |
12 | 13 |
|
13 | 14 |
|
@@ -102,5 +103,26 @@ def test_functions(): |
102 | 103 | assert dill.loads(dumped_func_e)(1, 2, 3, e2=4) == 12 |
103 | 104 | assert dill.loads(dumped_func_e)(1, 2, 3, e2=4, e3=5) == 15''') |
104 | 105 |
|
| 106 | +def test_legacy_constructor(): |
| 107 | + if is_py3(): |
| 108 | + fields = ('__code__', '__globals__', '__name__', '__defaults__', |
| 109 | + '__closure__', '__dict__', '__kwdefaults__') |
| 110 | + else: |
| 111 | + fields = ('func_code', 'func_globals', 'func_name', 'func_defaults', |
| 112 | + 'func_closure', '__dict__') |
| 113 | + members = [getattr(function_d, f) for f in fields] |
| 114 | + |
| 115 | + # Old pickle. |
| 116 | + old_func = _create_function(*members) |
| 117 | + # Recent pickle (dill>=0.3.5). |
| 118 | + new_func = _create_function(*members[:5]) |
| 119 | + setattr(new_func, fields[5], members[5]) |
| 120 | + if is_py3(): |
| 121 | + setattr(new_func, fields[6], members[6]) |
| 122 | + |
| 123 | + for field in fields: |
| 124 | + assert getattr(old_func, field) == getattr(new_func, field) |
| 125 | + |
105 | 126 | if __name__ == '__main__': |
106 | 127 | test_functions() |
| 128 | + test_legacy_constructor() |
0 commit comments