Improved tests.
[betaflight.git] / src / test / unit / cms_unittest.cc
blob95213ce3a73c8aac2c76c322755dcf39d382c437
1 /*
2 * This file is part of Cleanflight.
4 * Cleanflight is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
9 * Cleanflight is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with Cleanflight. If not, see <http://www.gnu.org/licenses/>.
18 #include <stdint.h>
19 #include <stdbool.h>
20 #include <stdio.h>
22 #include <limits.h>
24 #include <math.h>
26 #define USE_BARO
28 extern "C" {
29 #include "platform.h"
30 #include "target.h"
31 #include "cms/cms.h"
32 #include "cms/cms_types.h"
33 #include "fc/rc_modes.h"
34 #include "fc/runtime_config.h"
35 void cmsMenuOpen(void);
36 long cmsMenuBack(displayPort_t *pDisplay);
37 uint16_t cmsHandleKey(displayPort_t *pDisplay, uint8_t key);
38 extern CMS_Menu *currentMenu; // Points to top entry of the current page
41 #include "unittest_macros.h"
42 #include "unittest_displayport.h"
43 #include "gtest/gtest.h"
45 TEST(CMSUnittest, TestCmsDisplayPortRegister)
47 cmsInit();
48 displayPort_t *displayPort = displayPortTestInit();
49 for (int ii = 0; ii < CMS_MAX_DEVICE; ++ii) {
50 const bool registered = cmsDisplayPortRegister(displayPort);
51 EXPECT_TRUE(registered);
53 const bool registered = cmsDisplayPortRegister(displayPort);
54 EXPECT_FALSE(registered);
57 TEST(CMSUnittest, TestCmsMenuOpen)
59 cmsInit();
60 displayPort_t *displayPort = displayPortTestInit();
61 displayGrab(displayPort);
62 cmsDisplayPortRegister(displayPort);
64 cmsMenuOpen();
67 TEST(CMSUnittest, TestCmsMenuExit0)
69 cmsInit();
70 displayPort_t *displayPort = displayPortTestInit();
71 cmsDisplayPortRegister(displayPort);
73 cmsMenuOpen();
74 long exit = cmsMenuExit(displayPort, (void*)0);
75 EXPECT_EQ(0, exit);
78 TEST(CMSUnittest, TestCmsMenuExit1)
80 cmsInit();
81 displayPort_t *displayPort = displayPortTestInit();
82 cmsDisplayPortRegister(displayPort);
84 cmsMenuOpen();
85 long exit = cmsMenuExit(displayPort, (void*)0);
86 EXPECT_EQ(0, exit);
89 TEST(CMSUnittest, TestCmsMenuBack)
91 cmsInit();
92 displayPort_t *displayPort = displayPortTestInit();
93 cmsDisplayPortRegister(displayPort);
95 cmsMenuOpen();
96 long exit = cmsMenuBack(displayPort);
97 EXPECT_EQ(0, exit);
100 TEST(CMSUnittest, TestCmsMenuKey)
102 #define KEY_ENTER 0
103 #define KEY_UP 1
104 #define KEY_DOWN 2
105 #define KEY_LEFT 3
106 #define KEY_RIGHT 4
107 #define KEY_ESC 5
108 #define BUTTON_TIME 250 // msec
109 #define BUTTON_PAUSE 500 // msec
110 cmsInit();
111 displayPort_t *displayPort = &testDisplayPort;
112 cmsDisplayPortRegister(displayPort);
114 cmsMenuOpen();
115 uint16_t result = cmsHandleKey(displayPort, KEY_ESC);
116 EXPECT_EQ(BUTTON_PAUSE, result);
118 // STUBS
120 extern "C" {
121 static OSD_Entry menuMainEntries[] =
123 {"-- MAIN MENU --", OME_Label, NULL, NULL, 0},
124 {"SAVE&REBOOT", OME_OSD_Exit, cmsMenuExit, (void*)1, 0},
125 {"EXIT", OME_OSD_Exit, cmsMenuExit, (void*)0, 0},
126 {NULL, OME_END, NULL, NULL, 0}
128 CMS_Menu cmsx_menuMain = {
129 #ifdef CMS_MENU_DEBUG
130 .GUARD_text = "MENUMAIN",
131 .GUARD_type = OME_MENU,
132 #endif
133 .onEnter = NULL,
134 .onExit = NULL,
135 .checkRedirect = NULL,
136 .entries = menuMainEntries,
138 uint8_t armingFlags;
139 int16_t debug[4];
140 int16_t rcData[18];
141 void delay(uint32_t) {}
142 uint32_t micros(void) { return 0; }
143 uint32_t millis(void) { return 0; }
144 void saveConfigAndNotify(void) {}
145 void stopMotors(void) {}
146 void motorShutdown(void) {}
147 void systemReset(void) {}
148 void setArmingDisabled(armingDisableFlags_e flag) { UNUSED(flag); }
149 void unsetArmingDisabled(armingDisableFlags_e flag) { UNUSED(flag); }
150 bool IS_RC_MODE_ACTIVE(boxId_e) { return false; }
151 void setRebootRequired(void) {}
152 bool getRebootRequired(void) { return false; }