94 lines
2.2 KiB
C
94 lines
2.2 KiB
C
#include <string.h>
|
|
|
|
#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;
|
|
}
|