Merge pull request #203 from lurch/patch-4

Catch AttributeError inside GPIODevice._read
This commit is contained in:
Dave Jones
2016-02-19 11:26:43 +00:00
2 changed files with 52 additions and 2 deletions

View File

@@ -243,7 +243,7 @@ class GPIODevice(ValuesMixin, GPIOBase):
def _read(self): def _read(self):
try: try:
return self.pin.state == self._active_state return self.pin.state == self._active_state
except TypeError: except (AttributeError, TypeError):
self._check_open() self._check_open()
raise raise

View File

@@ -13,5 +13,55 @@ from gpiozero.pins.mock import MockPin
from gpiozero import * 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_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)
assert repr(device) == '<gpiozero.GPIODevice object on pin %s, is_active=False>' % pin
def test_device_repr_after_close():
pin = MockPin(2)
device = GPIODevice(pin)
device.close()
assert repr(device) == '<gpiozero.GPIODevice object closed>'