input_pipeline/
observe_fake_events_input_handler.rs

1// Copyright 2020 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#[cfg(test)]
6use crate::{input_device, input_handler};
7#[cfg(test)]
8use async_trait::async_trait;
9#[cfg(test)]
10use futures::channel::mpsc::Sender;
11#[cfg(test)]
12use std::cell::RefCell;
13#[cfg(test)]
14use std::rc::Rc;
15
16/// A fake [`InputHandler`] used for testing.
17/// A [`ObserveFakeEventsInputHandler`] does not consume InputEvents.
18#[cfg(test)]
19pub struct ObserveFakeEventsInputHandler {
20    /// Events received by [`handle_input_event()`] are sent to this channel.
21    event_sender: RefCell<Sender<input_device::InputEvent>>,
22}
23
24#[cfg(test)]
25impl ObserveFakeEventsInputHandler {
26    pub fn new(event_sender: Sender<input_device::InputEvent>) -> Rc<Self> {
27        Rc::new(ObserveFakeEventsInputHandler { event_sender: RefCell::new(event_sender) })
28    }
29}
30
31#[async_trait(?Send)]
32#[cfg(test)]
33impl input_handler::InputHandler for ObserveFakeEventsInputHandler {
34    async fn handle_input_event(
35        self: Rc<Self>,
36        input_event: input_device::InputEvent,
37    ) -> Vec<input_device::InputEvent> {
38        match self.event_sender.borrow_mut().try_send(input_event.clone()) {
39            Err(_) => assert!(false),
40            _ => {}
41        };
42
43        vec![input_event]
44    }
45
46    fn set_handler_healthy(self: std::rc::Rc<Self>) {
47        // No inspect data on ObserveFakeEventsInputHandler. Do nothing.
48    }
49
50    fn set_handler_unhealthy(self: std::rc::Rc<Self>, _msg: &str) {
51        // No inspect data on ObserveFakeEventsInputHandler. Do nothing.
52    }
53}