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::{
7    input_device,
8    input_handler::{self, Handler},
9};
10#[cfg(test)]
11use async_trait::async_trait;
12#[cfg(test)]
13use futures::channel::mpsc::Sender;
14#[cfg(test)]
15use std::cell::RefCell;
16#[cfg(test)]
17use std::rc::Rc;
18
19/// A fake [`InputHandler`] used for testing.
20/// A [`ObserveFakeEventsInputHandler`] does not consume InputEvents.
21#[cfg(test)]
22pub struct ObserveFakeEventsInputHandler {
23    /// Events received by [`handle_input_event()`] are sent to this channel.
24    event_sender: RefCell<Sender<input_device::InputEvent>>,
25}
26
27#[cfg(test)]
28impl ObserveFakeEventsInputHandler {
29    pub fn new(event_sender: Sender<input_device::InputEvent>) -> Rc<Self> {
30        Rc::new(ObserveFakeEventsInputHandler { event_sender: RefCell::new(event_sender) })
31    }
32}
33
34#[cfg(test)]
35impl Handler for ObserveFakeEventsInputHandler {
36    fn set_handler_healthy(self: std::rc::Rc<Self>) {
37        // No inspect data on ObserveFakeEventsInputHandler. Do nothing.
38    }
39
40    fn set_handler_unhealthy(self: std::rc::Rc<Self>, _msg: &str) {
41        // No inspect data on ObserveFakeEventsInputHandler. Do nothing.
42    }
43
44    fn get_name(&self) -> &'static str {
45        "ObserveFakeEventsInputHandler"
46    }
47
48    fn interest(&self) -> Vec<input_device::InputEventType> {
49        vec![
50            input_device::InputEventType::Keyboard,
51            input_device::InputEventType::LightSensor,
52            input_device::InputEventType::ConsumerControls,
53            input_device::InputEventType::Mouse,
54            input_device::InputEventType::TouchScreen,
55            input_device::InputEventType::Touchpad,
56            input_device::InputEventType::Fake,
57        ]
58    }
59}
60
61#[async_trait(?Send)]
62#[cfg(test)]
63impl input_handler::InputHandler for ObserveFakeEventsInputHandler {
64    async fn handle_input_event(
65        self: Rc<Self>,
66        input_event: input_device::InputEvent,
67    ) -> Vec<input_device::InputEvent> {
68        match self.event_sender.borrow_mut().try_send(input_event.clone()) {
69            Err(_) => assert!(false),
70            _ => {}
71        };
72
73        vec![input_event]
74    }
75}