119TEST(KeyboardKeyEmbedderHandlerTest, BasicKeyPressingAndHolding) {
120 TestKeystate key_state;
121 std::vector<TestFlutterKeyEvent> results;
122 TestFlutterKeyEvent* event;
123 bool last_handled =
false;
125 std::unique_ptr<KeyboardKeyEmbedderHandler>
handler =
126 std::make_unique<KeyboardKeyEmbedderHandler>(
131 key_state.Getter(), DefaultMapVkToScan);
136 [&last_handled](
bool handled) { last_handled = handled; });
137 EXPECT_EQ(last_handled,
false);
138 EXPECT_EQ(results.size(), 1);
141 EXPECT_EQ(event->physical, kPhysicalKeyA);
142 EXPECT_EQ(event->logical, kLogicalKeyA);
143 EXPECT_STREQ(event->character,
"a");
144 EXPECT_EQ(event->synthesized,
false);
146 event->callback(
true, event->user_data);
147 EXPECT_EQ(last_handled,
true);
154 [&last_handled](
bool handled) { last_handled = handled; });
155 EXPECT_EQ(last_handled,
true);
156 EXPECT_EQ(results.size(), 1);
159 EXPECT_EQ(event->physical, kPhysicalKeyA);
160 EXPECT_EQ(event->logical, kLogicalKeyA);
161 EXPECT_STREQ(event->character,
"a");
162 EXPECT_EQ(event->synthesized,
false);
164 event->callback(
false, event->user_data);
165 EXPECT_EQ(last_handled,
false);
171 [&last_handled](
bool handled) { last_handled = handled; });
172 EXPECT_EQ(results.size(), 1);
175 EXPECT_EQ(event->physical, kPhysicalKeyA);
176 EXPECT_EQ(event->logical, kLogicalKeyA);
177 EXPECT_STREQ(event->character,
"");
178 EXPECT_EQ(event->synthesized,
false);
179 event->callback(
false, event->user_data);
187TEST(KeyboardKeyEmbedderHandlerTest, ToggleNumLockDuringNumpadPress) {
188 TestKeystate key_state;
189 std::vector<TestFlutterKeyEvent> results;
190 TestFlutterKeyEvent* event;
191 bool last_handled =
false;
193 std::unique_ptr<KeyboardKeyEmbedderHandler>
handler =
194 std::make_unique<KeyboardKeyEmbedderHandler>(
199 key_state.Getter(), DefaultMapVkToScan);
202 key_state.Set(VK_NUMPAD1,
true);
204 VK_NUMPAD1, kScanCodeNumpad1, WM_KEYDOWN, 0,
false,
false,
205 [&last_handled](
bool handled) { last_handled = handled; });
206 EXPECT_EQ(results.size(), 1);
209 EXPECT_EQ(event->physical, kPhysicalNumpad1);
210 EXPECT_EQ(event->logical, kLogicalNumpad1);
212 EXPECT_EQ(event->synthesized,
false);
216 key_state.Set(VK_NUMLOCK,
true,
true);
218 VK_NUMLOCK, kScanCodeNumLock, WM_KEYDOWN, 0,
true,
false,
219 [&last_handled](
bool handled) { last_handled = handled; });
220 EXPECT_EQ(results.size(), 1);
223 EXPECT_EQ(event->physical, kPhysicalNumLock);
224 EXPECT_EQ(event->logical, kLogicalNumLock);
225 EXPECT_STREQ(event->character,
"");
226 EXPECT_EQ(event->synthesized,
false);
230 key_state.Set(VK_NUMLOCK,
false,
true);
232 VK_NUMLOCK, kScanCodeNumLock, WM_KEYUP, 0,
true,
true,
233 [&last_handled](
bool handled) { last_handled = handled; });
234 EXPECT_EQ(results.size(), 1);
237 EXPECT_EQ(event->physical, kPhysicalNumLock);
238 EXPECT_EQ(event->logical, kLogicalNumLock);
239 EXPECT_STREQ(event->character,
"");
240 EXPECT_EQ(event->synthesized,
false);
245 VK_END, kScanCodeNumpad1, WM_KEYUP, 0,
false,
true,
246 [&last_handled](
bool handled) { last_handled = handled; });
247 EXPECT_EQ(results.size(), 1);
250 EXPECT_EQ(event->physical, kPhysicalNumpad1);
251 EXPECT_EQ(event->logical, kLogicalNumpad1);
252 EXPECT_STREQ(event->character,
"");
253 EXPECT_EQ(event->synthesized,
false);
259TEST(KeyboardKeyEmbedderHandlerTest, ImeEventsAreIgnored) {
260 TestKeystate key_state;
261 std::vector<TestFlutterKeyEvent> results;
262 TestFlutterKeyEvent* event;
263 bool last_handled =
false;
265 std::unique_ptr<KeyboardKeyEmbedderHandler>
handler =
266 std::make_unique<KeyboardKeyEmbedderHandler>(
271 key_state.Getter(), DefaultMapVkToScan);
274 last_handled =
false;
277 [&last_handled](
bool handled) { last_handled = handled; });
278 EXPECT_EQ(last_handled,
true);
281 EXPECT_EQ(results.size(), 1);
283 EXPECT_EQ(event->physical, 0);
284 EXPECT_EQ(event->logical, 0);
285 EXPECT_EQ(event->callback,
nullptr);
289 last_handled =
false;
293 [&last_handled](
bool handled) { last_handled = handled; });
294 EXPECT_EQ(last_handled,
true);
297 EXPECT_EQ(results.size(), 1);
299 EXPECT_EQ(event->physical, 0);
300 EXPECT_EQ(event->logical, 0);
301 EXPECT_EQ(event->callback,
nullptr);
306 last_handled =
false;
309 [&last_handled](
bool handled) { last_handled = handled; });
311 EXPECT_EQ(last_handled,
false);
312 EXPECT_EQ(results.size(), 1);
314 event->callback(
true, event->user_data);
315 EXPECT_EQ(last_handled,
true);
318 last_handled =
false;
322 [&last_handled](
bool handled) { last_handled = handled; });
323 EXPECT_EQ(last_handled,
false);
324 EXPECT_EQ(results.size(), 1);
326 event->callback(
true, event->user_data);
327 EXPECT_EQ(last_handled,
true);
333TEST(KeyboardKeyEmbedderHandlerTest, ModifierKeysByExtendedBit) {
334 TestKeystate key_state;
335 std::vector<TestFlutterKeyEvent> results;
336 TestFlutterKeyEvent* event;
337 bool last_handled =
false;
339 std::unique_ptr<KeyboardKeyEmbedderHandler>
handler =
340 std::make_unique<KeyboardKeyEmbedderHandler>(
345 key_state.Getter(), DefaultMapVkToScan);
348 last_handled =
false;
349 key_state.Set(VK_LCONTROL,
true);
351 VK_LCONTROL, kScanCodeControl, WM_KEYDOWN, 0,
false,
false,
352 [&last_handled](
bool handled) { last_handled = handled; });
353 EXPECT_EQ(last_handled,
false);
354 EXPECT_EQ(results.size(), 1);
357 EXPECT_EQ(event->physical, kPhysicalControlLeft);
358 EXPECT_EQ(event->logical, kLogicalControlLeft);
359 EXPECT_STREQ(event->character,
"");
360 EXPECT_EQ(event->synthesized,
false);
362 event->callback(
true, event->user_data);
363 EXPECT_EQ(last_handled,
true);
367 last_handled =
false;
368 key_state.Set(VK_RCONTROL,
true);
370 VK_RCONTROL, kScanCodeControl, WM_KEYDOWN, 0,
true,
true,
371 [&last_handled](
bool handled) { last_handled = handled; });
372 EXPECT_EQ(last_handled,
false);
373 EXPECT_EQ(results.size(), 1);
376 EXPECT_EQ(event->physical, kPhysicalControlRight);
377 EXPECT_EQ(event->logical, kLogicalControlRight);
378 EXPECT_STREQ(event->character,
"");
379 EXPECT_EQ(event->synthesized,
false);
381 event->callback(
true, event->user_data);
382 EXPECT_EQ(last_handled,
true);
386 last_handled =
false;
387 key_state.Set(VK_LCONTROL,
false);
389 VK_LCONTROL, kScanCodeControl, WM_KEYUP, 0,
false,
true,
390 [&last_handled](
bool handled) { last_handled = handled; });
391 EXPECT_EQ(last_handled,
false);
392 EXPECT_EQ(results.size(), 1);
395 EXPECT_EQ(event->physical, kPhysicalControlLeft);
396 EXPECT_EQ(event->logical, kLogicalControlLeft);
397 EXPECT_STREQ(event->character,
"");
398 EXPECT_EQ(event->synthesized,
false);
400 event->callback(
true, event->user_data);
401 EXPECT_EQ(last_handled,
true);
405 last_handled =
false;
406 key_state.Set(VK_RCONTROL,
false);
408 VK_RCONTROL, kScanCodeControl, WM_KEYUP, 0,
true,
true,
409 [&last_handled](
bool handled) { last_handled = handled; });
410 EXPECT_EQ(last_handled,
false);
411 EXPECT_EQ(results.size(), 1);
414 EXPECT_EQ(event->physical, kPhysicalControlRight);
415 EXPECT_EQ(event->logical, kLogicalControlRight);
416 EXPECT_STREQ(event->character,
"");
417 EXPECT_EQ(event->synthesized,
false);
419 event->callback(
true, event->user_data);
420 EXPECT_EQ(last_handled,
true);
426TEST(KeyboardKeyEmbedderHandlerTest, ModifierKeysByVirtualKey) {
427 TestKeystate key_state;
428 std::vector<TestFlutterKeyEvent> results;
429 TestFlutterKeyEvent* event;
430 bool last_handled =
false;
432 std::unique_ptr<KeyboardKeyEmbedderHandler>
handler =
433 std::make_unique<KeyboardKeyEmbedderHandler>(
438 key_state.Getter(), DefaultMapVkToScan);
441 last_handled =
false;
442 key_state.Set(VK_LSHIFT,
true);
445 [&last_handled](
bool handled) { last_handled = handled; });
446 EXPECT_EQ(last_handled,
false);
447 EXPECT_EQ(results.size(), 1);
450 EXPECT_EQ(event->physical, kPhysicalShiftLeft);
451 EXPECT_EQ(event->logical, kLogicalShiftLeft);
452 EXPECT_STREQ(event->character,
"");
453 EXPECT_EQ(event->synthesized,
false);
455 event->callback(
true, event->user_data);
456 EXPECT_EQ(last_handled,
true);
460 last_handled =
false;
461 key_state.Set(VK_RSHIFT,
true);
464 [&last_handled](
bool handled) { last_handled = handled; });
465 EXPECT_EQ(last_handled,
false);
466 EXPECT_EQ(results.size(), 1);
469 EXPECT_EQ(event->physical, kPhysicalShiftRight);
470 EXPECT_EQ(event->logical, kLogicalShiftRight);
471 EXPECT_STREQ(event->character,
"");
472 EXPECT_EQ(event->synthesized,
false);
474 event->callback(
true, event->user_data);
475 EXPECT_EQ(last_handled,
true);
479 last_handled =
false;
480 key_state.Set(VK_LSHIFT,
false);
483 [&last_handled](
bool handled) { last_handled = handled; });
484 EXPECT_EQ(last_handled,
false);
485 EXPECT_EQ(results.size(), 1);
488 EXPECT_EQ(event->physical, kPhysicalShiftLeft);
489 EXPECT_EQ(event->logical, kLogicalShiftLeft);
490 EXPECT_STREQ(event->character,
"");
491 EXPECT_EQ(event->synthesized,
false);
493 event->callback(
true, event->user_data);
494 EXPECT_EQ(last_handled,
true);
498 last_handled =
false;
499 key_state.Set(VK_RSHIFT,
false);
502 [&last_handled](
bool handled) { last_handled = handled; });
503 EXPECT_EQ(last_handled,
false);
504 EXPECT_EQ(results.size(), 1);
507 EXPECT_EQ(event->physical, kPhysicalShiftRight);
508 EXPECT_EQ(event->logical, kLogicalShiftRight);
509 EXPECT_STREQ(event->character,
"");
510 EXPECT_EQ(event->synthesized,
false);
512 event->callback(
true, event->user_data);
513 EXPECT_EQ(last_handled,
true);
519TEST(KeyboardKeyEmbedderHandlerTest,
520 SynthesizeModifierLeftKeyDownWhenNotPressed) {
521 TestKeystate key_state;
522 std::vector<TestFlutterKeyEvent> results;
523 TestFlutterKeyEvent* event;
524 bool last_handled =
false;
526 std::unique_ptr<KeyboardKeyEmbedderHandler>
handler =
527 std::make_unique<KeyboardKeyEmbedderHandler>(
532 key_state.Getter(), DefaultMapVkToScan);
536 EXPECT_EQ(results.size(), 1);
539 EXPECT_EQ(event->physical, kPhysicalShiftLeft);
540 EXPECT_EQ(event->logical, kLogicalShiftLeft);
541 EXPECT_STREQ(event->character,
"");
542 EXPECT_EQ(event->synthesized,
true);
546 handler->SyncModifiersIfNeeded(0);
551 EXPECT_EQ(results.size(), 1);
554 EXPECT_EQ(event->physical, kPhysicalControlLeft);
555 EXPECT_EQ(event->logical, kLogicalControlLeft);
556 EXPECT_STREQ(event->character,
"");
557 EXPECT_EQ(event->synthesized,
true);
562TEST(KeyboardKeyEmbedderHandlerTest, DoNotSynthesizeModifierDownWhenPressed) {
563 TestKeystate key_state;
564 std::vector<TestFlutterKeyEvent> results;
565 TestFlutterKeyEvent* event;
566 bool last_handled =
false;
568 std::unique_ptr<KeyboardKeyEmbedderHandler>
handler =
569 std::make_unique<KeyboardKeyEmbedderHandler>(
574 key_state.Getter(), DefaultMapVkToScan);
580 [&last_handled](
bool handled) { last_handled = handled; });
583 EXPECT_EQ(results.size(), 0);
589 [&last_handled](
bool handled) { last_handled = handled; });
592 EXPECT_EQ(results.size(), 0);
598 [&last_handled](
bool handled) { last_handled = handled; });
601 EXPECT_EQ(results.size(), 0);
607 [&last_handled](
bool handled) { last_handled = handled; });
610 EXPECT_EQ(results.size(), 0);
615TEST(KeyboardKeyEmbedderHandlerTest, SynthesizeModifierUpWhenPressed) {
616 TestKeystate key_state;
617 std::vector<TestFlutterKeyEvent> results;
618 TestFlutterKeyEvent* event;
619 bool last_handled =
false;
621 std::unique_ptr<KeyboardKeyEmbedderHandler>
handler =
622 std::make_unique<KeyboardKeyEmbedderHandler>(
627 key_state.Getter(), DefaultMapVkToScan);
633 [&last_handled](
bool handled) { last_handled = handled; });
635 handler->SyncModifiersIfNeeded(0);
636 EXPECT_EQ(results.size(), 1);
639 EXPECT_EQ(event->physical, kPhysicalShiftLeft);
640 EXPECT_EQ(event->logical, kLogicalShiftLeft);
641 EXPECT_STREQ(event->character,
"");
642 EXPECT_EQ(event->synthesized,
true);
649 [&last_handled](
bool handled) { last_handled = handled; });
651 handler->SyncModifiersIfNeeded(0);
652 EXPECT_EQ(results.size(), 1);
655 EXPECT_EQ(event->physical, kPhysicalShiftRight);
656 EXPECT_EQ(event->logical, kLogicalShiftRight);
657 EXPECT_STREQ(event->character,
"");
658 EXPECT_EQ(event->synthesized,
true);
665 [&last_handled](
bool handled) { last_handled = handled; });
667 handler->SyncModifiersIfNeeded(0);
668 EXPECT_EQ(results.size(), 1);
671 EXPECT_EQ(event->physical, kPhysicalControlLeft);
672 EXPECT_EQ(event->logical, kLogicalControlLeft);
673 EXPECT_STREQ(event->character,
"");
674 EXPECT_EQ(event->synthesized,
true);
681 [&last_handled](
bool handled) { last_handled = handled; });
683 handler->SyncModifiersIfNeeded(0);
684 EXPECT_EQ(results.size(), 1);
687 EXPECT_EQ(event->physical, kPhysicalControlRight);
688 EXPECT_EQ(event->logical, kLogicalControlRight);
689 EXPECT_STREQ(event->character,
"");
690 EXPECT_EQ(event->synthesized,
true);
716TEST(KeyboardKeyEmbedderHandlerTest, RepeatedDownIsIgnored) {
717 TestKeystate key_state;
718 std::vector<TestFlutterKeyEvent> results;
719 TestFlutterKeyEvent* event;
720 bool last_handled =
false;
722 std::unique_ptr<KeyboardKeyEmbedderHandler>
handler =
723 std::make_unique<KeyboardKeyEmbedderHandler>(
728 key_state.Getter(), DefaultMapVkToScan);
729 last_handled =
false;
734 [&last_handled](
bool handled) { last_handled = handled; });
735 EXPECT_EQ(last_handled,
false);
736 EXPECT_EQ(results.size(), 1);
739 EXPECT_EQ(event->physical, kPhysicalKeyA);
740 EXPECT_EQ(event->logical, kLogicalKeyA);
741 EXPECT_STREQ(event->character,
"a");
742 EXPECT_EQ(event->synthesized,
false);
744 event->callback(
true, event->user_data);
745 EXPECT_EQ(last_handled,
true);
751 last_handled =
false;
754 [&last_handled](
bool handled) { last_handled = handled; });
755 EXPECT_EQ(last_handled,
false);
756 ASSERT_EQ(results.size(), 2u);
760 EXPECT_EQ(event->physical, kPhysicalKeyA);
761 EXPECT_EQ(event->logical, kLogicalKeyA);
762 EXPECT_STREQ(event->character,
"");
763 EXPECT_EQ(event->synthesized,
true);
764 EXPECT_EQ(event->callback,
nullptr);
768 EXPECT_EQ(event->physical, kPhysicalKeyA);
769 EXPECT_EQ(event->logical, kLogicalKeyA);
770 EXPECT_STREQ(event->character,
"a");
771 EXPECT_EQ(event->synthesized,
false);
772 event->callback(
true, event->user_data);
773 EXPECT_EQ(last_handled,
true);
777TEST(KeyboardKeyEmbedderHandlerTest, AbruptRepeatIsConvertedToDown) {
778 TestKeystate key_state;
779 std::vector<TestFlutterKeyEvent> results;
780 TestFlutterKeyEvent* event;
781 bool last_handled =
false;
783 std::unique_ptr<KeyboardKeyEmbedderHandler>
handler =
784 std::make_unique<KeyboardKeyEmbedderHandler>(
789 key_state.Getter(), DefaultMapVkToScan);
790 last_handled =
false;
797 [&last_handled](
bool handled) { last_handled = handled; });
798 EXPECT_EQ(last_handled,
false);
799 EXPECT_EQ(results.size(), 1);
802 EXPECT_EQ(event->physical, kPhysicalKeyA);
803 EXPECT_EQ(event->logical, kLogicalKeyA);
804 EXPECT_STREQ(event->character,
"a");
805 EXPECT_EQ(event->synthesized,
false);
807 event->callback(
true, event->user_data);
808 EXPECT_EQ(last_handled,
true);
812 last_handled =
false;
816 [&last_handled](
bool handled) { last_handled = handled; });
817 EXPECT_EQ(last_handled,
false);
818 EXPECT_EQ(results.size(), 1);
821 EXPECT_EQ(event->physical, kPhysicalKeyA);
822 EXPECT_EQ(event->logical, kLogicalKeyA);
823 EXPECT_STREQ(event->character,
"");
824 EXPECT_EQ(event->synthesized,
false);
826 event->callback(
true, event->user_data);
827 EXPECT_EQ(last_handled,
true);
831TEST(KeyboardKeyEmbedderHandlerTest, AbruptUpIsIgnored) {
832 TestKeystate key_state;
833 std::vector<TestFlutterKeyEvent> results;
834 TestFlutterKeyEvent* event;
835 bool last_handled =
false;
837 std::unique_ptr<KeyboardKeyEmbedderHandler>
handler =
838 std::make_unique<KeyboardKeyEmbedderHandler>(
843 key_state.Getter(), DefaultMapVkToScan);
844 last_handled =
false;
851 last_handled =
false;
854 [&last_handled](
bool handled) { last_handled = handled; });
855 EXPECT_EQ(last_handled,
true);
856 EXPECT_EQ(results.size(), 1);
858 EXPECT_EQ(event->physical, 0);
859 EXPECT_EQ(event->logical, 0);
860 EXPECT_EQ(event->callback,
nullptr);
864TEST(KeyboardKeyEmbedderHandlerTest, SynthesizeForDesyncPressingState) {
865 TestKeystate key_state;
866 std::vector<TestFlutterKeyEvent> results;
867 TestFlutterKeyEvent* event;
868 bool last_handled =
false;
870 std::unique_ptr<KeyboardKeyEmbedderHandler>
handler =
871 std::make_unique<KeyboardKeyEmbedderHandler>(
876 key_state.Getter(), DefaultMapVkToScan);
879 key_state.Set(VK_LCONTROL,
true);
885 [&last_handled](
bool handled) { last_handled = handled; });
886 EXPECT_EQ(last_handled,
false);
887 EXPECT_EQ(results.size(), 2);
890 EXPECT_EQ(event->physical, kPhysicalControlLeft);
891 EXPECT_EQ(event->logical, kLogicalControlLeft);
892 EXPECT_STREQ(event->character,
"");
893 EXPECT_EQ(event->synthesized,
true);
894 EXPECT_EQ(event->callback,
nullptr);
898 EXPECT_EQ(event->physical, kPhysicalKeyA);
899 EXPECT_EQ(event->logical, kLogicalKeyA);
900 EXPECT_STREQ(event->character,
"a");
901 EXPECT_EQ(event->synthesized,
false);
904 event->callback(
false, event->user_data);
905 EXPECT_EQ(last_handled,
false);
909 key_state.Set(VK_LCONTROL,
false);
914 [&last_handled](
bool handled) { last_handled = handled; });
915 EXPECT_EQ(last_handled,
false);
916 EXPECT_EQ(results.size(), 2);
919 EXPECT_EQ(event->physical, kPhysicalControlLeft);
920 EXPECT_EQ(event->logical, kLogicalControlLeft);
921 EXPECT_STREQ(event->character,
"");
922 EXPECT_EQ(event->synthesized,
true);
923 EXPECT_EQ(event->callback,
nullptr);
927 EXPECT_EQ(event->physical, kPhysicalKeyA);
928 EXPECT_EQ(event->logical, kLogicalKeyA);
929 EXPECT_STREQ(event->character,
"a");
930 EXPECT_EQ(event->synthesized,
false);
933 event->callback(
false, event->user_data);
934 EXPECT_EQ(last_handled,
false);
941 [&last_handled](
bool handled) { last_handled = handled; });
942 EXPECT_EQ(results.size(), 1);
945 EXPECT_EQ(event->physical, kPhysicalKeyA);
946 EXPECT_EQ(event->logical, kLogicalKeyA);
947 EXPECT_STREQ(event->character,
"");
948 EXPECT_EQ(event->synthesized,
false);
949 event->callback(
false, event->user_data);
952TEST(KeyboardKeyEmbedderHandlerTest, SynthesizeForDesyncToggledState) {
953 TestKeystate key_state;
954 std::vector<TestFlutterKeyEvent> results;
955 TestFlutterKeyEvent* event;
956 bool last_handled =
false;
958 std::unique_ptr<KeyboardKeyEmbedderHandler>
handler =
959 std::make_unique<KeyboardKeyEmbedderHandler>(
964 key_state.Getter(), DefaultMapVkToScan);
967 key_state.Set(VK_NUMLOCK,
false,
true);
973 [&last_handled](
bool handled) { last_handled = handled; });
974 EXPECT_EQ(last_handled,
false);
975 EXPECT_EQ(results.size(), 3);
978 EXPECT_EQ(event->physical, kPhysicalNumLock);
979 EXPECT_EQ(event->logical, kLogicalNumLock);
980 EXPECT_STREQ(event->character,
"");
981 EXPECT_EQ(event->synthesized,
true);
985 EXPECT_EQ(event->physical, kPhysicalNumLock);
986 EXPECT_EQ(event->logical, kLogicalNumLock);
987 EXPECT_STREQ(event->character,
"");
988 EXPECT_EQ(event->synthesized,
true);
992 EXPECT_EQ(event->physical, kPhysicalKeyA);
993 EXPECT_EQ(event->logical, kLogicalKeyA);
994 EXPECT_STREQ(event->character,
"a");
995 EXPECT_EQ(event->synthesized,
false);
997 event->callback(
true, event->user_data);
998 EXPECT_EQ(last_handled,
true);
1002 key_state.Set(VK_NUMLOCK,
true,
true);
1007 [&last_handled](
bool handled) { last_handled = handled; });
1008 EXPECT_EQ(last_handled,
true);
1009 EXPECT_EQ(results.size(), 2);
1010 event = &results[0];
1012 EXPECT_EQ(event->physical, kPhysicalNumLock);
1013 EXPECT_EQ(event->logical, kLogicalNumLock);
1014 EXPECT_STREQ(event->character,
"");
1015 EXPECT_EQ(event->synthesized,
true);
1017 event = &results[1];
1019 EXPECT_EQ(event->physical, kPhysicalKeyA);
1020 EXPECT_EQ(event->logical, kLogicalKeyA);
1021 EXPECT_STREQ(event->character,
"a");
1022 EXPECT_EQ(event->synthesized,
false);
1024 event->callback(
false, event->user_data);
1025 EXPECT_EQ(last_handled,
false);
1031 key_state.Set(VK_NUMLOCK,
false,
false);
1037 [&last_handled](
bool handled) { last_handled = handled; });
1038 EXPECT_EQ(results.size(), 4);
1039 event = &results[0];
1041 EXPECT_EQ(event->physical, kPhysicalNumLock);
1042 EXPECT_EQ(event->logical, kLogicalNumLock);
1043 EXPECT_STREQ(event->character,
"");
1044 EXPECT_EQ(event->synthesized,
true);
1045 EXPECT_EQ(event->callback,
nullptr);
1047 event = &results[1];
1049 EXPECT_EQ(event->physical, kPhysicalNumLock);
1050 EXPECT_EQ(event->logical, kLogicalNumLock);
1051 EXPECT_STREQ(event->character,
"");
1052 EXPECT_EQ(event->synthesized,
true);
1053 EXPECT_EQ(event->callback,
nullptr);
1055 event = &results[2];
1057 EXPECT_EQ(event->physical, kPhysicalNumLock);
1058 EXPECT_EQ(event->logical, kLogicalNumLock);
1059 EXPECT_STREQ(event->character,
"");
1060 EXPECT_EQ(event->synthesized,
true);
1061 EXPECT_EQ(event->callback,
nullptr);
1063 event = &results[3];
1065 EXPECT_EQ(event->physical, kPhysicalKeyA);
1066 EXPECT_EQ(event->logical, kLogicalKeyA);
1067 EXPECT_STREQ(event->character,
"");
1068 EXPECT_EQ(event->synthesized,
false);
1069 event->callback(
false, event->user_data);
1072TEST(KeyboardKeyEmbedderHandlerTest,
1073 SynthesizeForDesyncToggledStateByItselfsUp) {
1074 TestKeystate key_state;
1075 std::vector<TestFlutterKeyEvent> results;
1076 TestFlutterKeyEvent* event;
1077 bool last_handled =
false;
1079 std::unique_ptr<KeyboardKeyEmbedderHandler>
handler =
1080 std::make_unique<KeyboardKeyEmbedderHandler>(
1085 key_state.Getter(), DefaultMapVkToScan);
1088 key_state.Set(VK_NUMLOCK,
true,
true);
1090 VK_NUMLOCK, kScanCodeNumLock, WM_KEYDOWN, 0,
true,
false,
1091 [&last_handled](
bool handled) { last_handled = handled; });
1092 event = &results.back();
1093 event->callback(
false, event->user_data);
1097 key_state.Set(VK_NUMLOCK,
false,
false);
1100 VK_NUMLOCK, kScanCodeNumLock, WM_KEYUP, 0,
true,
true,
1101 [&last_handled](
bool handled) { last_handled = handled; });
1102 EXPECT_EQ(last_handled,
false);
1103 EXPECT_EQ(results.size(), 3);
1104 event = &results[0];
1106 EXPECT_EQ(event->physical, kPhysicalNumLock);
1107 EXPECT_EQ(event->logical, kLogicalNumLock);
1108 EXPECT_STREQ(event->character,
"");
1109 EXPECT_EQ(event->synthesized,
true);
1110 EXPECT_EQ(event->callback,
nullptr);
1112 event = &results[1];
1114 EXPECT_EQ(event->physical, kPhysicalNumLock);
1115 EXPECT_EQ(event->logical, kLogicalNumLock);
1116 EXPECT_STREQ(event->character,
"");
1117 EXPECT_EQ(event->synthesized,
true);
1118 EXPECT_EQ(event->callback,
nullptr);
1120 event = &results[2];
1122 EXPECT_EQ(event->physical, kPhysicalNumLock);
1123 EXPECT_EQ(event->logical, kLogicalNumLock);
1124 EXPECT_STREQ(event->character,
"");
1125 EXPECT_EQ(event->synthesized,
false);
1127 last_handled =
false;
1128 event->callback(
true, event->user_data);
1129 EXPECT_EQ(last_handled,
true);
1132TEST(KeyboardKeyEmbedderHandlerTest,
1133 SynthesizeForDesyncToggledStateByItselfsDown) {
1134 TestKeystate key_state;
1135 std::vector<TestFlutterKeyEvent> results;
1136 TestFlutterKeyEvent* event;
1137 bool last_handled =
false;
1140 key_state.Set(VK_NUMLOCK,
false,
false);
1141 std::unique_ptr<KeyboardKeyEmbedderHandler>
handler =
1142 std::make_unique<KeyboardKeyEmbedderHandler>(
1147 key_state.Getter(), DefaultMapVkToScan);
1153 key_state.Set(VK_NUMLOCK,
true,
false);
1155 VK_NUMLOCK, kScanCodeNumLock, WM_KEYDOWN, 0,
true,
false,
1156 [&last_handled](
bool handled) { last_handled = handled; });
1157 EXPECT_EQ(last_handled,
false);
1161 EXPECT_EQ(results.size(), 4);
1162 event = &results[0];
1164 EXPECT_EQ(event->physical, kPhysicalNumLock);
1165 EXPECT_EQ(event->logical, kLogicalNumLock);
1166 EXPECT_STREQ(event->character,
"");
1167 EXPECT_EQ(event->synthesized,
true);
1168 EXPECT_EQ(event->callback,
nullptr);
1170 event = &results[1];
1172 EXPECT_EQ(event->physical, kPhysicalNumLock);
1173 EXPECT_EQ(event->logical, kLogicalNumLock);
1174 EXPECT_STREQ(event->character,
"");
1175 EXPECT_EQ(event->synthesized,
true);
1176 EXPECT_EQ(event->callback,
nullptr);
1178 event = &results[2];
1180 EXPECT_EQ(event->physical, kPhysicalNumLock);
1181 EXPECT_EQ(event->logical, kLogicalNumLock);
1182 EXPECT_STREQ(event->character,
"");
1183 EXPECT_EQ(event->synthesized,
false);
1185 last_handled =
false;
1186 event->callback(
true, event->user_data);
1187 EXPECT_EQ(last_handled,
true);
1190TEST(KeyboardKeyEmbedderHandlerTest, SynthesizeWithInitialTogglingState) {
1191 TestKeystate key_state;
1192 std::vector<TestFlutterKeyEvent> results;
1193 TestFlutterKeyEvent* event;
1194 bool last_handled =
false;
1197 key_state.Set(VK_NUMLOCK,
false,
true);
1199 std::unique_ptr<KeyboardKeyEmbedderHandler>
handler =
1200 std::make_unique<KeyboardKeyEmbedderHandler>(
1205 key_state.Getter(), DefaultMapVkToScan);
1208 key_state.Set(VK_NUMLOCK,
true,
false);
1210 VK_NUMLOCK, kScanCodeNumLock, WM_KEYDOWN, 0,
true,
false,
1211 [&last_handled](
bool handled) { last_handled = handled; });
1212 EXPECT_EQ(last_handled,
false);
1213 EXPECT_EQ(results.size(), 1);
1214 event = &results[0];
1216 EXPECT_EQ(event->physical, kPhysicalNumLock);
1217 EXPECT_EQ(event->logical, kLogicalNumLock);
1218 EXPECT_STREQ(event->character,
"");
1219 EXPECT_EQ(event->synthesized,
false);
1221 event->callback(
true, event->user_data);
1222 EXPECT_EQ(last_handled,
true);
1226TEST(KeyboardKeyEmbedderHandlerTest, SysKeyPress) {
1227 TestKeystate key_state;
1228 std::vector<TestFlutterKeyEvent> results;
1229 TestFlutterKeyEvent* event;
1230 bool last_handled =
false;
1232 std::unique_ptr<KeyboardKeyEmbedderHandler>
handler =
1233 std::make_unique<KeyboardKeyEmbedderHandler>(
1238 key_state.Getter(), DefaultMapVkToScan);
1241 key_state.Set(VK_LMENU,
true);
1243 VK_LMENU, kScanCodeAltLeft, WM_SYSKEYDOWN, 0,
false,
false,
1244 [&last_handled](
bool handled) { last_handled = handled; });
1245 EXPECT_EQ(last_handled,
false);
1246 EXPECT_EQ(results.size(), 1);
1247 event = results.data();
1249 EXPECT_EQ(event->physical, kPhysicalAltLeft);
1250 EXPECT_EQ(event->logical, kLogicalAltLeft);
1251 EXPECT_STREQ(event->character,
"");
1252 EXPECT_EQ(event->synthesized,
false);
1254 event->callback(
true, event->user_data);
1255 EXPECT_EQ(last_handled,
true);
1259 key_state.Set(VK_LMENU,
false);
1261 VK_LMENU, kScanCodeAltLeft, WM_SYSKEYUP, 0,
false,
true,
1262 [&last_handled](
bool handled) { last_handled = handled; });
1263 EXPECT_EQ(results.size(), 1);
1264 event = results.data();
1266 EXPECT_EQ(event->physical, kPhysicalAltLeft);
1267 EXPECT_EQ(event->logical, kLogicalAltLeft);
1268 EXPECT_STREQ(event->character,
"");
1269 EXPECT_EQ(event->synthesized,
false);
1270 event->callback(
false, event->user_data);