Files
revpimodio2/tests/common/test_devices.py

117 lines
4.1 KiB
Python

# -*- coding: utf-8 -*-
"""Tests instantiation all local classes."""
__author__ = "Sven Sager"
__copyright__ = "Copyright (C) 2024 Sven Sager"
__license__ = "GPLv2"
from os.path import dirname
from revpimodio2 import OUT, MEM, INP
from revpimodio2.device import Virtual, Base
from tests import TestRevPiModIO
class TestDevicesModule(TestRevPiModIO):
data_dir = dirname(__file__)
def test_device(self):
"""Test device attributes."""
rpi = self.modio()
self.assertEqual(rpi.device[64].name, "virt01")
self.assertEqual(rpi.device.virt01.length, 64)
self.assertEqual(rpi.device.virt01.name, "virt01")
self.assertIsInstance(rpi.device.virt01.offset, int)
self.assertEqual(rpi.device.virt01.position, 64)
self.assertEqual(rpi.device.virt01.producttype, 32768)
# Magic
self.assertEqual("virt01" in rpi.device, True)
self.assertEqual("nixnix" in rpi.device, False)
self.assertEqual(64 in rpi.device, True)
self.assertEqual(128 in rpi.device, False)
self.assertEqual(rpi.device.virt01 in rpi.device, True)
self.assertIsInstance(bytes(rpi.device.virt01), bytes)
# We have 7 devices in config.rsc file
self.assertEqual(len(rpi.device), 7)
def test_devs_and_ios(self):
"""Test IO grouping of devices."""
rpi = self.modio()
self.assertEqual(len(rpi.device.virt01), 64)
# getIOs
self.assertIsInstance(rpi.device.aio01.get_inputs(), list)
self.assertIsInstance(rpi.device.aio01.get_outputs(), list)
self.assertIsInstance(rpi.device.aio01.get_memories(), list)
int_inputs = len(rpi.device.aio01.get_inputs())
int_output = len(rpi.device.aio01.get_outputs())
self.assertIsInstance(rpi.device.aio01.get_allios(), list)
self.assertEqual(len(rpi.device.aio01.get_allios()), int_inputs + int_output)
# IO Byte vergleichen
int_byte = 0
for devio in [rpi.device.aio01.get_allios(), rpi.device.aio01.get_memories()]:
for io in devio:
int_byte += io.length
self.assertEqual(len(rpi.device.aio01), int_byte)
# Test the types of IOs
len_end = 0
len_start = len_end
for io in rpi.device.aio01.get_inputs():
self.assertEqual(io.type, INP)
len_end += io.length
self.assertEqual(len_start, rpi.device.aio01._slc_inp.start)
self.assertEqual(len_end, rpi.device.aio01._slc_inp.stop)
len_start = len_end
for io in rpi.device.aio01.get_outputs():
self.assertEqual(io.type, OUT)
len_end += io.length
self.assertEqual(len_start, rpi.device.aio01._slc_out.start)
self.assertEqual(len_end, rpi.device.aio01._slc_out.stop)
len_start = len_end
for io in rpi.device.aio01.get_memories():
self.assertEqual(io.type, MEM)
len_end += io.length
self.assertEqual(len_start, rpi.device.aio01._slc_mem.start)
self.assertEqual(len_end, rpi.device.aio01._slc_mem.stop)
def test_device_modifications(self):
"""Test device modifications."""
rpi = self.modio()
# Zugriffe
self.assertIsInstance(rpi.device.virt01, Virtual)
self.assertIsInstance(rpi.device["virt01"], Virtual)
# IO-Abfragen
self.assertEqual("pbit0_7" in rpi.device.virt01, True)
self.assertEqual(rpi.io.pbit0_7 in rpi.device.virt01, True)
self.assertEqual(33 in rpi.device.virt01, False)
self.assertEqual(552 in rpi.device.virt01, True)
# Löschen
del rpi.device.virt01
with self.assertRaises(AttributeError):
rpi.device.virt01
self.assertEqual(rpi.device[0].name, "picore01")
del rpi.device[0]
with self.assertRaises(IndexError):
rpi.device[0]
with self.assertRaises(AttributeError):
rpi.device.picore01
del rpi.device[rpi.device.di01]
def test_new_basedevice(self):
"""Test unknown (new) base device."""
rpi = self.modio(configrsc="config_new_base.rsc")
self.assertEqual(type(rpi.device[0]), Base)
del rpi