diff --git a/frappy/datatypes.py b/frappy/datatypes.py index 8162edc..86cf008 100644 --- a/frappy/datatypes.py +++ b/frappy/datatypes.py @@ -844,9 +844,16 @@ class ArrayOf(DataType): return self(value) def format_value(self, value, unit=None): + innerunit = '' if unit is None: - unit = self.unit or self.members.unit - res = '[%s]' % (', '.join([self.members.format_value(elem, '') for elem in value])) + members = self.members + while isinstance(members, ArrayOf): + members = members.members + if members.unit: + unit = members.unit + else: + innerunit = None + res = '[%s]' % (', '.join([self.members.format_value(elem, innerunit) for elem in value])) if unit: return ' '.join([res, unit]) return res diff --git a/test/test_datatypes.py b/test/test_datatypes.py index 17bfbf6..82cda7c 100644 --- a/test/test_datatypes.py +++ b/test/test_datatypes.py @@ -420,6 +420,9 @@ def test_ArrayOf(): dt = ArrayOf(EnumType('myenum', single=0), 5) copytest(dt) + dt = ArrayOf(ArrayOf(FloatRange(unit='m'))) + assert dt.format_value([[0, 1], [2, 3]]) == '[[0, 1], [2, 3]] m' + def test_TupleOf(): # test constructor catching illegal arguments