diff --git a/can/viewer.py b/can/viewer.py index b74e954a0..d8326bd43 100644 --- a/can/viewer.py +++ b/can/viewer.py @@ -300,6 +300,9 @@ def draw_can_bus_message(self, msg, sorting=False): else: values_list.append(str(x)) values_string = " ".join(values_list) + self.ids[key]["values_string_length"] = len(values_string) + values_string += " " * (self.x - len(values_string)) + self.draw_line(self.ids[key]["row"], 77, values_string, color) except (ValueError, struct.error): pass diff --git a/test/test_viewer.py b/test/test_viewer.py index 004877d7a..1db04633d 100644 --- a/test/test_viewer.py +++ b/test/test_viewer.py @@ -189,6 +189,16 @@ def test_send(self): msg = can.Message(arbitration_id=0x101, data=data, is_extended_id=False) self.can_viewer.bus.send(msg) + # Send non-CANopen message with long parsed data length + data = [255, 255] + msg = can.Message(arbitration_id=0x102, data=data, is_extended_id=False) + self.can_viewer.bus.send(msg) + + # Send the same command, but with shorter parsed data length + data = [0, 0] + msg = can.Message(arbitration_id=0x102, data=data, is_extended_id=False) + self.can_viewer.bus.send(msg) + # Message with extended id data = [1, 2, 3, 4, 5, 6, 7, 8] msg = can.Message(arbitration_id=0x123456, data=data, is_extended_id=True) @@ -211,6 +221,8 @@ def test_receive(self): # For converting the EMCY and HEARTBEAT messages 0x080 + 0x01: struct.Struct("ff"), } @@ -230,6 +242,11 @@ def test_receive(self): for col, v in self.stdscr_dummy.draw_buffer[_id["row"]].items(): if col >= 52 + _id["msg"].dlc * 3: self.assertEqual(v, " ") + elif _id["msg"].arbitration_id == 0x102: + # Make sure the parsed values have been cleared after the shorted message was send + for col, v in self.stdscr_dummy.draw_buffer[_id["row"]].items(): + if col >= 77 + _id["values_string_length"]: + self.assertEqual(v, " ") elif _id["msg"].arbitration_id == 0x123456: # Check if the counter is incremented if _id["dt"] == 0: