| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | from dill.detect import baditems, badobjects, badtypes, errors, parent, at, globalvars |
| | from dill import settings |
| | from dill._dill import IS_PYPY |
| | from pickle import PicklingError |
| |
|
| | import inspect |
| | import sys |
| | import os |
| |
|
| | def test_bad_things(): |
| | f = inspect.currentframe() |
| | assert baditems(f) == [f] |
| | |
| | assert badobjects(f) is f |
| | assert badtypes(f) == type(f) |
| | assert type(errors(f)) is TypeError |
| | d = badtypes(f, 1) |
| | assert isinstance(d, dict) |
| | assert list(badobjects(f, 1).keys()) == list(d.keys()) |
| | assert list(errors(f, 1).keys()) == list(d.keys()) |
| | s = set([(err.__class__.__name__,err.args[0]) for err in list(errors(f, 1).values())]) |
| | a = dict(s) |
| | if not os.environ.get('COVERAGE'): |
| | proxy = 0 if type(f.f_locals) is dict else 1 |
| | assert len(s) == len(a) + proxy |
| | n = 2 |
| | assert len(a) is n if 'PicklingError' in a.keys() else n-1 |
| |
|
| | def test_parent(): |
| | x = [4,5,6,7] |
| | listiter = iter(x) |
| | obj = parent(listiter, list) |
| | assert obj is x |
| |
|
| | if IS_PYPY: assert parent(obj, int) is None |
| | else: assert parent(obj, int) is x[-1] |
| | assert at(id(at)) is at |
| |
|
| | a, b, c = 1, 2, 3 |
| |
|
| | def squared(x): |
| | return a+x**2 |
| |
|
| | def foo(x): |
| | def bar(y): |
| | return squared(x)+y |
| | return bar |
| |
|
| | class _class: |
| | def _method(self): |
| | pass |
| | def ok(self): |
| | return True |
| |
|
| | def test_globals(): |
| | def f(): |
| | a |
| | def g(): |
| | b |
| | def h(): |
| | c |
| | assert globalvars(f) == dict(a=1, b=2, c=3) |
| |
|
| | res = globalvars(foo, recurse=True) |
| | assert set(res) == set(['squared', 'a']) |
| | res = globalvars(foo, recurse=False) |
| | assert res == {} |
| | zap = foo(2) |
| | res = globalvars(zap, recurse=True) |
| | assert set(res) == set(['squared', 'a']) |
| | res = globalvars(zap, recurse=False) |
| | assert set(res) == set(['squared']) |
| | del zap |
| | res = globalvars(squared) |
| | assert set(res) == set(['a']) |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| |
|
| | |
| | bar = [0] |
| |
|
| | class Foo(object): |
| | def __init__(self): |
| | pass |
| | def __getstate__(self): |
| | bar[0] = bar[0]+1 |
| | return {} |
| | def __setstate__(self, data): |
| | pass |
| |
|
| | f = Foo() |
| |
|
| | def test_getstate(): |
| | from dill import dumps, loads |
| | dumps(f) |
| | b = bar[0] |
| | dumps(lambda: f, recurse=False) |
| | assert bar[0] == b |
| | dumps(lambda: f, recurse=True) |
| | assert bar[0] == b + 1 |
| |
|
| | |
| | def test_deleted(): |
| | global sin |
| | from dill import dumps, loads |
| | from math import sin, pi |
| |
|
| | def sinc(x): |
| | return sin(x)/x |
| |
|
| | settings['recurse'] = True |
| | _sinc = dumps(sinc) |
| | sin = globals().pop('sin') |
| | sin = 1 |
| | del sin |
| | sinc_ = loads(_sinc) |
| | res = sinc_(1) |
| | from math import sin |
| | assert sinc(1) == res |
| |
|
| |
|
| | def test_lambdify(): |
| | try: |
| | from sympy import symbols, lambdify |
| | except ImportError: |
| | return |
| | settings['recurse'] = True |
| | x = symbols("x") |
| | y = x**2 |
| | f = lambdify([x], y) |
| | z = min |
| | d = globals() |
| | globalvars(f, recurse=True, builtin=True) |
| | assert z is min |
| | assert d is globals() |
| |
|
| |
|
| | if __name__ == '__main__': |
| | test_bad_things() |
| | test_parent() |
| | test_globals() |
| | test_getstate() |
| | test_deleted() |
| | test_lambdify() |
| |
|