重构显示逻辑为 MVP 架构,进行显示模块的解耦
This commit is contained in:
93
tests/test_p1_menu_nav_legacy.c
Normal file
93
tests/test_p1_menu_nav_legacy.c
Normal file
@@ -0,0 +1,93 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user