From 24744a5a9ca3394ff694aecba39be3b8c06b0ee5 Mon Sep 17 00:00:00 2001 From: Sven Sager Date: Fri, 8 Nov 2024 09:31:04 +0100 Subject: [PATCH] test: Add tests for RevPi Connect 5 --- tests/revpi5/__init__.py | 5 +++ tests/revpi5/config_connect5.rsc | 1 + tests/revpi5/test_connect5.py | 69 ++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 tests/revpi5/__init__.py create mode 100644 tests/revpi5/config_connect5.rsc create mode 100644 tests/revpi5/test_connect5.py diff --git a/tests/revpi5/__init__.py b/tests/revpi5/__init__.py new file mode 100644 index 0000000..2dc037f --- /dev/null +++ b/tests/revpi5/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +"""Init file for test group.""" +__author__ = "Sven Sager" +__copyright__ = "Copyright (C) 2024 Sven Sager" +__license__ = "GPLv2" diff --git a/tests/revpi5/config_connect5.rsc b/tests/revpi5/config_connect5.rsc new file mode 100644 index 0000000..5c02f6d --- /dev/null +++ b/tests/revpi5/config_connect5.rsc @@ -0,0 +1 @@ +{"App":{"name": "PiCtory", "version": "2.10.0","saveTS": "20241108090523","language": "en","layout": {"north":{"size":70,"initClosed":false,"initHidden":false},"south":{"size":540,"initClosed":false,"initHidden":false,"children":{"layout1":{"east":{"size":500,"initClosed":false,"initHidden":false}}}},"east":{"size":70,"initClosed":true,"initHidden":false,"children":{}},"west":{"size":259,"initClosed":false,"initHidden":false,"children":{"layout1":{}}}}},"Summary":{"inpTotal": 6,"outTotal": 7},"Devices":[{"GUID": "df5a907c-3d82-1d32-4e5f-4c33fb41a559","id": "device_RevPiConnect5_20240315_1_0_001","type": "BASE","productType": "138","position": "0","name": "connect5","bmk": "RevPi Connect 5","inpVariant": 0,"outVariant": 0,"comment": "This is a RevPi Connect 5 Device","offset": 0,"inp": {"0": ["RevPiStatus","0","8","0",true,"0000", "",""],"1": ["RevPiIOCycle","0","8","1",true,"0001", "",""],"2": ["RS485ErrorCnt","0","16","2",false,"0002", "",""],"3": ["Core_Temperature","0","8","4",false,"0003", "",""],"4": ["Core_Frequency","0","8","5",false,"0004", "",""]},"out": {"0": ["RevPiReservedByte","","8","6",false,"0005", "",""],"1": ["RS485ErrorLimit1","10","16","7",false,"0006", "",""],"2": ["RS485ErrorLimit2","1000","16","9",false,"0007", "",""],"3": ["RevPiLED","0","16","11",true,"0008", "",""]},"mem": {},"extend": {}}],"Connections":[]} diff --git a/tests/revpi5/test_connect5.py b/tests/revpi5/test_connect5.py new file mode 100644 index 0000000..f8d447a --- /dev/null +++ b/tests/revpi5/test_connect5.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +"""Tests for RevPi 5 devices.""" +__author__ = "Sven Sager" +__copyright__ = "Copyright (C) 2024 Sven Sager" +__license__ = "GPLv2" + +from os.path import dirname + +import revpimodio2 +from .. import TestRevPiModIO + + +class TestRevPi5(TestRevPiModIO): + + data_dir = dirname(__file__) + + def test_connect5(self): + rpi = self.modio(configrsc="config_connect5.rsc") + rpi.setdefaultvalues() + + self.assertIsInstance(rpi.core, revpimodio2.device.Connect5) + + # Test all LED (A1 - A5) with all colors + lst_led_test = [ + (rpi.core._get_leda1, rpi.core._set_leda1), + (rpi.core._get_leda2, rpi.core._set_leda2), + (rpi.core._get_leda3, rpi.core._set_leda3), + (rpi.core._get_leda4, rpi.core._set_leda4), + (rpi.core._get_leda5, rpi.core._set_leda5), + ] + for i in range(len(lst_led_test)): + get_led = lst_led_test[i][0] + set_led = lst_led_test[i][1] + for k in ( + (revpimodio2.GREEN, 2), + (revpimodio2.RED, 1), + (revpimodio2.BLUE, 4), + (revpimodio2.ORANGE, 3), + (revpimodio2.MAGENTA, 5), # Switched GR bit + (revpimodio2.WHITE, 7), + (revpimodio2.CYAN, 6), # Switched GR bit + (revpimodio2.OFF, 0), + ): + set_led(k[0]) + self.assertEqual( + rpi.io.RevPiLED.get_value(), + (k[1] << (i * 3)).to_bytes(2, "little"), + ) + self.assertEqual(get_led(), k[0]) + with self.assertRaises(ValueError): + set_led(8) + + self.assertIsInstance(rpi.core.temperature, int) + self.assertIsInstance(rpi.core.frequency, int) + + with self.assertRaises(NotImplementedError): + rpi.core.wd_toggle() + + with self.assertRaisesRegex(AttributeError, r"direct assignment is not supported"): + rpi.core.a5green = True + + # Connect 5 has no IOs build in + with self.assertRaises(AttributeError): + output = rpi.core.x2out.value + with self.assertRaises(AttributeError): + rpi.core.x2in.value = True + + rpi.exit() + del rpi