blob: fd17219f0a801c1a78af901a8ddeea0ca03b9caa [file] [log] [blame]
// Copyright 2019 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 "src/ui/lib/input_reader/mouse.h"
#include <fuchsia/ui/input/cpp/fidl.h>
#include <gtest/gtest.h>
#include <hid-parser/parser.h>
#include <hid-parser/usages.h>
#include <hid/paradise.h>
#include "src/lib/fxl/time/time_point.h"
namespace input {
namespace {
const uint8_t boot_mouse_desc[] = {
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x09, 0x02, // Usage (Mouse)
0xA1, 0x01, // Collection (Application)
0x09, 0x01, // Usage (Pointer)
0xA1, 0x00, // Collection (Physical)
0x05, 0x09, // Usage Page (Button)
0x19, 0x01, // Usage Minimum (0x01)
0x29, 0x03, // Usage Maximum (0x03)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x95, 0x03, // Report Count (3)
0x75, 0x01, // Report Size (1)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,No Null Position)
0x95, 0x01, // Report Count (1)
0x75, 0x05, // Report Size (5)
0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,No Null Position
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x09, 0x30, // Usage (X)
0x09, 0x31, // Usage (Y)
0x15, 0x81, // Logical Minimum (-127)
0x25, 0x7F, // Logical Maximum (127)
0x75, 0x08, // Report Size (8)
0x95, 0x02, // Report Count (2)
0x81, 0x06, // Input (Data,Var,Rel,No Wrap,Linear,No Null Position)
0xC0, // End Collection
0xC0, // End Collection
};
} // namespace
// Each test parses the report descriptor for the mouse and then sends one
// report to ensure that it has been parsed correctly.
namespace test {
TEST(MouseTest, BootMouse) {
hid::DeviceDescriptor *dev_desc = nullptr;
auto parse_res = hid::ParseReportDescriptor(boot_mouse_desc, sizeof(boot_mouse_desc), &dev_desc);
ASSERT_EQ(hid::ParseResult::kParseOk, parse_res);
ui_input::Mouse mouse = {};
ui_input::Device::Descriptor device_descriptor = {};
bool success = mouse.ParseReportDescriptor(dev_desc->report[0], &device_descriptor);
ASSERT_TRUE(success);
EXPECT_EQ(device_descriptor.has_mouse, true);
EXPECT_EQ(device_descriptor.mouse_type, ui_input::MouseDeviceType::HID);
EXPECT_EQ(device_descriptor.mouse_descriptor->buttons,
fuchsia::ui::input::kMouseButtonPrimary | fuchsia::ui::input::kMouseButtonSecondary |
fuchsia::ui::input::kMouseButtonTertiary);
const uint8_t report_data[] = {
0xFF, // Buttons
100, // X
0xFF, // Y
};
fuchsia::ui::input::InputReport report;
report.mouse = fuchsia::ui::input::MouseReport::New();
success = mouse.ParseReport(report_data, sizeof(report_data), &report);
EXPECT_EQ(true, success);
EXPECT_EQ(fuchsia::ui::input::kMouseButtonPrimary | fuchsia::ui::input::kMouseButtonSecondary |
fuchsia::ui::input::kMouseButtonTertiary,
report.mouse->pressed_buttons);
EXPECT_EQ(100, report.mouse->rel_x);
EXPECT_EQ(-1, report.mouse->rel_y);
}
} // namespace test
} // namespace input