serialize new callback
This commit is contained in:
@ -3,6 +3,10 @@ from tiramisu.option import BoolOption, UnicodeOption, SymLinkOption, \
|
||||
from pickle import dumps, loads
|
||||
|
||||
|
||||
def return_value(value=None):
|
||||
return value
|
||||
|
||||
|
||||
def _get_slots(opt):
|
||||
slots = set()
|
||||
for subclass in opt.__class__.__mro__:
|
||||
@ -65,6 +69,18 @@ def _diff_opt(opt1, opt2):
|
||||
for index, consistency in enumerate(val1):
|
||||
assert consistency[0] == val2[index][0]
|
||||
assert consistency[1]._name == val2[index][1]._name
|
||||
elif attr == '_callback':
|
||||
assert val1[0] == val2[0]
|
||||
if val1[1] is not None:
|
||||
for key, values in val1[1].items():
|
||||
for idx, value in enumerate(values):
|
||||
if isinstance(value, tuple):
|
||||
assert val1[1][key][idx][0]._name == val2[1][key][idx][0]._name
|
||||
assert val1[1][key][idx][1] == val2[1][key][idx][1]
|
||||
else:
|
||||
assert val1[1][key][idx] == val2[1][key][idx]
|
||||
else:
|
||||
assert val1[1] == val2[1]
|
||||
else:
|
||||
assert val1 == val2
|
||||
|
||||
@ -104,6 +120,23 @@ def test_diff_opt_cache():
|
||||
_diff_opt(o1.o.s, q.o.s)
|
||||
|
||||
|
||||
def test_diff_opt_callback():
|
||||
b = BoolOption('b', '', callback=return_value)
|
||||
b2 = BoolOption('b2', '', callback=return_value, callback_params={'': ('yes',)})
|
||||
b3 = BoolOption('b3', '', callback=return_value, callback_params={'': ('yes', (b, False)), 'value': ('no',)})
|
||||
o = OptionDescription('o', '', [b, b2, b3])
|
||||
o1 = OptionDescription('o1', '', [o])
|
||||
o1.impl_build_cache()
|
||||
|
||||
a = dumps(o1)
|
||||
q = loads(a)
|
||||
_diff_opt(o1, q)
|
||||
_diff_opt(o1.o, q.o)
|
||||
_diff_opt(o1.o.b, q.o.b)
|
||||
_diff_opt(o1.o.b2, q.o.b2)
|
||||
_diff_opt(o1.o.b3, q.o.b3)
|
||||
|
||||
|
||||
def test_no_state_attr():
|
||||
# all _state_xxx attributes should be deleted
|
||||
b = BoolOption('b', '')
|
||||
|
Reference in New Issue
Block a user