567 {
569 tester.Responding(true);
570
571
572
573
574 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
576 kWmResultZero),
578 kWmResultZero)});
579
580 EXPECT_EQ(tester.key_calls.size(), 1);
582 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
583 tester.clear_key_calls();
584 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
585
586
587 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
589 kWmResultZero)});
590
591 EXPECT_EQ(tester.key_calls.size(), 1);
593 kPhysicalKeyA, kLogicalKeyA, "", kNotSynthesized);
594 tester.clear_key_calls();
595 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
596}
597
598TEST_F(KeyboardTest, LowerCaseAUnhandled) {
600 tester.Responding(false);
601
602
603
604
605 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
607 kWmResultZero),
609 kWmResultZero)});
610
611 EXPECT_EQ(tester.key_calls.size(), 2);
613 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
615 tester.clear_key_calls();
616 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
617
618
619 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
621 kWmResultZero)});
622
623 EXPECT_EQ(tester.key_calls.size(), 1);
625 kPhysicalKeyA, kLogicalKeyA, "", kNotSynthesized);
626 tester.clear_key_calls();
627 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
628}
629
630TEST_F(KeyboardTest, ArrowLeftHandled) {
632 tester.Responding(true);
633
634
635
636
637 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
639 kWmResultZero)});
640
641 EXPECT_EQ(tester.key_calls.size(), 1);
643 kPhysicalArrowLeft, kLogicalArrowLeft, "",
644 kNotSynthesized);
645 tester.clear_key_calls();
646 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
647
648
649 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
651 kWmResultZero)});
652
653 EXPECT_EQ(tester.key_calls.size(), 1);
655 kPhysicalArrowLeft, kLogicalArrowLeft, "",
656 kNotSynthesized);
657 tester.clear_key_calls();
658 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
659}
660
661TEST_F(KeyboardTest, ArrowLeftUnhandled) {
663 tester.Responding(false);
664
665
666
667
668 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
670 kWmResultZero)});
671
672 EXPECT_EQ(tester.key_calls.size(), 1);
674 kPhysicalArrowLeft, kLogicalArrowLeft, "",
675 kNotSynthesized);
676 tester.clear_key_calls();
677 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
678
679
680 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
682 kWmResultZero)});
683
684 EXPECT_EQ(tester.key_calls.size(), 1);
686 kPhysicalArrowLeft, kLogicalArrowLeft, "",
687 kNotSynthesized);
688 tester.clear_key_calls();
689 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
690}
691
692TEST_F(KeyboardTest, ShiftLeftUnhandled) {
694 tester.Responding(false);
695
696
697
698
699 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
700 KeyStateChange{VK_LSHIFT, true, false},
702 kWmResultZero)});
703
704 EXPECT_EQ(tester.key_calls.size(), 1);
706 kPhysicalShiftLeft, kLogicalShiftLeft, "",
707 kNotSynthesized);
708 tester.clear_key_calls();
709 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
710
711
712 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
714 kWmResultZero)});
715
716 EXPECT_EQ(tester.key_calls.size(), 1);
718 kPhysicalShiftLeft, kLogicalShiftLeft, "",
719 kNotSynthesized);
720 tester.clear_key_calls();
721 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
722
723
724 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
725 KeyStateChange{VK_LSHIFT, false, true},
727 kWmResultZero)});
728
729 EXPECT_EQ(tester.key_calls.size(), 1);
731 kPhysicalShiftLeft, kLogicalShiftLeft, "",
732 kNotSynthesized);
733 tester.clear_key_calls();
734 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
735}
736
737TEST_F(KeyboardTest, ShiftRightUnhandled) {
739 tester.Responding(false);
740
741
742
743
744 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
745 KeyStateChange{VK_RSHIFT, true, false},
747 kWmResultZero)});
748
749 EXPECT_EQ(tester.key_calls.size(), 1);
751 kPhysicalShiftRight, kLogicalShiftRight, "",
752 kNotSynthesized);
753 tester.clear_key_calls();
754 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
755
756
757 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
758 KeyStateChange{VK_RSHIFT, false, true},
760 kWmResultZero)});
761
762 EXPECT_EQ(tester.key_calls.size(), 1);
764 kPhysicalShiftRight, kLogicalShiftRight, "",
765 kNotSynthesized);
766 tester.clear_key_calls();
767 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
768}
769
770TEST_F(KeyboardTest, CtrlLeftUnhandled) {
772 tester.Responding(false);
773
774
775
776
777 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
778 KeyStateChange{VK_LCONTROL, true, false},
780 kWmResultZero)});
781
782 EXPECT_EQ(tester.key_calls.size(), 1);
784 kPhysicalControlLeft, kLogicalControlLeft, "",
785 kNotSynthesized);
786 tester.clear_key_calls();
787 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
788
789
790 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
791 KeyStateChange{VK_LCONTROL, false, true},
793 kWmResultZero)});
794
795 EXPECT_EQ(tester.key_calls.size(), 1);
797 kPhysicalControlLeft, kLogicalControlLeft, "",
798 kNotSynthesized);
799 tester.clear_key_calls();
800 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
801}
802
803TEST_F(KeyboardTest, CtrlRightUnhandled) {
805 tester.Responding(false);
806
807
808
809
810 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
811 KeyStateChange{VK_RCONTROL, true, false},
813 kWmResultZero)});
814
815 EXPECT_EQ(tester.key_calls.size(), 1);
817 kPhysicalControlRight, kLogicalControlRight, "",
818 kNotSynthesized);
819 tester.clear_key_calls();
820 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
821
822
823 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
824 KeyStateChange{VK_RCONTROL, false, true},
826 kWmResultZero)});
827
828 EXPECT_EQ(tester.key_calls.size(), 1);
830 kPhysicalControlRight, kLogicalControlRight, "",
831 kNotSynthesized);
832 tester.clear_key_calls();
833 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
834}
835
836TEST_F(KeyboardTest, AltLeftUnhandled) {
838 tester.Responding(false);
839
840
841
842
843 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
844 KeyStateChange{VK_LMENU, true, false},
846 kWmResultDefault)});
847
848 EXPECT_EQ(tester.key_calls.size(), 1);
850 kPhysicalAltLeft, kLogicalAltLeft, "", kNotSynthesized);
851 tester.clear_key_calls();
852
853 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
854
855
856 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
857 KeyStateChange{VK_LMENU, false, true},
859 kWmResultDefault)});
860
861 EXPECT_EQ(tester.key_calls.size(), 1);
863 kPhysicalAltLeft, kLogicalAltLeft, "", kNotSynthesized);
864 tester.clear_key_calls();
865
866 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
867}
868
869TEST_F(KeyboardTest, AltRightUnhandled) {
871 tester.Responding(false);
872
873
874
875
876 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
877 KeyStateChange{VK_RMENU, true, false},
879 kWmResultDefault)});
880
881 EXPECT_EQ(tester.key_calls.size(), 1);
883 kPhysicalAltRight, kLogicalAltRight, "",
884 kNotSynthesized);
885 tester.clear_key_calls();
886
887 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
888
889
890 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
891 KeyStateChange{VK_RMENU, false, true},
893 kWmResultDefault)});
894
895 EXPECT_EQ(tester.key_calls.size(), 1);
897 kPhysicalAltRight, kLogicalAltRight, "",
898 kNotSynthesized);
899 tester.clear_key_calls();
900
901 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
902}
903
904TEST_F(KeyboardTest, MetaLeftUnhandled) {
906 tester.Responding(false);
907
908
909
910
911 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
912 KeyStateChange{VK_LWIN, true, false},
914 kWmResultZero)});
915
916 EXPECT_EQ(tester.key_calls.size(), 1);
918 kPhysicalMetaLeft, kLogicalMetaLeft, "",
919 kNotSynthesized);
920 tester.clear_key_calls();
921 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
922
923
924 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
925 KeyStateChange{VK_LWIN, false, true},
927
928 EXPECT_EQ(tester.key_calls.size(), 1);
930 kPhysicalMetaLeft, kLogicalMetaLeft, "",
931 kNotSynthesized);
932 tester.clear_key_calls();
933 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
934}
935
936TEST_F(KeyboardTest, MetaRightUnhandled) {
938 tester.Responding(false);
939
940
941
942
943 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
944 KeyStateChange{VK_RWIN, true, false},
946 kWmResultZero)});
947
948 EXPECT_EQ(tester.key_calls.size(), 1);
950 kPhysicalMetaRight, kLogicalMetaRight, "",
951 kNotSynthesized);
952 tester.clear_key_calls();
953 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
954
955
956 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
957 KeyStateChange{VK_RWIN, false, true},
959 kWmResultZero)});
960
961 EXPECT_EQ(tester.key_calls.size(), 1);
963 kPhysicalMetaRight, kLogicalMetaRight, "",
964 kNotSynthesized);
965 tester.clear_key_calls();
966 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
967}
968
969
970TEST_F(KeyboardTest, RepeatA) {
972 tester.Responding(true);
973
974
975 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
977 kWmResultZero),
979 kWmResultZero)});
980
981
982 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
984 kWmResultZero),
986 kWmResultZero)});
987
988 EXPECT_EQ(tester.key_calls.size(), 2);
990 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
992 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
993 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
994}
995
996
997
998
999TEST_F(KeyboardTest, RestartClearsKeyboardState) {
1001 tester.Responding(true);
1002
1003
1004 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1006 kWmResultZero),
1008 kWmResultZero)});
1009
1010
1011 tester.ResetKeyboard();
1012
1013
1014
1015 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1017 kWmResultZero),
1019 kWmResultZero)});
1020
1021 EXPECT_EQ(tester.key_calls.size(), 2);
1023 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
1025 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
1026 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
1027}
1028
1029
1030
1031TEST_F(KeyboardTest, FreshKeyDownAfterMissedUpIsDelivered) {
1033 tester.Responding(true);
1034
1035 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1037 kWmResultZero)});
1038
1039 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1041 kWmResultZero)});
1042
1043 ASSERT_EQ(tester.key_calls.size(), 3u);
1045 kPhysicalEnter, kLogicalEnter, "", kNotSynthesized);
1047 kPhysicalEnter, kLogicalEnter, "", kSynthesized);
1049 kPhysicalEnter, kLogicalEnter, "", kNotSynthesized);
1050 tester.clear_key_calls();
1051
1052 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1054 kWmResultZero)});
1055
1056 ASSERT_EQ(tester.key_calls.size(), 1u);
1058 kPhysicalEnter, kLogicalEnter, "", kNotSynthesized);
1059 tester.clear_key_calls();
1060 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0u);
1061}
1062
1063
1064
1065TEST_F(KeyboardTest, ShiftLeftKeyA) {
1067 tester.Responding(false);
1068
1069
1070
1071
1072 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1073 KeyStateChange{VK_LSHIFT, true, true},
1075 kWmResultZero)});
1076
1077 EXPECT_EQ(tester.key_calls.size(), 1);
1079 kPhysicalShiftLeft, kLogicalShiftLeft, "",
1080 kNotSynthesized);
1081 tester.clear_key_calls();
1082 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1083
1084
1085 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1087 kWmResultZero),
1089 kWmResultZero)});
1090
1091 EXPECT_EQ(tester.key_calls.size(), 2);
1093 kPhysicalKeyA, kLogicalKeyA, "A", kNotSynthesized);
1095 tester.clear_key_calls();
1096 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1097
1098
1099 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1100 KeyStateChange{VK_LSHIFT, false, true},
1102 kWmResultZero)});
1103
1104 EXPECT_EQ(tester.key_calls.size(), 1);
1106 kPhysicalShiftLeft, kLogicalShiftLeft, "",
1107 kNotSynthesized);
1108 tester.clear_key_calls();
1109 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1110
1111
1112 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1114 kWmResultZero)});
1115
1116 EXPECT_EQ(tester.key_calls.size(), 1);
1118 kPhysicalKeyA, kLogicalKeyA, "", kNotSynthesized);
1119 tester.clear_key_calls();
1120 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1121}
1122
1123
1124
1125TEST_F(KeyboardTest, CtrlLeftKeyA) {
1127 tester.Responding(false);
1128
1129
1130
1131
1132 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1133 KeyStateChange{VK_LCONTROL, true, true},
1135 kWmResultZero)});
1136
1137 EXPECT_EQ(tester.key_calls.size(), 1);
1139 kPhysicalControlLeft, kLogicalControlLeft, "",
1140 kNotSynthesized);
1141 tester.clear_key_calls();
1142 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1143
1144
1145 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1147 kWmResultZero),
1149 kWmResultZero)});
1150
1151 EXPECT_EQ(tester.key_calls.size(), 1);
1153 kPhysicalKeyA, kLogicalKeyA, "", kNotSynthesized);
1154 tester.clear_key_calls();
1155 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1156
1157
1158 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1160 kWmResultZero)});
1161
1162 EXPECT_EQ(tester.key_calls.size(), 1);
1164 kPhysicalKeyA, kLogicalKeyA, "", kNotSynthesized);
1165 tester.clear_key_calls();
1166 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1167
1168
1169 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1170 KeyStateChange{VK_LCONTROL, false, true},
1172 kWmResultZero)});
1173
1174 EXPECT_EQ(tester.key_calls.size(), 1);
1176 kPhysicalControlLeft, kLogicalControlLeft, "",
1177 kNotSynthesized);
1178 tester.clear_key_calls();
1179 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1180}
1181
1182
1183TEST_F(KeyboardTest, CtrlLeftDigit1) {
1185 tester.Responding(false);
1186
1187
1188
1189
1190 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1191 KeyStateChange{VK_LCONTROL, true, true},
1193 kWmResultZero)});
1194
1195 EXPECT_EQ(tester.key_calls.size(), 1);
1197 kPhysicalControlLeft, kLogicalControlLeft, "",
1198 kNotSynthesized);
1199 tester.clear_key_calls();
1200 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1201
1202
1203 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1205 .Build(kWmResultZero)});
1206
1207 EXPECT_EQ(tester.key_calls.size(), 1);
1209 kPhysicalDigit1, kLogicalDigit1, "", kNotSynthesized);
1210 tester.clear_key_calls();
1211 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1212
1213
1214 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1216 kWmResultZero)});
1217
1218 EXPECT_EQ(tester.key_calls.size(), 1);
1220 kPhysicalDigit1, kLogicalDigit1, "", kNotSynthesized);
1221 tester.clear_key_calls();
1222 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1223
1224
1225 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1226 KeyStateChange{VK_LCONTROL, false, true},
1228 kWmResultZero)});
1229
1230 EXPECT_EQ(tester.key_calls.size(), 1);
1232 kPhysicalControlLeft, kLogicalControlLeft, "",
1233 kNotSynthesized);
1234 tester.clear_key_calls();
1235 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1236}
1237
1238
1239
1240TEST_F(KeyboardTest, Digit1OnFrenchLayout) {
1242 tester.Responding(false);
1243
1244 tester.SetLayout(LayoutFrench);
1245
1246
1247 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1249 .Build(kWmResultZero),
1251 kWmResultZero)});
1252
1253 EXPECT_EQ(tester.key_calls.size(), 2);
1255 kPhysicalDigit1, kLogicalDigit1, "&", kNotSynthesized);
1257 tester.clear_key_calls();
1258 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1259
1260
1261 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1263 kWmResultZero)});
1264
1265 EXPECT_EQ(tester.key_calls.size(), 1);
1267 kPhysicalDigit1, kLogicalDigit1, "", kNotSynthesized);
1268 tester.clear_key_calls();
1269 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1270}
1271
1272
1273TEST_F(KeyboardTest, AltGrModifiedKey) {
1275 tester.Responding(false);
1276
1277
1278
1279
1280 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1281 KeyStateChange{VK_LCONTROL, true, true},
1283 kWmResultZero),
1284 KeyStateChange{VK_RMENU, true, true},
1286 kWmResultZero)});
1287
1288 EXPECT_EQ(tester.key_calls.size(), 2);
1290 kPhysicalControlLeft, kLogicalControlLeft, "",
1291 kNotSynthesized);
1293 kPhysicalAltRight, kLogicalAltRight, "",
1294 kNotSynthesized);
1295 tester.clear_key_calls();
1296 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1297
1298
1299 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1301 kWmResultZero),
1303 kWmResultZero)});
1304
1305 EXPECT_EQ(tester.key_calls.size(), 2);
1307 kPhysicalKeyQ, kLogicalKeyQ, "@", kNotSynthesized);
1309 tester.clear_key_calls();
1310 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1311
1312
1313 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1315 kWmResultZero)});
1316
1317 EXPECT_EQ(tester.key_calls.size(), 1);
1319 kPhysicalKeyQ, kLogicalKeyQ, "", kNotSynthesized);
1320 tester.clear_key_calls();
1321 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1322
1323
1324
1325
1326 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1327 KeyStateChange{VK_LCONTROL, false, true},
1328 ExpectForgedMessage{
1330 kWmResultZero)},
1331 KeyStateChange{VK_RMENU, false, true},
1333 kWmResultDefault)});
1334
1335 EXPECT_EQ(tester.key_calls.size(), 2);
1337 kPhysicalControlLeft, kLogicalControlLeft, "",
1338 kNotSynthesized);
1340 kPhysicalAltRight, kLogicalAltRight, "",
1341 kNotSynthesized);
1342 tester.clear_key_calls();
1343
1344 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1345}
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360TEST_F(KeyboardTest, AltGrTwice) {
1362 tester.Responding(false);
1363
1364
1365
1366
1367
1368 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1369 KeyStateChange{VK_LCONTROL, true, true},
1371 kWmResultZero),
1372 KeyStateChange{VK_RMENU, true, true},
1374 kWmResultZero)});
1375
1376 EXPECT_EQ(tester.key_calls.size(), 2);
1378 kPhysicalControlLeft, kLogicalControlLeft, "",
1379 kNotSynthesized);
1381 kPhysicalAltRight, kLogicalAltRight, "",
1382 kNotSynthesized);
1383 tester.clear_key_calls();
1384 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1385
1386
1387
1388
1389 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1390 KeyStateChange{VK_LCONTROL, false, true},
1391 ExpectForgedMessage{
1393 kWmResultZero)},
1394 KeyStateChange{VK_RMENU, false, true},
1396 kWmResultDefault)});
1397 EXPECT_EQ(tester.key_calls.size(), 2);
1399 kPhysicalControlLeft, kLogicalControlLeft, "",
1400 kNotSynthesized);
1402 kPhysicalAltRight, kLogicalAltRight, "",
1403 kNotSynthesized);
1404 tester.clear_key_calls();
1405
1406 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1407
1408
1409
1410 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1411 KeyStateChange{VK_LCONTROL, true, false},
1413 kWmResultZero),
1414 KeyStateChange{VK_RMENU, true, true},
1416 kWmResultZero)});
1417
1418 EXPECT_EQ(tester.key_calls.size(), 2);
1420 kPhysicalControlLeft, kLogicalControlLeft, "",
1421 kNotSynthesized);
1423 kPhysicalAltRight, kLogicalAltRight, "",
1424 kNotSynthesized);
1425 tester.clear_key_calls();
1426 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1427
1428
1429
1430
1431 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1432 KeyStateChange{VK_LCONTROL, false, false},
1433 ExpectForgedMessage{
1435 kWmResultZero)},
1436 KeyStateChange{VK_RMENU, false, false},
1438 kWmResultDefault)});
1439 EXPECT_EQ(tester.key_calls.size(), 2);
1441 kPhysicalControlLeft, kLogicalControlLeft, "",
1442 kNotSynthesized);
1444 kPhysicalAltRight, kLogicalAltRight, "",
1445 kNotSynthesized);
1446 tester.clear_key_calls();
1447
1448 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1449
1450
1451 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1453 kWmResultZero)});
1454 EXPECT_EQ(tester.key_calls.size(), 1);
1456 kNotSynthesized);
1457 tester.clear_key_calls();
1458 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
1459}
1460
1461
1462
1463TEST_F(KeyboardTest, DeadKeyThatCombines) {
1465 tester.Responding(false);
1466
1467 tester.SetLayout(LayoutFrench);
1468
1469
1470 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1472 kWmResultZero),
1474 kWmResultZero)});
1475
1476 EXPECT_EQ(tester.key_calls.size(), 1);
1478 kPhysicalBracketLeft, kLogicalBracketRight, "^",
1479 kNotSynthesized);
1480 tester.clear_key_calls();
1481 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1482
1483
1484 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1486 kWmResultZero)});
1487
1488 EXPECT_EQ(tester.key_calls.size(), 1);
1490 kPhysicalBracketLeft, kLogicalBracketRight, "",
1491 kNotSynthesized);
1492 tester.clear_key_calls();
1493 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1494
1495
1496 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1498 kWmResultZero),
1500 kWmResultZero)});
1501
1502 EXPECT_EQ(tester.key_calls.size(), 2);
1504 kPhysicalKeyE, kLogicalKeyE, "ê", kNotSynthesized);
1506 tester.clear_key_calls();
1507 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1508
1509
1510 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1512 kWmResultZero)});
1513
1514 EXPECT_EQ(tester.key_calls.size(), 1);
1516 kPhysicalKeyE, kLogicalKeyE, "", kNotSynthesized);
1517 tester.clear_key_calls();
1518 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1519}
1520
1521
1522
1523
1524
1525
1526TEST_F(KeyboardTest, DeadKeyWithoutDeadMaskThatCombines) {
1528 tester.Responding(false);
1529
1530
1531 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1532 KeyStateChange{VK_LSHIFT, true, true},
1534 kWmResultZero)});
1535
1536 EXPECT_EQ(tester.key_calls.size(), 1);
1538 kPhysicalShiftLeft, kLogicalShiftLeft, "",
1539 kNotSynthesized);
1540 tester.clear_key_calls();
1541 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1542
1543
1544 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1546 kWmResultZero),
1548 kWmResultZero)});
1549
1550 EXPECT_EQ(tester.key_calls.size(), 1);
1552 kPhysicalDigit6, kLogicalDigit6, "6", kNotSynthesized);
1553 tester.clear_key_calls();
1554 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1555
1556
1557 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1559
1560 EXPECT_EQ(tester.key_calls.size(), 1);
1562 kPhysicalDigit6, kLogicalDigit6, "", kNotSynthesized);
1563 tester.clear_key_calls();
1564 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1565
1566
1567 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1568 KeyStateChange{VK_LSHIFT, false, true},
1570 kWmResultZero)});
1571
1572 EXPECT_EQ(tester.key_calls.size(), 1);
1574 kPhysicalShiftLeft, kLogicalShiftLeft, "",
1575 kNotSynthesized);
1576 tester.clear_key_calls();
1577 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1578
1579
1580 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1582 kWmResultZero),
1584 kWmResultZero)});
1585
1586 EXPECT_EQ(tester.key_calls.size(), 2);
1588 kPhysicalKeyE, kLogicalKeyE, "ê", kNotSynthesized);
1590 tester.clear_key_calls();
1591 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1592
1593
1594 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1596 kWmResultZero)});
1597
1598 EXPECT_EQ(tester.key_calls.size(), 1);
1600 kPhysicalKeyE, kLogicalKeyE, "", kNotSynthesized);
1601 tester.clear_key_calls();
1602 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1603}
1604
1605
1606
1607TEST_F(KeyboardTest, DeadKeyThatDoesNotCombine) {
1609 tester.Responding(false);
1610
1611 tester.SetLayout(LayoutFrench);
1612
1613
1614 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1616 kWmResultZero),
1618 kWmResultZero)});
1619
1620 EXPECT_EQ(tester.key_calls.size(), 1);
1622 kPhysicalBracketLeft, kLogicalBracketRight, "^",
1623 kNotSynthesized);
1624 tester.clear_key_calls();
1625 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1626
1627
1628 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1630 kWmResultZero)});
1631
1632 EXPECT_EQ(tester.key_calls.size(), 1);
1634 kPhysicalBracketLeft, kLogicalBracketRight, "",
1635 kNotSynthesized);
1636 tester.clear_key_calls();
1637 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1638
1639
1640 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1642 .Build(kWmResultZero),
1644 kWmResultZero),
1646 kWmResultZero)});
1647
1648 EXPECT_EQ(tester.key_calls.size(), 3);
1650 kPhysicalDigit1, kLogicalDigit1, "^", kNotSynthesized);
1653 tester.clear_key_calls();
1654
1655
1656
1657
1658
1659 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1660
1661
1662 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1664 kWmResultZero)});
1665
1666 EXPECT_EQ(tester.key_calls.size(), 1);
1668 kPhysicalDigit1, kLogicalDigit1, "", kNotSynthesized);
1669 tester.clear_key_calls();
1670 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1671}
1672
1673
1674
1675
1676TEST_F(KeyboardTest, DeadKeyTwiceThenLetter) {
1678 tester.Responding(false);
1679
1680
1681
1682
1683 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1685 kWmResultZero),
1687 kWmResultZero)});
1688
1689 EXPECT_EQ(tester.key_calls.size(), 1);
1691 kPhysicalBackquote, kLogicalBackquote, "`",
1692 kNotSynthesized);
1693 tester.clear_key_calls();
1694 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1695
1696
1697 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1699 kWmResultZero)});
1700
1701 EXPECT_EQ(tester.key_calls.size(), 1);
1703 kPhysicalBackquote, kLogicalBackquote, "",
1704 kNotSynthesized);
1705 tester.clear_key_calls();
1706 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1707
1708
1709
1710 std::vector<MockKeyResponseController::ResponseCallback> recorded_callbacks;
1711 tester.LateResponding(
1712 [&recorded_callbacks](
1714 MockKeyResponseController::ResponseCallback
callback) {
1715 recorded_callbacks.push_back(
callback);
1716 });
1717
1718 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1720 kWmResultZero),
1723 .Build(kWmResultZero),
1725 kWmResultZero)});
1726
1727 EXPECT_EQ(recorded_callbacks.size(), 1);
1728 EXPECT_EQ(tester.key_calls.size(), 1);
1730 kPhysicalBackquote, kLogicalBackquote, "`",
1731 kNotSynthesized);
1732 tester.clear_key_calls();
1733
1734 recorded_callbacks.front()(false);
1735 EXPECT_EQ(tester.key_calls.size(), 2);
1738 tester.clear_key_calls();
1739
1740
1741
1742 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1743
1744 tester.Responding(false);
1745
1746
1747 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1749 kWmResultZero)});
1750
1751 EXPECT_EQ(tester.key_calls.size(), 1);
1753 kPhysicalBackquote, kLogicalBackquote, "",
1754 kNotSynthesized);
1755 tester.clear_key_calls();
1756 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1757}
1758
1759
1760TEST_F(KeyboardTest, MultibyteCharacter) {
1762 tester.Responding(false);
1763
1764
1765
1766
1767
1768 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1770 kWmResultZero),
1772 kWmResultZero),
1774 kWmResultZero)});
1775
1776 const char* st = tester.key_calls[0].key_event.character;
1777
1778 EXPECT_EQ(tester.key_calls.size(), 2);
1780 kPhysicalKeyW, kLogicalKeyW, "𐍅", kNotSynthesized);
1782 tester.clear_key_calls();
1783 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 3);
1784
1785
1786 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1788 kWmResultZero)});
1789
1790 EXPECT_EQ(tester.key_calls.size(), 1);
1792 kPhysicalKeyW, kLogicalKeyW, "", kNotSynthesized);
1793 tester.clear_key_calls();
1794 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1795}
1796
1797TEST_F(KeyboardTest, SynthesizeModifiers) {
1799 tester.Responding(false);
1800
1801
1802 Win32Message event1 =
1804 kWmResultZero);
1805 Win32Message event2 =
1807 kWmResultZero);
1808
1809
1810 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1811 KeyStateChange{VK_LSHIFT, true, true}, event1});
1812 EXPECT_EQ(tester.key_calls.size(), 2);
1814 kPhysicalShiftLeft, kLogicalShiftLeft, "", kSynthesized);
1815 tester.clear_key_calls();
1816 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1817
1818 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1819 KeyStateChange{VK_LSHIFT, false, true}, event2});
1820 EXPECT_EQ(tester.key_calls.size(), 2);
1822 kPhysicalShiftLeft, kLogicalShiftLeft, "", kSynthesized);
1823 tester.clear_key_calls();
1824 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1825
1826
1827 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1828 KeyStateChange{VK_RSHIFT, true, true}, event1});
1829 EXPECT_EQ(tester.key_calls.size(), 2);
1831 kPhysicalShiftRight, kLogicalShiftRight, "",
1832 kSynthesized);
1833 tester.clear_key_calls();
1834 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1835
1836 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1837 KeyStateChange{VK_RSHIFT, false, true}, event2});
1838 EXPECT_EQ(tester.key_calls.size(), 2);
1840 kPhysicalShiftRight, kLogicalShiftRight, "",
1841 kSynthesized);
1842 tester.clear_key_calls();
1843 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1844
1845
1846 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1847 KeyStateChange{VK_LCONTROL, true, true}, event1});
1848 EXPECT_EQ(tester.key_calls.size(), 2);
1850 kPhysicalControlLeft, kLogicalControlLeft, "",
1851 kSynthesized);
1852 tester.clear_key_calls();
1853 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1854
1855 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1856 KeyStateChange{VK_LCONTROL, false, true}, event2});
1857 EXPECT_EQ(tester.key_calls.size(), 2);
1859 kPhysicalControlLeft, kLogicalControlLeft, "",
1860 kSynthesized);
1861 tester.clear_key_calls();
1862 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1863
1864
1865 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1866 KeyStateChange{VK_RCONTROL, true, true}, event1});
1867 EXPECT_EQ(tester.key_calls.size(), 2);
1869 kPhysicalControlRight, kLogicalControlRight, "",
1870 kSynthesized);
1871 tester.clear_key_calls();
1872 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1873
1874 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1875 KeyStateChange{VK_RCONTROL, false, true}, event2});
1876 EXPECT_EQ(tester.key_calls.size(), 2);
1878 kPhysicalControlRight, kLogicalControlRight, "",
1879 kSynthesized);
1880 tester.clear_key_calls();
1881 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1882
1883
1884 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1885 KeyStateChange{VK_LMENU, true, true}, event1});
1886 EXPECT_EQ(tester.key_calls.size(), 2);
1888 kPhysicalAltLeft, kLogicalAltLeft, "", kSynthesized);
1889 tester.clear_key_calls();
1890 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1891
1892 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1893 KeyStateChange{VK_LMENU, false, true}, event2});
1894 EXPECT_EQ(tester.key_calls.size(), 2);
1896 kPhysicalAltLeft, kLogicalAltLeft, "", kSynthesized);
1897 tester.clear_key_calls();
1898 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1899
1900
1901 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1902 KeyStateChange{VK_RMENU, true, true}, event1});
1903 EXPECT_EQ(tester.key_calls.size(), 2);
1905 kPhysicalAltRight, kLogicalAltRight, "", kSynthesized);
1906 tester.clear_key_calls();
1907 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1908
1909 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1910 KeyStateChange{VK_RMENU, false, true}, event2});
1911 EXPECT_EQ(tester.key_calls.size(), 2);
1913 kPhysicalAltRight, kLogicalAltRight, "", kSynthesized);
1914 tester.clear_key_calls();
1915 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1916
1917
1918 tester.InjectKeyboardChanges(
1919 std::vector<KeyboardChange>{KeyStateChange{VK_LWIN, true, true}, event1});
1920 EXPECT_EQ(tester.key_calls.size(), 2);
1922 kPhysicalMetaLeft, kLogicalMetaLeft, "", kSynthesized);
1923 tester.clear_key_calls();
1924 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1925
1926 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1927 KeyStateChange{VK_LWIN, false, true}, event2});
1928 EXPECT_EQ(tester.key_calls.size(), 2);
1930 kPhysicalMetaLeft, kLogicalMetaLeft, "", kSynthesized);
1931 tester.clear_key_calls();
1932 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1933
1934
1935 tester.InjectKeyboardChanges(
1936 std::vector<KeyboardChange>{KeyStateChange{VK_RWIN, true, true}, event1});
1937 EXPECT_EQ(tester.key_calls.size(), 2);
1939 kPhysicalMetaRight, kLogicalMetaRight, "", kSynthesized);
1940 tester.clear_key_calls();
1941 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1942
1943 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1944 KeyStateChange{VK_RWIN, false, true}, event2});
1945 EXPECT_EQ(tester.key_calls.size(), 2);
1947 kPhysicalMetaRight, kLogicalMetaRight, "", kSynthesized);
1948 tester.clear_key_calls();
1949 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1950
1951
1952
1953 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1954 KeyStateChange{VK_CAPITAL, false, true}, event1});
1955 EXPECT_EQ(tester.key_calls.size(), 3);
1957 kPhysicalCapsLock, kLogicalCapsLock, "", kSynthesized);
1959 kPhysicalCapsLock, kLogicalCapsLock, "", kSynthesized);
1960 tester.clear_key_calls();
1961 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1962
1963 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1964 KeyStateChange{VK_CAPITAL, false, false}, event2});
1965 EXPECT_EQ(tester.key_calls.size(), 3);
1967 kPhysicalCapsLock, kLogicalCapsLock, "", kSynthesized);
1969 kPhysicalCapsLock, kLogicalCapsLock, "", kSynthesized);
1970 tester.clear_key_calls();
1971 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1972
1973
1974 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1975 KeyStateChange{VK_SCROLL, true, true}, event1});
1976 EXPECT_EQ(tester.key_calls.size(), 2);
1978 kPhysicalScrollLock, kLogicalScrollLock, "",
1979 kSynthesized);
1980 tester.clear_key_calls();
1981 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1982
1983 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1984 KeyStateChange{VK_SCROLL, true, false}, event2});
1985 EXPECT_EQ(tester.key_calls.size(), 3);
1987 kPhysicalScrollLock, kLogicalScrollLock, "",
1988 kSynthesized);
1990 kPhysicalScrollLock, kLogicalScrollLock, "",
1991 kSynthesized);
1992 tester.clear_key_calls();
1993 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1994
1995
1996 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1997 KeyStateChange{VK_NUMLOCK, true, false}, event1});
1998
1999
2000
2001
2002 EXPECT_EQ(tester.key_calls.size(), 2);
2004 kPhysicalNumLock, kLogicalNumLock, "", kSynthesized);
2005 tester.clear_key_calls();
2006 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
2007
2008 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2009 KeyStateChange{VK_NUMLOCK, false, true}, event2});
2010 EXPECT_EQ(tester.key_calls.size(), 4);
2012 kPhysicalNumLock, kLogicalNumLock, "", kSynthesized);
2014 kPhysicalNumLock, kLogicalNumLock, "", kSynthesized);
2016 kPhysicalNumLock, kLogicalNumLock, "", kSynthesized);
2017 tester.clear_key_calls();
2018 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
2019}
2020
2021
2022
2023
2024
2025TEST_F(KeyboardTest, ImeExtendedEventsAreIgnored) {
2027 tester.Responding(false);
2028
2029
2030
2031
2032
2033
2034
2035 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2036 KeyStateChange{VK_RCONTROL, true, false},
2038 kWmResultZero)});
2039
2040 EXPECT_EQ(tester.key_calls.size(), 1);
2042 kNotSynthesized);
2043 tester.clear_key_calls();
2044 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
2045}
2046
2047
2048
2049
2050
2051
2052
2053TEST_F(KeyboardTest, UpOnlyImeEventsAreCorrectlyHandled) {
2055 tester.Responding(true);
2056
2057
2058
2059
2060 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2061 KeyStateChange{VK_LSHIFT, true, false},
2063 kWmResultZero),
2065 kWmResultZero),
2066 KeyStateChange{VK_LSHIFT, false, true},
2068 kWmResultZero),
2070 kWmResultZero)});
2071
2072 EXPECT_EQ(tester.key_calls.size(), 4);
2074 kPhysicalShiftLeft, kLogicalShiftLeft, "",
2075 kNotSynthesized);
2077 kNotSynthesized);
2079 kPhysicalShiftLeft, kLogicalShiftLeft, "",
2080 kNotSynthesized);
2082 kNotSynthesized);
2083 tester.clear_key_calls();
2084}
2085
2086
2087
2088
2089
2090
2091
2092TEST_F(KeyboardTest, SlowFrameworkResponse) {
2094
2095 std::vector<MockKeyResponseController::ResponseCallback> recorded_callbacks;
2096
2097
2098 tester.LateResponding(
2099 [&recorded_callbacks](
2101 MockKeyResponseController::ResponseCallback
callback) {
2102 recorded_callbacks.push_back(
callback);
2103 });
2104
2105
2106 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2108 kWmResultZero),
2110 kWmResultZero)});
2111
2112
2113 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2115 kWmResultZero),
2117 kWmResultZero)});
2118
2119 EXPECT_EQ(tester.key_calls.size(), 1);
2121 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
2122 EXPECT_EQ(recorded_callbacks.size(), 1);
2123 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
2124
2125
2126 recorded_callbacks.front()(false);
2127
2128 EXPECT_EQ(tester.key_calls.size(), 3);
2129 EXPECT_EQ(recorded_callbacks.size(), 2);
2132 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
2133 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
2134
2135
2136 recorded_callbacks.back()(false);
2137
2138 EXPECT_EQ(tester.key_calls.size(), 4);
2140 tester.clear_key_calls();
2141 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
2142}
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155TEST_F(KeyboardTest, SlowFrameworkResponseForIdenticalEvents) {
2157 std::vector<MockKeyResponseController::ResponseCallback> recorded_callbacks;
2158
2159
2160 tester.LateResponding(
2161 [&recorded_callbacks](
2163 MockKeyResponseController::ResponseCallback
callback) {
2164 recorded_callbacks.push_back(
callback);
2165 });
2166
2167
2168 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2170 kWmResultZero),
2172 kWmResultZero)});
2173
2174 EXPECT_EQ(tester.key_calls.size(), 1);
2176 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
2177 tester.clear_key_calls();
2178 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
2179
2180
2181 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2183 kWmResultZero)});
2184
2185 EXPECT_EQ(tester.key_calls.size(), 0);
2186 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
2187
2188
2189 EXPECT_EQ(recorded_callbacks.size(), 1);
2190 recorded_callbacks.front()(false);
2191
2192 EXPECT_EQ(tester.key_calls.size(), 2);
2195 kPhysicalKeyA, kLogicalKeyA, "", kNotSynthesized);
2196 tester.clear_key_calls();
2197 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
2198
2199
2200 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2202 kWmResultZero),
2204 kWmResultZero)});
2205
2206
2207
2208 EXPECT_EQ(recorded_callbacks.size(), 2);
2209 EXPECT_EQ(tester.key_calls.size(), 0);
2210 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
2211
2212
2213
2214 recorded_callbacks.back()(false);
2215 EXPECT_EQ(tester.key_calls.size(), 1);
2217 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
2218 tester.clear_key_calls();
2219 EXPECT_EQ(recorded_callbacks.size(), 3);
2220 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
2221
2222
2223 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2225 kWmResultZero)});
2226
2227 EXPECT_EQ(tester.key_calls.size(), 0);
2228 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
2229}
2230
2231TEST_F(KeyboardTest, TextInputSubmit) {
2233 tester.Responding(false);
2234
2235
2236
2237 tester.InjectPlatformMessage(
2238 "flutter/textinput", "TextInput.setClient",
2239 R"|([108, {"inputAction": "TextInputAction.none", "viewId": 0}])|");
2240
2241
2242 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2244 kWmResultZero),
2246 kWmResultZero)});
2247
2248 EXPECT_EQ(tester.key_calls.size(), 2);
2250 kPhysicalEnter, kLogicalEnter, "", kNotSynthesized);
2252 tester.key_calls[1],
2253 "{"
2254 R"|("method":"TextInputClient.performAction",)|"
2255 R"|("args":[108,"TextInputAction.none"])|"
2256 "}");
2257 tester.clear_key_calls();
2258 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
2259
2260
2261 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2263 kWmResultZero)});
2264
2265 EXPECT_EQ(tester.key_calls.size(), 1);
2267 kPhysicalEnter, kLogicalEnter, "", kNotSynthesized);
2268 tester.clear_key_calls();
2269 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
2270
2271
2272
2273
2274
2275
2276 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2278 kWmResultZero),
2280 kWmResultZero)});
2281
2282 EXPECT_EQ(tester.key_calls.size(), 2);
2284 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
2286 tester.clear_key_calls();
2287
2288
2289 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2291 kWmResultZero)});
2292
2293 EXPECT_EQ(tester.key_calls.size(), 1);
2295 kPhysicalKeyA, kLogicalKeyA, "", kNotSynthesized);
2296 tester.clear_key_calls();
2297}
2298
2299TEST_F(KeyboardTest, VietnameseTelexAddDiacriticWithFastResponse) {
2300
2301
2302
2303
2304
2305
2306
2307
2308
2310 tester.Responding(false);
2311
2312
2313
2314
2315 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2317 kWmResultZero),
2319 kWmResultZero)});
2320
2321 EXPECT_EQ(tester.key_calls.size(), 2);
2323 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
2325 tester.clear_key_calls();
2326 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
2327
2328
2329 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2331 kWmResultZero)});
2332
2333 EXPECT_EQ(tester.key_calls.size(), 1);
2335 kPhysicalKeyA, kLogicalKeyA, "", kNotSynthesized);
2336 tester.clear_key_calls();
2337 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
2338
2339
2340
2341
2342 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2344 kWmResultZero),
2346 kWmResultZero),
2347 WmKeyUpInfo{VK_BACK, kScanCodeBackspace,
kNotExtended}.Build(
2348 kWmResultZero),
2351 WmKeyUpInfo{VK_PACKET, 0,
kNotExtended}.Build(kWmResultDefault)});
2352
2353 EXPECT_EQ(tester.key_calls.size(), 3);
2355 kPhysicalBackspace, kLogicalBackspace, "",
2356 kNotSynthesized);
2358 kPhysicalBackspace, kLogicalBackspace, "",
2359 kNotSynthesized);
2361 tester.clear_key_calls();
2362
2363
2364
2365
2366
2367 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 3);
2368
2369
2370 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2372 true}
2373 .Build(kWmResultZero)});
2374
2375 EXPECT_EQ(tester.key_calls.size(), 1);
2377 kNotSynthesized);
2378 tester.clear_key_calls();
2379 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
2380}
2381
2383 bool backspace_response) {
2384
2385
2386
2387
2388
2389
2390
2391
2392
2394 tester.Responding(false);
2395
2396
2397
2398
2399 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2401 kWmResultZero),
2403 kWmResultZero)});
2404
2405 EXPECT_EQ(tester.key_calls.size(), 2);
2407 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
2409 tester.clear_key_calls();
2410 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
2411
2412
2413 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2415 kWmResultZero)});
2416
2417 EXPECT_EQ(tester.key_calls.size(), 1);
2419 kPhysicalKeyA, kLogicalKeyA, "", kNotSynthesized);
2420 tester.clear_key_calls();
2421 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
2422
2423 std::vector<MockKeyResponseController::ResponseCallback> recorded_callbacks;
2424 tester.LateResponding(
2425 [&recorded_callbacks](
2427 MockKeyResponseController::ResponseCallback
callback) {
2428 recorded_callbacks.push_back(
callback);
2429 });
2430
2431
2432
2433
2434 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2436 kWmResultZero),
2438 kWmResultZero),
2439 WmKeyUpInfo{VK_BACK, kScanCodeBackspace,
kNotExtended}.Build(
2440 kWmResultZero),
2443 WmKeyUpInfo{VK_PACKET, 0,
kNotExtended}.Build(kWmResultDefault)});
2444
2445
2446
2447
2448
2449
2450 EXPECT_EQ(tester.key_calls.size(), 1);
2452 kPhysicalBackspace, kLogicalBackspace, "",
2453 kNotSynthesized);
2454 tester.clear_key_calls();
2455 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
2456
2457 EXPECT_EQ(recorded_callbacks.size(), 1);
2458 recorded_callbacks[0](backspace_response);
2459
2460 EXPECT_EQ(tester.key_calls.size(), 1);
2462 kPhysicalBackspace, kLogicalBackspace, "",
2463 kNotSynthesized);
2464 tester.clear_key_calls();
2465 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(),
2466 backspace_response ? 0 : 2);
2467
2468 recorded_callbacks[1](false);
2469 EXPECT_EQ(tester.key_calls.size(), 1);
2471 tester.clear_key_calls();
2472 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
2473
2474 tester.Responding(false);
2475
2476
2477 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2479 true}
2480 .Build(kWmResultZero)});
2481
2482 EXPECT_EQ(tester.key_calls.size(), 1);
2484 kNotSynthesized);
2485 tester.clear_key_calls();
2486 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
2487}
2488
2489TEST_F(KeyboardTest, VietnameseTelexAddDiacriticWithSlowFalseResponse) {
2491}
2492
2493TEST_F(KeyboardTest, VietnameseTelexAddDiacriticWithSlowTrueResponse) {
2495}
2496
2497
2498
2499TEST_F(KeyboardTest, DoubleCapsLock) {
2501 tester.Responding(false);
2502
2503 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2506
2507 tester.clear_key_calls();
2508}
2509
2510}
2511}
TEST_F(FlutterDisplayLinkTest, ViewAddedToWindowFirst)
@ kFlutterKeyEventTypeDown
@ kFlutterKeyEventTypeRepeat
FlutterDesktopBinaryReply callback
#define EXPECT_CALL_IS_TEXT(_key_call, u16_string)
#define EXPECT_CALL_IS_TEXT_METHOD_CALL(_key_call, json_string)
#define EXPECT_CALL_IS_EVENT(_key_call, _type, _physical, _logical, _character, _synthesized)
constexpr uint64_t kScanCodeKeyA
struct flutter::testing::WmKeyDownInfo WmKeyDownInfo
struct flutter::testing::WmSysKeyUpInfo WmSysKeyUpInfo
struct flutter::testing::WmKeyUpInfo WmKeyUpInfo
constexpr uint64_t kVirtualKeyA
struct flutter::testing::WmSysKeyDownInfo WmSysKeyDownInfo
void VietnameseTelexAddDiacriticWithSlowResponse(WindowsTestContext &context, bool backspace_response)
constexpr int kScanCodeShiftRight
constexpr int kScanCodeShiftLeft