Signed-off-by: Vincent Fazio <vfazio@xxxxxxxxxxx> --- bindings/python/tests/tests_chip.py | 10 +++++++--- bindings/python/tests/tests_chip_info.py | 13 ++++++++++--- bindings/python/tests/tests_edge_event.py | 11 +++++++++-- bindings/python/tests/tests_info_event.py | 30 +++++++++++++++++++++++++----- bindings/python/tests/tests_line_info.py | 13 +++++++++++-- 5 files changed, 62 insertions(+), 15 deletions(-) diff --git a/bindings/python/tests/tests_chip.py b/bindings/python/tests/tests_chip.py index 89d5df4341eceefbc0eed9b880ac641caa682af5..b719f6ba402c962b3ba8029cef61ed28fd1a525a 100644 --- a/bindings/python/tests/tests_chip.py +++ b/bindings/python/tests/tests_chip.py @@ -3,6 +3,7 @@ import errno import os +from typing import Optional from unittest import TestCase import gpiod @@ -70,7 +71,7 @@ class ChipBooleanConversion(TestCase): class ChipProperties(TestCase): def setUp(self) -> None: - self.sim = gpiosim.Chip() + self.sim: Optional[gpiosim.Chip] = gpiosim.Chip() self.chip = gpiod.Chip(self.sim.dev_path) def tearDown(self) -> None: @@ -78,6 +79,7 @@ class ChipProperties(TestCase): self.sim = None def test_get_chip_path(self) -> None: + assert self.sim self.assertEqual(self.sim.dev_path, self.chip.path) def test_get_fd(self) -> None: @@ -195,7 +197,7 @@ class ClosedChipCannotBeUsed(TestCase): class StringRepresentation(TestCase): def setUp(self) -> None: - self.sim = gpiosim.Chip(num_lines=4, label="foobar") + self.sim: Optional[gpiosim.Chip] = gpiosim.Chip(num_lines=4, label="foobar") self.chip = gpiod.Chip(self.sim.dev_path) def tearDown(self) -> None: @@ -203,12 +205,14 @@ class StringRepresentation(TestCase): self.sim = None def test_repr(self) -> None: + assert self.sim self.assertEqual(repr(self.chip), 'gpiod.Chip("{}")'.format(self.sim.dev_path)) cmp = eval(repr(self.chip)) self.assertEqual(self.chip.path, cmp.path) def test_str(self) -> None: + assert self.sim info = self.chip.get_info() self.assertEqual( str(self.chip), @@ -220,7 +224,7 @@ class StringRepresentation(TestCase): class StringRepresentationClosed(TestCase): def setUp(self) -> None: - self.sim = gpiosim.Chip(num_lines=4, label="foobar") + self.sim: Optional[gpiosim.Chip] = gpiosim.Chip(num_lines=4, label="foobar") self.chip = gpiod.Chip(self.sim.dev_path) def tearDown(self) -> None: diff --git a/bindings/python/tests/tests_chip_info.py b/bindings/python/tests/tests_chip_info.py index 99259af307fa25bc3ff39574a1bea1cc9dc254a6..463f07ab8edeec7dde8dacc4829b86dd3b1d6ebd 100644 --- a/bindings/python/tests/tests_chip_info.py +++ b/bindings/python/tests/tests_chip_info.py @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later # SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@xxxxxxxx> +from typing import Optional from unittest import TestCase import gpiod @@ -10,26 +11,32 @@ from . import gpiosim class ChipInfoProperties(TestCase): def setUp(self) -> None: - self.sim = gpiosim.Chip(label="foobar", num_lines=16) - self.chip = gpiod.Chip(self.sim.dev_path) - self.info = self.chip.get_info() + self.sim: Optional[gpiosim.Chip] = gpiosim.Chip(label="foobar", num_lines=16) + self.chip: Optional[gpiod.Chip] = gpiod.Chip(self.sim.dev_path) + self.info: Optional[gpiod.ChipInfo] = self.chip.get_info() def tearDown(self) -> None: + assert self.chip self.info = None self.chip.close() self.chip = None self.sim = None def test_chip_info_name(self) -> None: + assert self.sim + assert self.info self.assertEqual(self.info.name, self.sim.name) def test_chip_info_label(self) -> None: + assert self.info self.assertEqual(self.info.label, "foobar") def test_chip_info_num_lines(self) -> None: + assert self.info self.assertEqual(self.info.num_lines, 16) def test_chip_info_properties_are_immutable(self) -> None: + assert self.info with self.assertRaises(AttributeError): self.info.name = "foobar" # type: ignore[misc] diff --git a/bindings/python/tests/tests_edge_event.py b/bindings/python/tests/tests_edge_event.py index f80d6a52680c48405b935fca8e47e2a2817a2fac..fc938f0492811631a1d3855f1c41203d3bc4a4fc 100644 --- a/bindings/python/tests/tests_edge_event.py +++ b/bindings/python/tests/tests_edge_event.py @@ -5,6 +5,7 @@ import time from datetime import timedelta from functools import partial from threading import Thread +from typing import Optional from unittest import TestCase import gpiod @@ -53,8 +54,8 @@ class EdgeEventInvalidConfig(TestCase): class WaitingForEdgeEvents(TestCase): def setUp(self) -> None: - self.sim = gpiosim.Chip(num_lines=8) - self.thread = None + self.sim: Optional[gpiosim.Chip] = gpiosim.Chip(num_lines=8) + self.thread: Optional[Thread] = None def tearDown(self) -> None: if self.thread: @@ -63,6 +64,7 @@ class WaitingForEdgeEvents(TestCase): self.sim = None def trigger_falling_and_rising_edge(self, offset: int) -> None: + assert self.sim time.sleep(0.05) self.sim.set_pull(offset, Pull.UP) time.sleep(0.05) @@ -71,12 +73,14 @@ class WaitingForEdgeEvents(TestCase): def trigger_rising_edge_events_on_two_offsets( self, offset0: int, offset1: int ) -> None: + assert self.sim time.sleep(0.05) self.sim.set_pull(offset0, Pull.UP) time.sleep(0.05) self.sim.set_pull(offset1, Pull.UP) def test_both_edge_events(self) -> None: + assert self.sim with gpiod.request_lines( self.sim.dev_path, {2: gpiod.LineSettings(edge_detection=Edge.BOTH)} ) as req: @@ -104,6 +108,7 @@ class WaitingForEdgeEvents(TestCase): self.assertGreater(ts_falling, ts_rising) def test_rising_edge_event(self) -> None: + assert self.sim with gpiod.request_lines( self.sim.dev_path, {6: gpiod.LineSettings(edge_detection=Edge.RISING)} ) as req: @@ -122,6 +127,7 @@ class WaitingForEdgeEvents(TestCase): self.assertFalse(req.wait_edge_events(timedelta(microseconds=10000))) def test_falling_edge_event(self) -> None: + assert self.sim with gpiod.request_lines( self.sim.dev_path, {6: gpiod.LineSettings(edge_detection=Edge.FALLING)} ) as req: @@ -140,6 +146,7 @@ class WaitingForEdgeEvents(TestCase): self.assertFalse(req.wait_edge_events(timedelta(microseconds=10000))) def test_sequence_numbers(self) -> None: + assert self.sim with gpiod.request_lines( self.sim.dev_path, {(2, 4): gpiod.LineSettings(edge_detection=Edge.BOTH)} ) as req: diff --git a/bindings/python/tests/tests_info_event.py b/bindings/python/tests/tests_info_event.py index 1e6ab941799047c7e5383a6d0a2512c669655d19..3328335d478ff694e8b2ff3189738475af0a783e 100644 --- a/bindings/python/tests/tests_info_event.py +++ b/bindings/python/tests/tests_info_event.py @@ -7,6 +7,7 @@ import threading import time from dataclasses import FrozenInstanceError from functools import partial +from typing import Optional from unittest import TestCase import gpiod @@ -49,48 +50,60 @@ def request_reconfigure_release_line(chip_path: str, offset: int) -> None: class WatchingInfoEventWorks(TestCase): def setUp(self) -> None: - self.sim = gpiosim.Chip(num_lines=8, line_names={4: "foobar"}) - self.chip = gpiod.Chip(self.sim.dev_path) - self.thread = None + self.sim: Optional[gpiosim.Chip] = gpiosim.Chip( + num_lines=8, line_names={4: "foobar"} + ) + self.chip: Optional[gpiod.Chip] = gpiod.Chip(self.sim.dev_path) + self.thread: Optional[threading.Thread] = None def tearDown(self) -> None: if self.thread: self.thread.join() self.thread = None + assert self.chip self.chip.close() self.chip = None self.sim = None def test_watch_line_info_returns_line_info(self) -> None: + assert self.chip info = self.chip.watch_line_info(7) self.assertEqual(info.offset, 7) def test_watch_line_info_keyword_argument(self) -> None: + assert self.chip info = self.chip.watch_line_info(line=7) def test_watch_line_info_offset_out_of_range(self) -> None: + assert self.chip with self.assertRaises(ValueError): self.chip.watch_line_info(8) def test_watch_line_info_no_arguments(self) -> None: + assert self.chip with self.assertRaises(TypeError): self.chip.watch_line_info() # type: ignore[call-arg] def test_watch_line_info_by_line_name(self) -> None: + assert self.chip self.chip.watch_line_info("foobar") def test_watch_line_info_invalid_argument_type(self) -> None: + assert self.chip with self.assertRaises(TypeError): self.chip.watch_line_info(None) # type: ignore[arg-type] def test_wait_for_event_timeout(self) -> None: + assert self.chip info = self.chip.watch_line_info(7) self.assertFalse( self.chip.wait_info_event(datetime.timedelta(microseconds=10000)) ) def test_request_reconfigure_release_events(self) -> None: + assert self.chip + assert self.sim info = self.chip.watch_line_info(7) self.assertEqual(info.direction, Direction.INPUT) @@ -133,15 +146,19 @@ class WatchingInfoEventWorks(TestCase): class UnwatchingLineInfo(TestCase): def setUp(self) -> None: - self.sim = gpiosim.Chip(num_lines=8, line_names={4: "foobar"}) - self.chip = gpiod.Chip(self.sim.dev_path) + self.sim: Optional[gpiosim.Chip] = gpiosim.Chip( + num_lines=8, line_names={4: "foobar"} + ) + self.chip: Optional[gpiod.Chip] = gpiod.Chip(self.sim.dev_path) def tearDown(self) -> None: + assert self.chip self.chip.close() self.chip = None self.sim = None def test_unwatch_line_info(self) -> None: + assert self.chip self.chip.watch_line_info(0) with self.chip.request_lines(config={0: None}) as request: self.assertTrue(self.chip.wait_info_event(datetime.timedelta(seconds=1))) @@ -154,16 +171,19 @@ class UnwatchingLineInfo(TestCase): ) def test_unwatch_not_watched_line(self) -> None: + assert self.chip with self.assertRaises(OSError) as ex: self.chip.unwatch_line_info(2) self.assertEqual(ex.exception.errno, errno.EBUSY) def test_unwatch_line_info_no_argument(self) -> None: + assert self.chip with self.assertRaises(TypeError): self.chip.unwatch_line_info() # type: ignore[call-arg] def test_unwatch_line_info_by_line_name(self) -> None: + assert self.chip self.chip.watch_line_info(4) with self.chip.request_lines(config={4: None}) as request: self.assertIsNotNone(self.chip.read_info_event()) diff --git a/bindings/python/tests/tests_line_info.py b/bindings/python/tests/tests_line_info.py index 33d38a6de486447d326e8e3cb73934898ea2aba2..7215221ac1fb3b2a0730c189321cdea498da8226 100644 --- a/bindings/python/tests/tests_line_info.py +++ b/bindings/python/tests/tests_line_info.py @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later # SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@xxxxxxxx> +from typing import Optional from unittest import TestCase import gpiod @@ -13,38 +14,46 @@ HogDir = gpiosim.Chip.Direction class GetLineInfo(TestCase): def setUp(self) -> None: - self.sim = gpiosim.Chip( + self.sim: Optional[gpiosim.Chip] = gpiosim.Chip( num_lines=4, line_names={0: "foobar"}, ) - self.chip = gpiod.Chip(self.sim.dev_path) + self.chip: Optional[gpiod.Chip] = gpiod.Chip(self.sim.dev_path) def tearDown(self) -> None: + assert self.chip self.chip.close() self.chip = None self.sim = None def test_get_line_info_by_offset(self) -> None: + assert self.chip self.chip.get_line_info(0) def test_get_line_info_by_offset_keyword(self) -> None: + assert self.chip self.chip.get_line_info(line=0) def test_get_line_info_by_name(self) -> None: + assert self.chip self.chip.get_line_info("foobar") def test_get_line_info_by_name_keyword(self) -> None: + assert self.chip self.chip.get_line_info(line="foobar") def test_get_line_info_by_offset_string(self) -> None: + assert self.chip self.chip.get_line_info("2") def test_offset_out_of_range(self) -> None: + assert self.chip with self.assertRaises(ValueError) as ex: self.chip.get_line_info(4) def test_no_offset(self) -> None: + assert self.chip with self.assertRaises(TypeError): self.chip.get_line_info() # type: ignore[call-arg] -- 2.34.1