From 251c0f23f57f54dcc3bb91b4ef78598e971afa1f Mon Sep 17 00:00:00 2001 From: Yu-Ping Wu Date: Wed, 13 May 2020 12:36:43 +0800 Subject: vboot/ui: implement language selection screen Implement language selection screen, and add language item to all the other screens. Add a default screen init function default_screen_init() to initialize the default selection to the second item if the first item is the language selection. BRANCH=none BUG=b:146399181, b:144968920 TEST=make runtests TEST=USE="menu_ui" emerge-nami depthcharge Cq-Depend: chromium:2193151, chromium:2192508 Change-Id: I3251b0095ec29ec26cc27745b1089e60894c892c Signed-off-by: Yu-Ping Wu Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/2196095 Reviewed-by: Joel Kitching --- tests/vb2_ui_tests.c | 69 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 66 insertions(+), 3 deletions(-) (limited to 'tests/vb2_ui_tests.c') diff --git a/tests/vb2_ui_tests.c b/tests/vb2_ui_tests.c index 4066e5b8..aef133eb 100644 --- a/tests/vb2_ui_tests.c +++ b/tests/vb2_ui_tests.c @@ -39,6 +39,8 @@ static struct display_call mock_displayed[64]; static int mock_displayed_count; static int mock_displayed_i; +static uint32_t mock_locale_count; + static int mock_calls_until_shutdown; /* Iteration counter starts from 0 @@ -194,6 +196,9 @@ static void reset_common_data(enum reset_type t) mock_displayed_count = 0; mock_displayed_i = 0; + /* For vb2ex_get_locale_count */ + mock_locale_count = 1; + /* For check_shutdown_request */ if (t == FOR_DEVELOPER) mock_calls_until_shutdown = 2000; /* Larger than 30s */ @@ -280,6 +285,11 @@ vb2_error_t vb2ex_display_ui(enum vb2_screen screen, return VB2_SUCCESS; } +uint32_t vb2ex_get_locale_count(void) +{ + return mock_locale_count; +} + uint32_t VbExIsShutdownRequested(void) { if (mock_calls_until_shutdown < 0) /* Never request shutdown */ @@ -502,7 +512,7 @@ static void manual_recovery_tests(void) TEST_EQ(vb2_manual_recovery_menu(ctx), VB2_REQUEST_SHUTDOWN, "phone recovery"); displayed_eq("recovery select", VB2_SCREEN_RECOVERY_SELECT, - MOCK_IGNORE, 0, MOCK_IGNORE); + MOCK_IGNORE, 1, MOCK_IGNORE); displayed_eq("phone recovery", VB2_SCREEN_RECOVERY_PHONE_STEP1, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE); displayed_no_extra(); @@ -513,10 +523,10 @@ static void manual_recovery_tests(void) add_mock_keypress(VB_KEY_ENTER); TEST_EQ(vb2_manual_recovery_menu(ctx), VB2_REQUEST_SHUTDOWN, "external disk recovery"); - displayed_eq("recovery select", VB2_SCREEN_RECOVERY_SELECT, - MOCK_IGNORE, 0, MOCK_IGNORE); displayed_eq("recovery select", VB2_SCREEN_RECOVERY_SELECT, MOCK_IGNORE, 1, MOCK_IGNORE); + displayed_eq("recovery select", VB2_SCREEN_RECOVERY_SELECT, + MOCK_IGNORE, 2, MOCK_IGNORE); displayed_eq("disk recovery", VB2_SCREEN_RECOVERY_DISK_STEP1, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE); displayed_no_extra(); @@ -703,11 +713,64 @@ static void manual_recovery_tests(void) VB2_DEBUG("...done.\n"); } +static void language_selection_tests(void) +{ + VB2_DEBUG("Testing language selection...\n"); + + /* Enter language menu and change language */ + reset_common_data(FOR_MANUAL_RECOVERY); + mock_locale_count = 100; + vb2_nv_set(ctx, VB2_NV_LOCALIZATION_INDEX, 23); + add_mock_keypress(VB_KEY_UP); + add_mock_keypress(VB_KEY_ENTER); /* select language */ + add_mock_keypress(VB_KEY_DOWN); + add_mock_keypress(VB_KEY_ENTER); /* select locale 24 */ + add_mock_vbtlk(VB2_ERROR_LK_NO_DISK_FOUND, VB_DISK_FLAG_REMOVABLE); + TEST_EQ(vb2_manual_recovery_menu(ctx), VB2_REQUEST_SHUTDOWN, + "change language"); + displayed_eq("RECOVERY_SELECT default", VB2_SCREEN_RECOVERY_SELECT, + 23, MOCK_IGNORE, MOCK_IGNORE); + displayed_eq("RECOVERY_SELECT lang", VB2_SCREEN_RECOVERY_SELECT, + 23, 0, MOCK_IGNORE); + displayed_eq("LANGUAGE_SELECT 23", VB2_SCREEN_LANGUAGE_SELECT, + 23, 23, MOCK_IGNORE); + displayed_eq("LANGUAGE_SELECT 24", VB2_SCREEN_LANGUAGE_SELECT, + 23, 24, MOCK_IGNORE); + displayed_eq("RECOVERY_SELECT new locale", VB2_SCREEN_RECOVERY_SELECT, + 24, MOCK_IGNORE, MOCK_IGNORE); + displayed_no_extra(); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_LOCALIZATION_INDEX), 24, + " locale 24 saved to nvdata"); + + /* Locale count = 0 */ + reset_common_data(FOR_MANUAL_RECOVERY); + mock_locale_count = 0; + vb2_nv_set(ctx, VB2_NV_LOCALIZATION_INDEX, 23); + add_mock_keypress(VB_KEY_UP); + add_mock_keypress(VB_KEY_ENTER); /* select language */ + add_mock_keypress(VB_KEY_ENTER); /* select locale 0 */ + add_mock_vbtlk(VB2_ERROR_LK_NO_DISK_FOUND, VB_DISK_FLAG_REMOVABLE); + TEST_EQ(vb2_manual_recovery_menu(ctx), VB2_REQUEST_SHUTDOWN, + "enter language menu"); + displayed_eq("RECOVERY_SELECT default", VB2_SCREEN_RECOVERY_SELECT, + 23, MOCK_IGNORE, MOCK_IGNORE); + displayed_eq("RECOVERY_SELECT lang", VB2_SCREEN_RECOVERY_SELECT, + 23, 0, MOCK_IGNORE); + displayed_eq("LANGUAGE_SELECT index 0", VB2_SCREEN_LANGUAGE_SELECT, + 23, 0, MOCK_IGNORE); + displayed_eq("RECOVERY_SELECT locale 0", VB2_SCREEN_RECOVERY_SELECT, + 0, MOCK_IGNORE, MOCK_IGNORE); + displayed_no_extra(); + + VB2_DEBUG("...done.\n"); +} + int main(void) { developer_tests(); broken_recovery_tests(); manual_recovery_tests(); + language_selection_tests(); return gTestSuccess ? 0 : 255; } -- cgit v1.2.1