summaryrefslogtreecommitdiff
path: root/quantum/battery/tests/battery_tests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/battery/tests/battery_tests.cpp')
-rw-r--r--quantum/battery/tests/battery_tests.cpp97
1 files changed, 97 insertions, 0 deletions
diff --git a/quantum/battery/tests/battery_tests.cpp b/quantum/battery/tests/battery_tests.cpp
new file mode 100644
index 0000000000..ee011be8a8
--- /dev/null
+++ b/quantum/battery/tests/battery_tests.cpp
@@ -0,0 +1,97 @@
1// Copyright 2025 QMK
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include "gtest/gtest.h"
5#include "gmock/gmock.h"
6
7using testing::_;
8
9class BatteryDriverMock {
10 public:
11 virtual ~BatteryDriverMock() {}
12
13 // mock methods
14 MOCK_METHOD0(battery_driver_init, void(void));
15 MOCK_METHOD0(battery_driver_sample_percent, uint8_t(void));
16 MOCK_METHOD1(battery_percent_changed_kb, void(uint8_t));
17};
18
19class BatteryTest : public ::testing::Test {
20 public:
21 BatteryTest() {
22 _batteryDriverMock.reset(new ::testing::NiceMock<BatteryDriverMock>());
23 }
24 virtual ~BatteryTest() {
25 _batteryDriverMock.reset();
26 }
27
28 static std::unique_ptr<BatteryDriverMock> _batteryDriverMock;
29};
30
31std::unique_ptr<BatteryDriverMock> BatteryTest::_batteryDriverMock;
32
33extern "C" {
34#include "quantum/battery/battery.h"
35#include "timer.h"
36
37void advance_time(uint32_t ms);
38
39void battery_driver_init(void) {
40 if (BatteryTest::_batteryDriverMock) {
41 BatteryTest::_batteryDriverMock->battery_driver_init();
42 }
43}
44
45uint8_t battery_driver_sample_percent(void) {
46 if (BatteryTest::_batteryDriverMock) {
47 return BatteryTest::_batteryDriverMock->battery_driver_sample_percent();
48 }
49 return 255;
50}
51
52void battery_percent_changed_kb(uint8_t level) {
53 if (BatteryTest::_batteryDriverMock) {
54 BatteryTest::_batteryDriverMock->battery_percent_changed_kb(level);
55 }
56}
57}
58
59TEST_F(BatteryTest, TestInit) {
60 // init driver and initial sample
61 EXPECT_CALL(*_batteryDriverMock, battery_driver_init()).Times(1);
62 EXPECT_CALL(*_batteryDriverMock, battery_driver_sample_percent()).Times(1);
63
64 battery_init();
65}
66
67TEST_F(BatteryTest, TestSampleCached) {
68 // sample before timeout
69 EXPECT_CALL(*_batteryDriverMock, battery_driver_sample_percent()).Times(0);
70
71 advance_time(1);
72 battery_task();
73}
74
75TEST_F(BatteryTest, TestSampleNotCached) {
76 // sample after timeout
77 EXPECT_CALL(*_batteryDriverMock, battery_driver_sample_percent()).Times(1);
78
79 advance_time(60000);
80 battery_task();
81}
82
83TEST_F(BatteryTest, TestGet) {
84 // sample does not directly sample
85 EXPECT_CALL(*_batteryDriverMock, battery_driver_sample_percent()).Times(0);
86
87 battery_get_percent();
88}
89
90TEST_F(BatteryTest, TestChanged) {
91 // callbacks on value changed
92 EXPECT_CALL(*_batteryDriverMock, battery_percent_changed_kb(_)).Times(1);
93
94 battery_task();
95 advance_time(60000);
96 battery_task();
97}