From d970af73fd1878b26622dec426d569e7a6f613b5 Mon Sep 17 00:00:00 2001 From: Andrew Scheller Date: Thu, 18 Feb 2016 18:53:52 +0000 Subject: [PATCH 1/3] Catch AttributeError inside GPIODevice._read Fixes #202 --- gpiozero/devices.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gpiozero/devices.py b/gpiozero/devices.py index a1feb4e..5e5b29b 100644 --- a/gpiozero/devices.py +++ b/gpiozero/devices.py @@ -243,7 +243,7 @@ class GPIODevice(ValuesMixin, GPIOBase): def _read(self): try: return self.pin.state == self._active_state - except TypeError: + except (AttributeError, TypeError): self._check_open() raise From 504b0b90479255a425f7e8c510dbea733ac1ebc7 Mon Sep 17 00:00:00 2001 From: Andrew Scheller Date: Thu, 18 Feb 2016 20:01:13 +0000 Subject: [PATCH 2/3] Add some GPIODevice unit-tests --- tests/test_devices.py | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/tests/test_devices.py b/tests/test_devices.py index 9dff553..2eb7b41 100644 --- a/tests/test_devices.py +++ b/tests/test_devices.py @@ -13,5 +13,45 @@ from gpiozero.pins.mock import MockPin from gpiozero import * -# TODO devices tests! +# TODO add more devices tests! + +def test_device_no_pin(): + with pytest.raises(GPIOPinMissing): + device = GPIODevice() + +def test_device_init(): + pin = MockPin(2) + device = GPIODevice(pin) + assert not device.closed + assert device.pin == pin + +def test_device_init_twice_same_pin(): + pin = MockPin(2) + device = GPIODevice(pin) + with pytest.raises(GPIOPinInUse): + device2 = GPIODevice(pin) + +def test_device_init_twice_different_pin(): + pin = MockPin(2) + device = GPIODevice(pin) + pin2 = MockPin(3) + device2 = GPIODevice(pin2) + +def test_device_close(): + pin = MockPin(2) + device = GPIODevice(pin) + device.close() + assert device.closed + assert device.pin is None + +def test_device_repr(): + pin = MockPin(2) + device = GPIODevice(pin) + assert repr(device) == '' % pin + +def test_device_repr_after_close(): + pin = MockPin(2) + device = GPIODevice(pin) + device.close() + assert repr(device) == '' From d1bb5fe66a4cd8fb41b99c8a5404b3d29753bc58 Mon Sep 17 00:00:00 2001 From: Andrew Scheller Date: Fri, 19 Feb 2016 00:19:41 +0000 Subject: [PATCH 3/3] Added another unit test --- tests/test_devices.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/test_devices.py b/tests/test_devices.py index 2eb7b41..0312c7e 100644 --- a/tests/test_devices.py +++ b/tests/test_devices.py @@ -44,6 +44,16 @@ def test_device_close(): assert device.closed assert device.pin is None +def test_device_reopen_same_pin(): + pin = MockPin(2) + device = GPIODevice(pin) + device.close() + device2 = GPIODevice(pin) + assert not device2.closed + assert device2.pin == pin + assert device.closed + assert device.pin is None + def test_device_repr(): pin = MockPin(2) device = GPIODevice(pin)