From 39f0180f4086ac4bda8ba0fc795dd04b63bca4bf Mon Sep 17 00:00:00 2001 From: Markus Zolliker Date: Tue, 21 Mar 2023 12:41:20 +0100 Subject: [PATCH] format unit properly in the case of nested arrays The unit is shown at the end of nested arrays. Change-Id: I235bc40e61161e09a7b00cd1e186d8d8c1769d89 Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/30734 Tested-by: Jenkins Automated Tests Reviewed-by: Markus Zolliker --- frappy/datatypes.py | 11 +++++++++-- test/test_datatypes.py | 3 +++ 2 files changed, 12 insertions(+), 2 deletions(-) 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