From e8c84a0e47fbe0b28f20f0886bd850d73301c44e Mon Sep 17 00:00:00 2001 From: Michael Richters Date: Sat, 26 Feb 2022 11:25:30 -0600 Subject: [PATCH] Add MouseReport class for testing Signed-off-by: Michael Richters --- testing/ExpectedMouseReport.cpp | 65 +++++++++++++++++++++++++++++++++ testing/ExpectedMouseReport.h | 52 ++++++++++++++++++++++++++ testing/MouseReport.cpp | 61 +++++++++++++++++++++++++++++++ testing/MouseReport.h | 56 ++++++++++++++++++++++++++++ 4 files changed, 234 insertions(+) create mode 100644 testing/ExpectedMouseReport.cpp create mode 100644 testing/ExpectedMouseReport.h create mode 100644 testing/MouseReport.cpp create mode 100644 testing/MouseReport.h diff --git a/testing/ExpectedMouseReport.cpp b/testing/ExpectedMouseReport.cpp new file mode 100644 index 00000000..d59a7aed --- /dev/null +++ b/testing/ExpectedMouseReport.cpp @@ -0,0 +1,65 @@ +/* -*- mode: c++ -*- + * Copyright (C) 2022 Keyboard.io, Inc + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +#include "testing/ExpectedMouseReport.h" + +namespace kaleidoscope { +namespace testing { + +ExpectedMouseReport::ExpectedMouseReport(uint32_t timestamp, + uint8_t buttons, + int8_t x, int8_t y, + int8_t v, int8_t h, + std::string message) { + timestamp_ = timestamp; + report_data_.buttons = buttons; + report_data_.xAxis = x; + report_data_.yAxis = y; + report_data_.vWheel = v; + report_data_.hWheel = h; + failure_message_ = message; +} + +uint32_t ExpectedMouseReport::Timestamp() const { + return timestamp_; +} + +const std::string & ExpectedMouseReport::Message() const { + return failure_message_; +} + +uint8_t ExpectedMouseReport::Buttons() const { + return report_data_.buttons; +} + +int8_t ExpectedMouseReport::XAxis() const { + return report_data_.xAxis; +} + +int8_t ExpectedMouseReport::YAxis() const { + return report_data_.yAxis; +} + +int8_t ExpectedMouseReport::VWheel() const { + return report_data_.vWheel; +} + +int8_t ExpectedMouseReport::HWheel() const { + return report_data_.hWheel; +} + +} // namespace testing +} // namespace kaleidoscope diff --git a/testing/ExpectedMouseReport.h b/testing/ExpectedMouseReport.h new file mode 100644 index 00000000..cb511832 --- /dev/null +++ b/testing/ExpectedMouseReport.h @@ -0,0 +1,52 @@ +/* -*- mode: c++ -*- + * Copyright (C) 2022 Keyboard.io, Inc + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +#pragma once + +#include +#include +#include +#include + +#include "MouseReport.h" + +namespace kaleidoscope { +namespace testing { + +class ExpectedMouseReport { + public: + ExpectedMouseReport(uint32_t timestamp, + uint8_t buttons, int8_t x, int8_t y, int8_t v, int8_t h, + std::string message = ""); + + uint8_t Buttons() const; + int8_t XAxis() const; + int8_t YAxis() const; + int8_t VWheel() const; + int8_t HWheel() const; + + uint32_t Timestamp() const; + + const std::string & Message() const; + + private: + uint32_t timestamp_; + MouseReport::ReportData report_data_; + std::string failure_message_; +}; + +} // namespace testing +} // namespace kaleidoscope diff --git a/testing/MouseReport.cpp b/testing/MouseReport.cpp new file mode 100644 index 00000000..25077b44 --- /dev/null +++ b/testing/MouseReport.cpp @@ -0,0 +1,61 @@ +/* -*- mode: c++ -*- + * Copyright (C) 2020 Eric Paniagua (epaniagua@google.com) + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +#include "testing/MouseReport.h" + +#include "Kaleidoscope.h" +#include "testing/fix-macros.h" + +#include + +#include "MouseButtons.h" + +namespace kaleidoscope { +namespace testing { + +MouseReport::MouseReport(const void* data) { + const ReportData& report_data = + *static_cast(data); + memcpy(&report_data_, &report_data, sizeof(report_data_)); + timestamp_ = Runtime.millisAtCycleStart(); +} + +uint32_t MouseReport::Timestamp() const { + return timestamp_; +} + +uint8_t MouseReport::Buttons() const { + return report_data_.buttons; +} + +int8_t MouseReport::XAxis() const { + return report_data_.xAxis; +} + +int8_t MouseReport::YAxis() const { + return report_data_.yAxis; +} + +int8_t MouseReport::VWheel() const { + return report_data_.vWheel; +} + +int8_t MouseReport::HWheel() const { + return report_data_.hWheel; +} + +} // namespace testing +} // namespace kaleidoscope diff --git a/testing/MouseReport.h b/testing/MouseReport.h new file mode 100644 index 00000000..eddd2e7a --- /dev/null +++ b/testing/MouseReport.h @@ -0,0 +1,56 @@ +/* -*- mode: c++ -*- + * Copyright (C) 2020 Eric Paniagua (epaniagua@google.com) + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +#pragma once + +#include +#include + +#include "HID-Settings.h" +#include "MultiReport/Mouse.h" + +namespace kaleidoscope { +namespace testing { + +class MouseReport { + public: + typedef HID_MouseReport_Data_t ReportData; + + static constexpr uint8_t kHidReportType = HID_REPORTID_MOUSE; + + MouseReport(const void* data); + + + static constexpr uint8_t kButtonLeft = MOUSE_LEFT; + static constexpr uint8_t kButtonRight = MOUSE_RIGHT; + static constexpr uint8_t kButtonMiddle = MOUSE_MIDDLE; + static constexpr uint8_t kButtonPrev = MOUSE_PREV; + static constexpr uint8_t kButtonNext = MOUSE_NEXT; + + uint32_t Timestamp() const; + uint8_t Buttons() const; + int8_t XAxis() const; + int8_t YAxis() const; + int8_t VWheel() const; + int8_t HWheel() const; + + private: + uint32_t timestamp_; + ReportData report_data_; +}; + +} // namespace testing +} // namespce kaleidoscope