blob: c18994cdc5f3349733fc600a4cf08dbe96c319fa [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use {
crate::input_device, crate::input_handler, async_trait::async_trait,
futures::channel::mpsc::Sender, std::cell::RefCell, std::rc::Rc,
};
/// A fake [`InputHandler`] used for testing. A [`FakeInputHandler`] does not consume InputEvents.
pub struct FakeInputHandler {
/// Events received by [`handle_input_event()`] are sent to this channel.
event_sender: RefCell<Sender<input_device::InputEvent>>,
}
#[allow(dead_code)]
impl FakeInputHandler {
pub fn new(event_sender: Sender<input_device::InputEvent>) -> Rc<Self> {
Rc::new(FakeInputHandler { event_sender: RefCell::new(event_sender) })
}
}
#[async_trait(?Send)]
impl input_handler::InputHandler for FakeInputHandler {
async fn handle_input_event(
self: Rc<Self>,
input_event: input_device::InputEvent,
) -> Vec<input_device::InputEvent> {
match self.event_sender.borrow_mut().try_send(input_event.clone()) {
Err(_) => assert!(false),
_ => {}
};
vec![input_event]
}
}