More work on the tests...

This commit is contained in:
Dave Jones
2016-04-05 09:45:44 +01:00
parent 2a2e77051d
commit 3acf8a0d3a
12 changed files with 397 additions and 28 deletions

View File

@@ -8,7 +8,7 @@ str = type('')
from collections import namedtuple
from time import time
from time import time, sleep
from threading import Thread, Event
try:
from math import isclose
@@ -182,7 +182,7 @@ class MockChargingPin(MockPin):
"""
def __init__(self, number):
super(MockChargingPin, self).__init__()
self.charge_time = 0.01
self.charge_time = 0.01 # dark charging time
self._charge_stop = Event()
self._charge_thread = None
@@ -193,16 +193,51 @@ class MockChargingPin(MockPin):
self._charge_stop.set()
self._charge_thread.join()
self._charge_stop.clear()
self._charge_thread = Thread(target=lambda: self._charged)
self._charge_thread = Thread(target=self._charge)
self._charge_thread.start()
elif value == 'output':
if self.charge_thread:
if self._charge_thread:
self._charge_stop.set()
self._charge_thread.join()
def _charged(self):
def _charge(self):
if not self._charge_stop.wait(self.charge_time):
self.drive_high()
try:
self.drive_high()
except AssertionError:
# Charging pins are typically flipped between input and output
# repeatedly; if another thread has already flipped us to
# output ignore the assertion-error resulting from attempting
# to drive the pin high
pass
class MockTriggerPin(MockPin):
"""
This derivative of :class:`MockPin` is intended to be used with another
:class:`MockPin` to emulate a distance sensor. Set :attr:`echo_pin` to the
corresponding pin instance. When this pin is driven high it will trigger
the echo pin to drive high for the echo time.
"""
def __init__(self, number):
super(MockTriggerPin, self).__init__()
self.echo_pin = None
self.echo_time = 0.04 # longest echo time
self._echo_thread = None
def _set_state(self, value):
super(MockTriggerPin, self)._set_state(value)
if value:
if self._echo_thread:
self._echo_thread.join()
self._echo_thread = Thread(target=self._echo)
self._echo_thread.start()
def _echo(self):
sleep(0.001)
self.echo_pin.drive_high()
sleep(self.echo_time)
self.echo_pin.drive_low()
class MockPWMPin(MockPin):