blob: 65ccb09e2fa673c796fc1b2256348fcfd1cba22d [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::keyboard_binding, anyhow::Error, async_trait::async_trait,
fidl_fuchsia_ui_input_config::FeaturesRequest as InputConfigFeaturesRequest,
futures::channel::mpsc::Sender,
};
/// A fake [`InputDeviceBinding`] for testing.
pub struct FakeInputDeviceBinding {
/// The channel to stream InputEvents to.
event_sender: Sender<input_device::InputEvent>,
/// The channel to stream received input config requests.
input_config_requests_sender: Sender<InputConfigFeaturesRequest>,
}
#[allow(dead_code)]
impl FakeInputDeviceBinding {
pub fn new(
input_event_sender: Sender<input_device::InputEvent>,
input_config_requests_sender: Sender<InputConfigFeaturesRequest>,
) -> Self {
FakeInputDeviceBinding { event_sender: input_event_sender, input_config_requests_sender }
}
}
#[async_trait]
impl input_device::InputDeviceBinding for FakeInputDeviceBinding {
fn get_device_descriptor(&self) -> input_device::InputDeviceDescriptor {
input_device::InputDeviceDescriptor::Keyboard(keyboard_binding::KeyboardDeviceDescriptor {
keys: vec![],
})
}
fn input_event_sender(&self) -> Sender<input_device::InputEvent> {
self.event_sender.clone()
}
async fn handle_input_config_request(
&self,
request: &InputConfigFeaturesRequest,
) -> Result<(), Error> {
let copied = match request {
InputConfigFeaturesRequest::SetTouchpadMode { enable, control_handle } => {
InputConfigFeaturesRequest::SetTouchpadMode {
enable: *enable,
control_handle: control_handle.to_owned(),
}
}
};
self.input_config_requests_sender
.clone()
.try_send(copied)
.expect("send input_config_request");
Ok(())
}
}