| // 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] |
| } |
| } |