@@ -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:
@@ -1,6 +1,7 @@
# SPDX-License-Identifier: GPL-2.0-or-later
# SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@bgdev.pl>
+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]
@@ -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:
@@ -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())
@@ -1,6 +1,7 @@
# SPDX-License-Identifier: GPL-2.0-or-later
# SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@bgdev.pl>
+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]
Signed-off-by: Vincent Fazio <vfazio@xes-inc.com> --- 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(-)