80 lines
1.9 KiB
C
80 lines
1.9 KiB
C
#include "test_common.h"
|
|
|
|
#include <string.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_two_level(MenuNavState *nav, tagMenuItem *root, tagMenuItem *child_a, tagMenuItem *child_b)
|
|
{
|
|
memset(nav, 0, sizeof(*nav));
|
|
memset(root, 0, sizeof(*root));
|
|
memset(child_a, 0, sizeof(*child_a));
|
|
memset(child_b, 0, sizeof(*child_b));
|
|
|
|
root->byClass = 0;
|
|
root->wPos = 1;
|
|
root->ptLower = child_a;
|
|
root->ptBefore = root;
|
|
root->ptBehind = root;
|
|
|
|
child_a->byClass = 1;
|
|
child_a->wPos = 1;
|
|
child_a->ptHigher = root;
|
|
child_a->ptBefore = child_b;
|
|
child_a->ptBehind = child_b;
|
|
child_a->pfnWinProc = on_exec;
|
|
|
|
child_b->byClass = 1;
|
|
child_b->wPos = 2;
|
|
child_b->ptHigher = root;
|
|
child_b->ptBefore = child_a;
|
|
child_b->ptBehind = child_a;
|
|
child_b->pfnWinProc = on_exec;
|
|
|
|
nav->ptHead = root;
|
|
nav->ptCurrent = child_a;
|
|
nav->ptCurBak = child_a;
|
|
nav->ptRoute[0] = root;
|
|
nav->ptRoute[1] = child_a;
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
MenuNavState nav;
|
|
tagMenuItem root;
|
|
tagMenuItem a;
|
|
tagMenuItem b;
|
|
MenuNavResult result;
|
|
|
|
build_two_level(&nav, &root, &a, &b);
|
|
|
|
result = MenuNavigator_ProcessKey(&nav, KEY_D);
|
|
ASSERT_EQ_INT(1, result.needRefresh);
|
|
ASSERT_TRUE(nav.ptCurrent == &b);
|
|
|
|
result = MenuNavigator_ProcessKey(&nav, KEY_U);
|
|
ASSERT_EQ_INT(1, result.needRefresh);
|
|
ASSERT_TRUE(nav.ptCurrent == &a);
|
|
|
|
g_exec_count = 0;
|
|
result = MenuNavigator_ProcessKey(&nav, KEY_ENT);
|
|
ASSERT_EQ_INT(0, result.needRefresh);
|
|
ASSERT_EQ_INT(1, g_exec_count);
|
|
|
|
result = MenuNavigator_ProcessKey(&nav, KEY_ESC);
|
|
ASSERT_EQ_INT(1, result.skipRenderThisRound);
|
|
ASSERT_TRUE(nav.ptCurrent == root.ptLower);
|
|
ASSERT_TRUE(nav.ptRoute[0] == &root);
|
|
|
|
return 0;
|
|
}
|