fix DataType.copy for nested types
all nested types need a specific copy method, as some information of EnumType (its name) and TextType are not visible in the exported form Change-Id: I3ef765ca35cda11b10798c68a3e2115502554c2e Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/21441 Tested-by: JenkinsCodeReview <bjoern_pedersen@frm2.tum.de> Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de> Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
This commit is contained in:
parent
536c798699
commit
0700ddc455
@ -604,6 +604,10 @@ class ArrayOf(DataType):
|
||||
self.members = members
|
||||
self.set_properties(minlen=minlen, maxlen=maxlen)
|
||||
|
||||
def copy(self):
|
||||
"""DataType.copy does not work when members are enums"""
|
||||
return ArrayOf(self.members.copy(), self.minlen, self.maxlen)
|
||||
|
||||
def checkProperties(self):
|
||||
self.default = [self.members.default] * self.minlen
|
||||
super().checkProperties()
|
||||
@ -679,6 +683,10 @@ class TupleOf(DataType):
|
||||
self.members = members
|
||||
self.default = tuple(el.default for el in members)
|
||||
|
||||
def copy(self):
|
||||
"""DataType.copy does not work when members contain enums"""
|
||||
return TupleOf(*(m.copy() for m in self.members))
|
||||
|
||||
def export_datatype(self):
|
||||
return dict(type='tuple', members=[subtype.export_datatype() for subtype in self.members])
|
||||
|
||||
@ -739,6 +747,10 @@ class StructOf(DataType):
|
||||
'Only members of StructOf may be declared as optional!')
|
||||
self.default = dict((k,el.default) for k, el in members.items())
|
||||
|
||||
def copy(self):
|
||||
"""DataType.copy does not work when members contain enums"""
|
||||
return StructOf(self.optional, **{k: v.copy() for k,v in self.members.items()})
|
||||
|
||||
def export_datatype(self):
|
||||
res = dict(type='struct', members=dict((n, s.export_datatype())
|
||||
for n, s in list(self.members.items())))
|
||||
|
@ -195,6 +195,7 @@ def test_EnumType():
|
||||
|
||||
dt = EnumType('dt', a=3, c=7, stuff=1)
|
||||
copytest(dt)
|
||||
|
||||
assert dt.export_datatype() == {'type': 'enum', 'members': dict(a=3, c=7, stuff=1)}
|
||||
|
||||
with pytest.raises(ValueError):
|
||||
@ -396,6 +397,9 @@ def test_ArrayOf():
|
||||
with pytest.raises(ConfigError):
|
||||
dt.checkProperties()
|
||||
|
||||
dt = ArrayOf(EnumType('myenum', single=0), 5)
|
||||
copytest(dt)
|
||||
|
||||
def test_TupleOf():
|
||||
# test constructor catching illegal arguments
|
||||
with pytest.raises(ValueError):
|
||||
@ -417,6 +421,9 @@ def test_TupleOf():
|
||||
|
||||
assert dt.format_value([3,0]) == "(3, False)"
|
||||
|
||||
dt = TupleOf(EnumType('myenum', single=0))
|
||||
copytest(dt)
|
||||
|
||||
|
||||
def test_StructOf():
|
||||
# test constructor catching illegal arguments
|
||||
@ -449,6 +456,9 @@ def test_StructOf():
|
||||
|
||||
assert dt.format_value({'an_int':2, 'a_string':'Z'}) == "{a_string='Z', an_int=2}"
|
||||
|
||||
dt = StructOf(['optionalmember'], optionalmember=EnumType('myenum', single=0))
|
||||
copytest(dt)
|
||||
|
||||
|
||||
def test_Command():
|
||||
dt = CommandType()
|
||||
|
Loading…
x
Reference in New Issue
Block a user