Make tests work reliably on the Pi

While the tests work well on a PC or Travis, the Pi (where I ought to be
running them!) has some issues with the timing tests. Need to relax the
tolerance of the "assert_states_and_times" method to 0.05 seconds
otherwise it periodically fails even on something reasonably quick like
a Pi 2 (less failures on a Pi 3 but still occasionally).

Also reduced default fps to 25; if the default timing occasionally fails
on a Pi 2 it's evidently too fast for a Pi 1 and shouldn't be the
default; 25 also doesn't look any different to me on a pulsing LED.

There's also a bunch of miscellaneous fixes in here; last minute typos
and chart re-gens for the 1.2 release.
This commit is contained in:
Dave Jones
2016-04-08 11:10:59 +01:00
parent 44422bd6c9
commit c2a9392ea5
28 changed files with 846 additions and 842 deletions

View File

@@ -24,21 +24,22 @@ def test_device_no_pin():
def test_device_init():
pin = MockPin(2)
device = GPIODevice(pin)
assert not device.closed
assert device.pin == pin
with GPIODevice(pin) as device:
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)
with GPIODevice(pin) as device:
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)
with GPIODevice(pin) as device:
with GPIODevice(pin2) as device2:
pass
def test_device_close():
pin = MockPin(2)
@@ -56,11 +57,12 @@ def test_device_reopen_same_pin():
assert device2.pin == pin
assert device.closed
assert device.pin is None
device2.close()
def test_device_repr():
pin = MockPin(2)
device = GPIODevice(pin)
assert repr(device) == '<gpiozero.GPIODevice object on pin %s, is_active=False>' % pin
with GPIODevice(pin) as device:
assert repr(device) == '<gpiozero.GPIODevice object on pin %s, is_active=False>' % pin
def test_device_repr_after_close():
pin = MockPin(2)
@@ -70,9 +72,9 @@ def test_device_repr_after_close():
def test_device_unknown_attr():
pin = MockPin(2)
device = GPIODevice(pin)
with pytest.raises(AttributeError):
device.foo = 1
with GPIODevice(pin) as device:
with pytest.raises(AttributeError):
device.foo = 1
def test_device_context_manager():
pin = MockPin(2)
@@ -81,35 +83,35 @@ def test_device_context_manager():
assert device.closed
def test_composite_device_sequence():
device = CompositeDevice(
InputDevice(MockPin(2)),
InputDevice(MockPin(3))
)
assert len(device) == 2
assert device[0].pin.number == 2
assert device[1].pin.number == 3
assert device.tuple._fields == ('_0', '_1')
with CompositeDevice(
InputDevice(MockPin(2)),
InputDevice(MockPin(3))
) as device:
assert len(device) == 2
assert device[0].pin.number == 2
assert device[1].pin.number == 3
assert device.tuple._fields == ('_0', '_1')
def test_composite_device_values():
device = CompositeDevice(
InputDevice(MockPin(2)),
InputDevice(MockPin(3))
)
assert device.value == (0, 0)
assert not device.is_active
device[0].pin.drive_high()
assert device.value == (1, 0)
assert device.is_active
with CompositeDevice(
InputDevice(MockPin(2)),
InputDevice(MockPin(3))
) as device:
assert device.value == (0, 0)
assert not device.is_active
device[0].pin.drive_high()
assert device.value == (1, 0)
assert device.is_active
def test_composite_device_named():
device = CompositeDevice(
foo=InputDevice(MockPin(2)),
bar=InputDevice(MockPin(3)),
_order=('foo', 'bar')
)
assert device.tuple._fields == ('foo', 'bar')
assert device.value == (0, 0)
assert not device.is_active
with CompositeDevice(
foo=InputDevice(MockPin(2)),
bar=InputDevice(MockPin(3)),
_order=('foo', 'bar')
) as device:
assert device.tuple._fields == ('foo', 'bar')
assert device.value == (0, 0)
assert not device.is_active
def test_composite_device_bad_init():
with pytest.raises(ValueError):