@@ -926,6 +926,33 @@ TEST_F(KeyboardInputMapperTest, Process_toggleCapsLockState) {
926926 ASSERT_EQ (AMETA_CAPS_LOCK_ON, mapper.getMetaState ());
927927}
928928
929+ TEST_F (KeyboardInputMapperTest, Process_ResetLockedModifierState) {
930+ mFakeEventHub ->addKey (EVENTHUB_ID, KEY_CAPSLOCK, 0 , AKEYCODE_CAPS_LOCK, 0 );
931+ mFakeEventHub ->addKey (EVENTHUB_ID, KEY_NUMLOCK, 0 , AKEYCODE_NUM_LOCK, 0 );
932+ mFakeEventHub ->addKey (EVENTHUB_ID, KEY_SCROLLLOCK, 0 , AKEYCODE_SCROLL_LOCK, 0 );
933+
934+ KeyboardInputMapper& mapper =
935+ constructAndAddMapper<KeyboardInputMapper>(AINPUT_SOURCE_KEYBOARD);
936+ // Initial metastate is AMETA_NONE.
937+ ASSERT_EQ (AMETA_NONE, mapper.getMetaState ());
938+
939+ // Toggle caps lock on.
940+ process (mapper, ARBITRARY_TIME, READ_TIME, EV_KEY, KEY_CAPSLOCK, 1 );
941+ process (mapper, ARBITRARY_TIME, READ_TIME, EV_KEY, KEY_CAPSLOCK, 0 );
942+
943+ // Toggle num lock on.
944+ process (mapper, ARBITRARY_TIME, READ_TIME, EV_KEY, KEY_NUMLOCK, 1 );
945+ process (mapper, ARBITRARY_TIME, READ_TIME, EV_KEY, KEY_NUMLOCK, 0 );
946+
947+ // Toggle scroll lock on.
948+ process (mapper, ARBITRARY_TIME, READ_TIME, EV_KEY, KEY_SCROLLLOCK, 1 );
949+ process (mapper, ARBITRARY_TIME, READ_TIME, EV_KEY, KEY_SCROLLLOCK, 0 );
950+ ASSERT_EQ (AMETA_CAPS_LOCK_ON | AMETA_NUM_LOCK_ON | AMETA_SCROLL_LOCK_ON, mapper.getMetaState ());
951+
952+ mReader ->resetLockedModifierState ();
953+ ASSERT_EQ (AMETA_NONE, mapper.getMetaState ());
954+ }
955+
929956TEST_F (KeyboardInputMapperTest, Process_LockedKeysShouldToggleInMultiDevices) {
930957 // keyboard 1.
931958 mFakeEventHub ->addLed (EVENTHUB_ID, LED_CAPSL, true /* initially on*/ );
0 commit comments