blob: 980456d35f1b91cd9d860d88d65d98998c9ede74 [file] [log] [blame]
// Copyright 2017 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.
#include <fuchsia/ui/input/cpp/fidl.h>
#include <hid/usages.h>
#include "gtest/gtest.h"
#include "lib/gtest/test_loop_fixture.h"
#include "src/lib/fxl/time/time_point.h"
#include "src/ui/testing/mock_input_device.h"
#include "src/ui/testing/mock_input_device_registry.h"
namespace input {
namespace test {
using InputInterfaceTest = ::gtest::TestLoopFixture;
fuchsia::ui::input::DeviceDescriptor GenerateKeyboardDescriptor() {
fuchsia::ui::input::KeyboardDescriptorPtr keyboard =
fuchsia::ui::input::KeyboardDescriptor::New();
keyboard->keys.resize(HID_USAGE_KEY_RIGHT_GUI - HID_USAGE_KEY_A);
for (size_t index = HID_USAGE_KEY_A; index < HID_USAGE_KEY_RIGHT_GUI; ++index) {
keyboard->keys.at(index - HID_USAGE_KEY_A) = index;
}
fuchsia::ui::input::DeviceDescriptor descriptor;
descriptor.keyboard = std::move(keyboard);
return descriptor;
}
TEST_F(InputInterfaceTest, RegisterKeyboardTest) {
fuchsia::ui::input::DeviceDescriptor descriptor = GenerateKeyboardDescriptor();
fuchsia::ui::input::InputDevicePtr input_device;
uint32_t on_register_count = 0;
ui_input::test::MockInputDeviceRegistry registry(
[&on_register_count](ui_input::test::MockInputDevice* input_device) { on_register_count++; },
nullptr);
registry.RegisterDevice(std::move(descriptor), input_device.NewRequest());
RunLoopUntilIdle();
EXPECT_EQ(1u, on_register_count);
}
TEST_F(InputInterfaceTest, InputKeyboardTest) {
fuchsia::ui::input::DeviceDescriptor descriptor = GenerateKeyboardDescriptor();
fuchsia::ui::input::InputDevicePtr input_device;
uint32_t on_report_count = 0;
ui_input::test::MockInputDeviceRegistry registry(
nullptr, [&on_report_count](fuchsia::ui::input::InputReport report) {
EXPECT_TRUE(report.keyboard);
EXPECT_EQ(HID_USAGE_KEY_A, report.keyboard->pressed_keys.at(0));
on_report_count++;
});
registry.RegisterDevice(std::move(descriptor), input_device.NewRequest());
// PRESSED
fuchsia::ui::input::KeyboardReportPtr keyboard_report = fuchsia::ui::input::KeyboardReport::New();
keyboard_report->pressed_keys.push_back(HID_USAGE_KEY_A);
fuchsia::ui::input::InputReport report;
report.event_time = fxl::TimePoint::Now().ToEpochDelta().ToNanoseconds();
report.keyboard = std::move(keyboard_report);
input_device->DispatchReport(std::move(report));
RunLoopUntilIdle();
EXPECT_EQ(1u, on_report_count);
}
} // namespace test
} // namespace input