#include #include "test_common.h" #include "../src/Drv/key.h" #include "../src/Drv/menu/presenter/menu_navigator.h" static int g_exec_count = 0; static int on_exec(void) { g_exec_count++; return 0; } static void build_legacy_like_tree(MenuNavState *nav, tagMenuItem *root, tagMenuItem *m1, tagMenuItem *m2, tagMenuItem *m1_sub) { memset(nav, 0, sizeof(*nav)); memset(root, 0, sizeof(*root)); memset(m1, 0, sizeof(*m1)); memset(m2, 0, sizeof(*m2)); memset(m1_sub, 0, sizeof(*m1_sub)); root->byClass = 0; root->ptLower = m1; root->ptBefore = root; root->ptBehind = root; root->wPos = 1; m1->byClass = 1; m1->wPos = 1; m1->ptHigher = root; m1->ptBefore = m2; m1->ptBehind = m2; m1->ptLower = m1_sub; m1->pfnWinProc = on_exec; m2->byClass = 1; m2->wPos = 2; m2->ptHigher = root; m2->ptBefore = m1; m2->ptBehind = m1; m2->pfnWinProc = on_exec; m1_sub->byClass = 2; m1_sub->wPos = 1; m1_sub->ptHigher = m1; m1_sub->ptBefore = m1_sub; m1_sub->ptBehind = m1_sub; m1_sub->pfnWinProc = on_exec; nav->ptHead = root; nav->ptCurrent = m1; nav->ptCurBak = m1; nav->ptRoute[0] = root; nav->ptRoute[1] = m1; } int main(void) { MenuNavState nav; tagMenuItem root; tagMenuItem m1; tagMenuItem m2; tagMenuItem m1_sub; MenuNavResult result; build_legacy_like_tree(&nav, &root, &m1, &m2, &m1_sub); result = MenuNavigator_ProcessKey(&nav, KEY_D); ASSERT_EQ_INT(1, result.needRefresh); ASSERT_TRUE(nav.ptCurrent == &m2); result = MenuNavigator_ProcessKey(&nav, KEY_U); ASSERT_EQ_INT(1, result.needRefresh); ASSERT_TRUE(nav.ptCurrent == &m1); result = MenuNavigator_ProcessKey(&nav, KEY_ENT); ASSERT_EQ_INT(1, result.needRefresh); ASSERT_TRUE(nav.ptCurrent == &m1_sub); result = MenuNavigator_ProcessKey(&nav, KEY_ESC); ASSERT_EQ_INT(1, result.needRefresh); ASSERT_TRUE(nav.ptCurrent == &m1); g_exec_count = 0; nav.ptCurrent = &m2; result = MenuNavigator_ProcessKey(&nav, KEY_ENT); ASSERT_EQ_INT(0, result.needRefresh); ASSERT_EQ_INT(1, g_exec_count); return 0; }