Skip to content

Commit 84246e9

Browse files
committed
Add double click unit test
1 parent 1fa2f3f commit 84246e9

File tree

1 file changed

+48
-6
lines changed

1 file changed

+48
-6
lines changed

src/tests.rs

+48-6
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ const CONFIG: ButtonConfig = ButtonConfig {
1313
mode: Mode::PullUp,
1414
};
1515

16+
const IMMEDIATELY: Duration = Duration::from_millis(0);
17+
1618
#[tokio::test(start_paused = true)]
1719
async fn start_idle() {
1820
let expectations = [Transaction::new(Kind::Get(PinState::High))];
@@ -42,9 +44,9 @@ async fn start_pressed() {
4244
#[tokio::test]
4345
async fn single_press() {
4446
let expectations = [
45-
Transaction::wait_for_state(PinState::Low, Duration::from_millis(10)),
47+
Transaction::wait_for_state(PinState::Low, IMMEDIATELY),
4648
Transaction::get(PinState::Low),
47-
Transaction::wait_for_state(PinState::High, Duration::from_millis(10)),
49+
Transaction::wait_for_state(PinState::High, IMMEDIATELY),
4850
Transaction::get(PinState::High),
4951
];
5052
let pin = Mock::new(&expectations);
@@ -66,10 +68,10 @@ async fn single_press() {
6668
#[tokio::test]
6769
async fn long_press() {
6870
let expectations = [
69-
Transaction::wait_for_state(PinState::Low, Duration::from_millis(10)),
71+
Transaction::wait_for_state(PinState::Low, IMMEDIATELY),
7072
Transaction::get(PinState::Low),
7173
Transaction::wait_for_state(PinState::High, Duration::from_millis(250)),
72-
Transaction::wait_for_state(PinState::High, Duration::from_millis(10)),
74+
Transaction::wait_for_state(PinState::High, IMMEDIATELY),
7375
Transaction::get(PinState::High),
7476
];
7577
let pin = Mock::new(&expectations);
@@ -94,7 +96,7 @@ async fn long_press() {
9496
#[tokio::test]
9597
async fn debounce_press() {
9698
let expectations = [
97-
Transaction::wait_for_state(PinState::Low, Duration::from_millis(10)),
99+
Transaction::wait_for_state(PinState::Low, IMMEDIATELY),
98100
Transaction::get(PinState::High),
99101
];
100102
let pin = Mock::new(&expectations);
@@ -111,7 +113,7 @@ async fn debounce_press() {
111113
#[tokio::test]
112114
async fn debounce_release() {
113115
let expectations = [
114-
Transaction::wait_for_state(PinState::High, Duration::from_millis(10)),
116+
Transaction::wait_for_state(PinState::High, IMMEDIATELY),
115117
Transaction::get(PinState::Low),
116118
];
117119
let pin = Mock::new(&expectations);
@@ -124,3 +126,43 @@ async fn debounce_release() {
124126

125127
button.pin.done();
126128
}
129+
130+
#[tokio::test]
131+
async fn double_click() {
132+
let expectations = [
133+
Transaction::wait_for_state(PinState::Low, IMMEDIATELY),
134+
Transaction::get(PinState::Low),
135+
Transaction::wait_for_state(PinState::High, IMMEDIATELY),
136+
Transaction::get(PinState::High),
137+
Transaction::wait_for_state(PinState::Low, IMMEDIATELY),
138+
Transaction::get(PinState::Low),
139+
Transaction::wait_for_state(PinState::High, IMMEDIATELY),
140+
Transaction::get(PinState::High),
141+
Transaction::wait_for_state(PinState::Low, Duration::from_millis(250)),
142+
];
143+
let pin = Mock::new(&expectations);
144+
let mut button = Button::new(pin, CONFIG);
145+
button.state = State::Idle;
146+
147+
let event = button.update_step().await;
148+
assert_none!(event);
149+
assert_matches!(button.state, State::Pressed);
150+
151+
let event = button.update_step().await;
152+
assert_none!(event);
153+
assert_matches!(button.state, State::Released);
154+
155+
let event = button.update_step().await;
156+
assert_none!(event);
157+
assert_matches!(button.state, State::Pressed);
158+
159+
let event = button.update_step().await;
160+
assert_none!(event);
161+
assert_matches!(button.state, State::Released);
162+
163+
let event = button.update_step().await;
164+
assert_some_eq!(event, ButtonEvent::ShortPress { count: 2 });
165+
assert_matches!(button.state, State::Idle);
166+
167+
button.pin.done();
168+
}

0 commit comments

Comments
 (0)