Skip to content

Commit 43dbf97

Browse files
committed
chore: add tests for wait_until_state errors
1 parent e29918f commit 43dbf97

File tree

1 file changed

+49
-1
lines changed

1 file changed

+49
-1
lines changed

src/dht.rs

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
use embedded_hal::{
22
delay::DelayNs,
3-
digital::{ErrorType, InputPin, OutputPin, PinState},
3+
digital::{InputPin, OutputPin, PinState},
44
};
55

66
use crate::SensorError;
77

8+
#[cfg(test)]
9+
const DEFAULT_MAX_ATTEMPTS: usize = 10;
10+
#[cfg(not(test))]
811
const DEFAULT_MAX_ATTEMPTS: usize = 10_000;
912

1013
/// Common base struct for DHT11, DHT22 sensors.
@@ -93,9 +96,13 @@ impl<P: InputPin + OutputPin, D: DelayNs> Dht<P, D> {
9396

9497
#[cfg(test)]
9598
mod tests {
99+
extern crate std;
100+
use std::io::ErrorKind;
101+
96102
use super::*;
97103
use embedded_hal_mock::eh1::delay::NoopDelay as MockNoop;
98104
use embedded_hal_mock::eh1::digital::{Mock, State, Transaction as PinTransaction};
105+
use embedded_hal_mock::eh1::MockError;
99106

100107
#[test]
101108
fn test_read_byte() {
@@ -163,4 +170,45 @@ mod tests {
163170

164171
dht.pin.done();
165172
}
173+
174+
#[test]
175+
fn test_wait_until_state_timeout_error() {
176+
let expectations: [PinTransaction; DEFAULT_MAX_ATTEMPTS] = [
177+
PinTransaction::get(State::Low),
178+
PinTransaction::get(State::Low),
179+
PinTransaction::get(State::Low),
180+
PinTransaction::get(State::Low),
181+
PinTransaction::get(State::Low),
182+
PinTransaction::get(State::Low),
183+
PinTransaction::get(State::Low),
184+
PinTransaction::get(State::Low),
185+
PinTransaction::get(State::Low),
186+
PinTransaction::get(State::Low),
187+
];
188+
189+
let mock_pin = Mock::new(&expectations);
190+
let mock_delay = MockNoop::new();
191+
192+
let mut dht = Dht::new(mock_pin, mock_delay);
193+
194+
let result = dht.wait_until_state(PinState::High);
195+
assert!(matches!(result, Err(SensorError::Timeout)));
196+
197+
dht.pin.done();
198+
}
199+
200+
#[test]
201+
fn test_wait_until_state_pin_error() {
202+
let err = MockError::Io(ErrorKind::NotConnected);
203+
let expectations = [PinTransaction::get(State::High).with_error(err)];
204+
let mock_pin = Mock::new(&expectations);
205+
let mock_delay = MockNoop::new();
206+
207+
let mut dht = Dht::new(mock_pin, mock_delay);
208+
209+
let result = dht.wait_until_state(PinState::High);
210+
assert!(matches!(result, Err(SensorError::PinError)));
211+
212+
dht.pin.done();
213+
}
166214
}

0 commit comments

Comments
 (0)