571 {
573 tester.Responding(true);
574
575
576
577
578 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
580 kWmResultZero),
582 kWmResultZero)});
583
584 EXPECT_EQ(tester.key_calls.size(), 1);
586 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
587 tester.clear_key_calls();
588 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
589
590
591 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
593 kWmResultZero)});
594
595 EXPECT_EQ(tester.key_calls.size(), 1);
597 kPhysicalKeyA, kLogicalKeyA, "", kNotSynthesized);
598 tester.clear_key_calls();
599 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
600}
601
602TEST_F(KeyboardTest, LowerCaseAUnhandled) {
604 tester.Responding(false);
605
606
607
608
609 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
611 kWmResultZero),
613 kWmResultZero)});
614
615 EXPECT_EQ(tester.key_calls.size(), 2);
617 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
619 tester.clear_key_calls();
620 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
621
622
623 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
625 kWmResultZero)});
626
627 EXPECT_EQ(tester.key_calls.size(), 1);
629 kPhysicalKeyA, kLogicalKeyA, "", kNotSynthesized);
630 tester.clear_key_calls();
631 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
632}
633
634TEST_F(KeyboardTest, ArrowLeftHandled) {
636 tester.Responding(true);
637
638
639
640
641 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
643 kWmResultZero)});
644
645 EXPECT_EQ(tester.key_calls.size(), 1);
647 kPhysicalArrowLeft, kLogicalArrowLeft, "",
648 kNotSynthesized);
649 tester.clear_key_calls();
650 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
651
652
653 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
655 kWmResultZero)});
656
657 EXPECT_EQ(tester.key_calls.size(), 1);
659 kPhysicalArrowLeft, kLogicalArrowLeft, "",
660 kNotSynthesized);
661 tester.clear_key_calls();
662 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
663}
664
665TEST_F(KeyboardTest, ArrowLeftUnhandled) {
667 tester.Responding(false);
668
669
670
671
672 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
674 kWmResultZero)});
675
676 EXPECT_EQ(tester.key_calls.size(), 1);
678 kPhysicalArrowLeft, kLogicalArrowLeft, "",
679 kNotSynthesized);
680 tester.clear_key_calls();
681 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
682
683
684 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
686 kWmResultZero)});
687
688 EXPECT_EQ(tester.key_calls.size(), 1);
690 kPhysicalArrowLeft, kLogicalArrowLeft, "",
691 kNotSynthesized);
692 tester.clear_key_calls();
693 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
694}
695
696TEST_F(KeyboardTest, ShiftLeftUnhandled) {
698 tester.Responding(false);
699
700
701
702
703 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
704 KeyStateChange{VK_LSHIFT, true, false},
706 kWmResultZero)});
707
708 EXPECT_EQ(tester.key_calls.size(), 1);
710 kPhysicalShiftLeft, kLogicalShiftLeft, "",
711 kNotSynthesized);
712 tester.clear_key_calls();
713 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
714
715
716 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
718 kWmResultZero)});
719
720 EXPECT_EQ(tester.key_calls.size(), 1);
722 kPhysicalShiftLeft, kLogicalShiftLeft, "",
723 kNotSynthesized);
724 tester.clear_key_calls();
725 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
726
727
728 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
729 KeyStateChange{VK_LSHIFT, false, true},
731 kWmResultZero)});
732
733 EXPECT_EQ(tester.key_calls.size(), 1);
735 kPhysicalShiftLeft, kLogicalShiftLeft, "",
736 kNotSynthesized);
737 tester.clear_key_calls();
738 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
739}
740
741TEST_F(KeyboardTest, ShiftRightUnhandled) {
743 tester.Responding(false);
744
745
746
747
748 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
749 KeyStateChange{VK_RSHIFT, true, false},
751 kWmResultZero)});
752
753 EXPECT_EQ(tester.key_calls.size(), 1);
755 kPhysicalShiftRight, kLogicalShiftRight, "",
756 kNotSynthesized);
757 tester.clear_key_calls();
758 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
759
760
761 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
762 KeyStateChange{VK_RSHIFT, false, true},
764 kWmResultZero)});
765
766 EXPECT_EQ(tester.key_calls.size(), 1);
768 kPhysicalShiftRight, kLogicalShiftRight, "",
769 kNotSynthesized);
770 tester.clear_key_calls();
771 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
772}
773
774TEST_F(KeyboardTest, CtrlLeftUnhandled) {
776 tester.Responding(false);
777
778
779
780
781 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
782 KeyStateChange{VK_LCONTROL, true, false},
784 kWmResultZero)});
785
786 EXPECT_EQ(tester.key_calls.size(), 1);
788 kPhysicalControlLeft, kLogicalControlLeft, "",
789 kNotSynthesized);
790 tester.clear_key_calls();
791 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
792
793
794 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
795 KeyStateChange{VK_LCONTROL, false, true},
797 kWmResultZero)});
798
799 EXPECT_EQ(tester.key_calls.size(), 1);
801 kPhysicalControlLeft, kLogicalControlLeft, "",
802 kNotSynthesized);
803 tester.clear_key_calls();
804 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
805}
806
807TEST_F(KeyboardTest, CtrlRightUnhandled) {
809 tester.Responding(false);
810
811
812
813
814 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
815 KeyStateChange{VK_RCONTROL, true, false},
817 kWmResultZero)});
818
819 EXPECT_EQ(tester.key_calls.size(), 1);
821 kPhysicalControlRight, kLogicalControlRight, "",
822 kNotSynthesized);
823 tester.clear_key_calls();
824 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
825
826
827 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
828 KeyStateChange{VK_RCONTROL, false, true},
830 kWmResultZero)});
831
832 EXPECT_EQ(tester.key_calls.size(), 1);
834 kPhysicalControlRight, kLogicalControlRight, "",
835 kNotSynthesized);
836 tester.clear_key_calls();
837 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
838}
839
840TEST_F(KeyboardTest, AltLeftUnhandled) {
842 tester.Responding(false);
843
844
845
846
847 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
848 KeyStateChange{VK_LMENU, true, false},
850 kWmResultDefault)});
851
852 EXPECT_EQ(tester.key_calls.size(), 1);
854 kPhysicalAltLeft, kLogicalAltLeft, "", kNotSynthesized);
855 tester.clear_key_calls();
856
857 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
858
859
860 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
861 KeyStateChange{VK_LMENU, false, true},
863 kWmResultDefault)});
864
865 EXPECT_EQ(tester.key_calls.size(), 1);
867 kPhysicalAltLeft, kLogicalAltLeft, "", kNotSynthesized);
868 tester.clear_key_calls();
869
870 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
871}
872
873TEST_F(KeyboardTest, AltRightUnhandled) {
875 tester.Responding(false);
876
877
878
879
880 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
881 KeyStateChange{VK_RMENU, true, false},
883 kWmResultDefault)});
884
885 EXPECT_EQ(tester.key_calls.size(), 1);
887 kPhysicalAltRight, kLogicalAltRight, "",
888 kNotSynthesized);
889 tester.clear_key_calls();
890
891 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
892
893
894 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
895 KeyStateChange{VK_RMENU, false, true},
897 kWmResultDefault)});
898
899 EXPECT_EQ(tester.key_calls.size(), 1);
901 kPhysicalAltRight, kLogicalAltRight, "",
902 kNotSynthesized);
903 tester.clear_key_calls();
904
905 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
906}
907
908TEST_F(KeyboardTest, MetaLeftUnhandled) {
910 tester.Responding(false);
911
912
913
914
915 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
916 KeyStateChange{VK_LWIN, true, false},
918 kWmResultZero)});
919
920 EXPECT_EQ(tester.key_calls.size(), 1);
922 kPhysicalMetaLeft, kLogicalMetaLeft, "",
923 kNotSynthesized);
924 tester.clear_key_calls();
925 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
926
927
928 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
929 KeyStateChange{VK_LWIN, false, true},
931
932 EXPECT_EQ(tester.key_calls.size(), 1);
934 kPhysicalMetaLeft, kLogicalMetaLeft, "",
935 kNotSynthesized);
936 tester.clear_key_calls();
937 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
938}
939
940TEST_F(KeyboardTest, MetaRightUnhandled) {
942 tester.Responding(false);
943
944
945
946
947 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
948 KeyStateChange{VK_RWIN, true, false},
950 kWmResultZero)});
951
952 EXPECT_EQ(tester.key_calls.size(), 1);
954 kPhysicalMetaRight, kLogicalMetaRight, "",
955 kNotSynthesized);
956 tester.clear_key_calls();
957 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
958
959
960 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
961 KeyStateChange{VK_RWIN, false, true},
963 kWmResultZero)});
964
965 EXPECT_EQ(tester.key_calls.size(), 1);
967 kPhysicalMetaRight, kLogicalMetaRight, "",
968 kNotSynthesized);
969 tester.clear_key_calls();
970 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
971}
972
973
974TEST_F(KeyboardTest, RepeatA) {
976 tester.Responding(true);
977
978
979 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
981 kWmResultZero),
983 kWmResultZero)});
984
985
986 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
988 kWmResultZero),
990 kWmResultZero)});
991
992 EXPECT_EQ(tester.key_calls.size(), 2);
994 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
996 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
997 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
998}
999
1000
1001
1002
1003TEST_F(KeyboardTest, RestartClearsKeyboardState) {
1005 tester.Responding(true);
1006
1007
1008 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1010 kWmResultZero),
1012 kWmResultZero)});
1013
1014
1015 tester.ResetKeyboard();
1016
1017
1018
1019 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1021 kWmResultZero),
1023 kWmResultZero)});
1024
1025 EXPECT_EQ(tester.key_calls.size(), 2);
1027 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
1029 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
1030 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
1031}
1032
1033
1034
1035TEST_F(KeyboardTest, FreshKeyDownAfterMissedUpIsDelivered) {
1037 tester.Responding(true);
1038
1039 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1041 kWmResultZero)});
1042
1043 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1045 kWmResultZero)});
1046
1047 ASSERT_EQ(tester.key_calls.size(), 3u);
1049 kPhysicalEnter, kLogicalEnter, "", kNotSynthesized);
1051 kPhysicalEnter, kLogicalEnter, "", kSynthesized);
1053 kPhysicalEnter, kLogicalEnter, "", kNotSynthesized);
1054 tester.clear_key_calls();
1055
1056 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1058 kWmResultZero)});
1059
1060 ASSERT_EQ(tester.key_calls.size(), 1u);
1062 kPhysicalEnter, kLogicalEnter, "", kNotSynthesized);
1063 tester.clear_key_calls();
1064 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0u);
1065}
1066
1067
1068
1069TEST_F(KeyboardTest, ShiftLeftKeyA) {
1071 tester.Responding(false);
1072
1073
1074
1075
1076 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1077 KeyStateChange{VK_LSHIFT, true, true},
1079 kWmResultZero)});
1080
1081 EXPECT_EQ(tester.key_calls.size(), 1);
1083 kPhysicalShiftLeft, kLogicalShiftLeft, "",
1084 kNotSynthesized);
1085 tester.clear_key_calls();
1086 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1087
1088
1089 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1091 kWmResultZero),
1093 kWmResultZero)});
1094
1095 EXPECT_EQ(tester.key_calls.size(), 2);
1097 kPhysicalKeyA, kLogicalKeyA, "A", kNotSynthesized);
1099 tester.clear_key_calls();
1100 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1101
1102
1103 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1104 KeyStateChange{VK_LSHIFT, false, true},
1106 kWmResultZero)});
1107
1108 EXPECT_EQ(tester.key_calls.size(), 1);
1110 kPhysicalShiftLeft, kLogicalShiftLeft, "",
1111 kNotSynthesized);
1112 tester.clear_key_calls();
1113 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1114
1115
1116 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1118 kWmResultZero)});
1119
1120 EXPECT_EQ(tester.key_calls.size(), 1);
1122 kPhysicalKeyA, kLogicalKeyA, "", kNotSynthesized);
1123 tester.clear_key_calls();
1124 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1125}
1126
1127
1128
1129TEST_F(KeyboardTest, CtrlLeftKeyA) {
1131 tester.Responding(false);
1132
1133
1134
1135
1136 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1137 KeyStateChange{VK_LCONTROL, true, true},
1139 kWmResultZero)});
1140
1141 EXPECT_EQ(tester.key_calls.size(), 1);
1143 kPhysicalControlLeft, kLogicalControlLeft, "",
1144 kNotSynthesized);
1145 tester.clear_key_calls();
1146 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1147
1148
1149 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1151 kWmResultZero),
1153 kWmResultZero)});
1154
1155 EXPECT_EQ(tester.key_calls.size(), 1);
1157 kPhysicalKeyA, kLogicalKeyA, "", kNotSynthesized);
1158 tester.clear_key_calls();
1159 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1160
1161
1162 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1164 kWmResultZero)});
1165
1166 EXPECT_EQ(tester.key_calls.size(), 1);
1168 kPhysicalKeyA, kLogicalKeyA, "", kNotSynthesized);
1169 tester.clear_key_calls();
1170 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1171
1172
1173 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1174 KeyStateChange{VK_LCONTROL, false, true},
1176 kWmResultZero)});
1177
1178 EXPECT_EQ(tester.key_calls.size(), 1);
1180 kPhysicalControlLeft, kLogicalControlLeft, "",
1181 kNotSynthesized);
1182 tester.clear_key_calls();
1183 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1184}
1185
1186
1187TEST_F(KeyboardTest, CtrlLeftDigit1) {
1189 tester.Responding(false);
1190
1191
1192
1193
1194 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1195 KeyStateChange{VK_LCONTROL, true, true},
1197 kWmResultZero)});
1198
1199 EXPECT_EQ(tester.key_calls.size(), 1);
1201 kPhysicalControlLeft, kLogicalControlLeft, "",
1202 kNotSynthesized);
1203 tester.clear_key_calls();
1204 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1205
1206
1207 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1209 .Build(kWmResultZero)});
1210
1211 EXPECT_EQ(tester.key_calls.size(), 1);
1213 kPhysicalDigit1, kLogicalDigit1, "", kNotSynthesized);
1214 tester.clear_key_calls();
1215 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1216
1217
1218 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1220 kWmResultZero)});
1221
1222 EXPECT_EQ(tester.key_calls.size(), 1);
1224 kPhysicalDigit1, kLogicalDigit1, "", kNotSynthesized);
1225 tester.clear_key_calls();
1226 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1227
1228
1229 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1230 KeyStateChange{VK_LCONTROL, false, true},
1232 kWmResultZero)});
1233
1234 EXPECT_EQ(tester.key_calls.size(), 1);
1236 kPhysicalControlLeft, kLogicalControlLeft, "",
1237 kNotSynthesized);
1238 tester.clear_key_calls();
1239 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1240}
1241
1242
1243
1244TEST_F(KeyboardTest, Digit1OnFrenchLayout) {
1246 tester.Responding(false);
1247
1248 tester.SetLayout(LayoutFrench);
1249
1250
1251 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1253 .Build(kWmResultZero),
1255 kWmResultZero)});
1256
1257 EXPECT_EQ(tester.key_calls.size(), 2);
1259 kPhysicalDigit1, kLogicalDigit1, "&", kNotSynthesized);
1261 tester.clear_key_calls();
1262 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1263
1264
1265 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1267 kWmResultZero)});
1268
1269 EXPECT_EQ(tester.key_calls.size(), 1);
1271 kPhysicalDigit1, kLogicalDigit1, "", kNotSynthesized);
1272 tester.clear_key_calls();
1273 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1274}
1275
1276
1277TEST_F(KeyboardTest, AltGrModifiedKey) {
1279 tester.Responding(false);
1280
1281
1282
1283
1284 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1285 KeyStateChange{VK_LCONTROL, true, true},
1287 kWmResultZero),
1288 KeyStateChange{VK_RMENU, true, true},
1290 kWmResultZero)});
1291
1292 EXPECT_EQ(tester.key_calls.size(), 2);
1294 kPhysicalControlLeft, kLogicalControlLeft, "",
1295 kNotSynthesized);
1297 kPhysicalAltRight, kLogicalAltRight, "",
1298 kNotSynthesized);
1299 tester.clear_key_calls();
1300 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1301
1302
1303 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1305 kWmResultZero),
1307 kWmResultZero)});
1308
1309 EXPECT_EQ(tester.key_calls.size(), 2);
1311 kPhysicalKeyQ, kLogicalKeyQ, "@", kNotSynthesized);
1313 tester.clear_key_calls();
1314 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1315
1316
1317 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1319 kWmResultZero)});
1320
1321 EXPECT_EQ(tester.key_calls.size(), 1);
1323 kPhysicalKeyQ, kLogicalKeyQ, "", kNotSynthesized);
1324 tester.clear_key_calls();
1325 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1326
1327
1328
1329
1330 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1331 KeyStateChange{VK_LCONTROL, false, true},
1332 ExpectForgedMessage{
1334 kWmResultZero)},
1335 KeyStateChange{VK_RMENU, false, true},
1337 kWmResultDefault)});
1338
1339 EXPECT_EQ(tester.key_calls.size(), 2);
1341 kPhysicalControlLeft, kLogicalControlLeft, "",
1342 kNotSynthesized);
1344 kPhysicalAltRight, kLogicalAltRight, "",
1345 kNotSynthesized);
1346 tester.clear_key_calls();
1347
1348 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1349}
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364TEST_F(KeyboardTest, AltGrTwice) {
1366 tester.Responding(false);
1367
1368
1369
1370
1371
1372 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1373 KeyStateChange{VK_LCONTROL, true, true},
1375 kWmResultZero),
1376 KeyStateChange{VK_RMENU, true, true},
1378 kWmResultZero)});
1379
1380 EXPECT_EQ(tester.key_calls.size(), 2);
1382 kPhysicalControlLeft, kLogicalControlLeft, "",
1383 kNotSynthesized);
1385 kPhysicalAltRight, kLogicalAltRight, "",
1386 kNotSynthesized);
1387 tester.clear_key_calls();
1388 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1389
1390
1391
1392
1393 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1394 KeyStateChange{VK_LCONTROL, false, true},
1395 ExpectForgedMessage{
1397 kWmResultZero)},
1398 KeyStateChange{VK_RMENU, false, true},
1400 kWmResultDefault)});
1401 EXPECT_EQ(tester.key_calls.size(), 2);
1403 kPhysicalControlLeft, kLogicalControlLeft, "",
1404 kNotSynthesized);
1406 kPhysicalAltRight, kLogicalAltRight, "",
1407 kNotSynthesized);
1408 tester.clear_key_calls();
1409
1410 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1411
1412
1413
1414 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1415 KeyStateChange{VK_LCONTROL, true, false},
1417 kWmResultZero),
1418 KeyStateChange{VK_RMENU, true, true},
1420 kWmResultZero)});
1421
1422 EXPECT_EQ(tester.key_calls.size(), 2);
1424 kPhysicalControlLeft, kLogicalControlLeft, "",
1425 kNotSynthesized);
1427 kPhysicalAltRight, kLogicalAltRight, "",
1428 kNotSynthesized);
1429 tester.clear_key_calls();
1430 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1431
1432
1433
1434
1435 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1436 KeyStateChange{VK_LCONTROL, false, false},
1437 ExpectForgedMessage{
1439 kWmResultZero)},
1440 KeyStateChange{VK_RMENU, false, false},
1442 kWmResultDefault)});
1443 EXPECT_EQ(tester.key_calls.size(), 2);
1445 kPhysicalControlLeft, kLogicalControlLeft, "",
1446 kNotSynthesized);
1448 kPhysicalAltRight, kLogicalAltRight, "",
1449 kNotSynthesized);
1450 tester.clear_key_calls();
1451
1452 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1453
1454
1455 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1457 kWmResultZero)});
1458 EXPECT_EQ(tester.key_calls.size(), 1);
1460 kNotSynthesized);
1461 tester.clear_key_calls();
1462 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
1463}
1464
1465
1466
1467TEST_F(KeyboardTest, DeadKeyThatCombines) {
1469 tester.Responding(false);
1470
1471 tester.SetLayout(LayoutFrench);
1472
1473
1474 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1476 kWmResultZero),
1478 kWmResultZero)});
1479
1480 EXPECT_EQ(tester.key_calls.size(), 1);
1482 kPhysicalBracketLeft, kLogicalBracketRight, "^",
1483 kNotSynthesized);
1484 tester.clear_key_calls();
1485 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1486
1487
1488 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1490 kWmResultZero)});
1491
1492 EXPECT_EQ(tester.key_calls.size(), 1);
1494 kPhysicalBracketLeft, kLogicalBracketRight, "",
1495 kNotSynthesized);
1496 tester.clear_key_calls();
1497 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1498
1499
1500 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1502 kWmResultZero),
1504 kWmResultZero)});
1505
1506 EXPECT_EQ(tester.key_calls.size(), 2);
1508 kPhysicalKeyE, kLogicalKeyE, "ê", kNotSynthesized);
1510 tester.clear_key_calls();
1511 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1512
1513
1514 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1516 kWmResultZero)});
1517
1518 EXPECT_EQ(tester.key_calls.size(), 1);
1520 kPhysicalKeyE, kLogicalKeyE, "", kNotSynthesized);
1521 tester.clear_key_calls();
1522 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1523}
1524
1525
1526
1527
1528
1529
1530TEST_F(KeyboardTest, DeadKeyWithoutDeadMaskThatCombines) {
1532 tester.Responding(false);
1533
1534
1535 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1536 KeyStateChange{VK_LSHIFT, true, true},
1538 kWmResultZero)});
1539
1540 EXPECT_EQ(tester.key_calls.size(), 1);
1542 kPhysicalShiftLeft, kLogicalShiftLeft, "",
1543 kNotSynthesized);
1544 tester.clear_key_calls();
1545 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1546
1547
1548 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1550 kWmResultZero),
1552 kWmResultZero)});
1553
1554 EXPECT_EQ(tester.key_calls.size(), 1);
1556 kPhysicalDigit6, kLogicalDigit6, "6", kNotSynthesized);
1557 tester.clear_key_calls();
1558 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1559
1560
1561 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1563
1564 EXPECT_EQ(tester.key_calls.size(), 1);
1566 kPhysicalDigit6, kLogicalDigit6, "", kNotSynthesized);
1567 tester.clear_key_calls();
1568 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1569
1570
1571 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1572 KeyStateChange{VK_LSHIFT, false, true},
1574 kWmResultZero)});
1575
1576 EXPECT_EQ(tester.key_calls.size(), 1);
1578 kPhysicalShiftLeft, kLogicalShiftLeft, "",
1579 kNotSynthesized);
1580 tester.clear_key_calls();
1581 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1582
1583
1584 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1586 kWmResultZero),
1588 kWmResultZero)});
1589
1590 EXPECT_EQ(tester.key_calls.size(), 2);
1592 kPhysicalKeyE, kLogicalKeyE, "ê", kNotSynthesized);
1594 tester.clear_key_calls();
1595 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1596
1597
1598 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1600 kWmResultZero)});
1601
1602 EXPECT_EQ(tester.key_calls.size(), 1);
1604 kPhysicalKeyE, kLogicalKeyE, "", kNotSynthesized);
1605 tester.clear_key_calls();
1606 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1607}
1608
1609
1610
1611TEST_F(KeyboardTest, DeadKeyThatDoesNotCombine) {
1613 tester.Responding(false);
1614
1615 tester.SetLayout(LayoutFrench);
1616
1617
1618 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1620 kWmResultZero),
1622 kWmResultZero)});
1623
1624 EXPECT_EQ(tester.key_calls.size(), 1);
1626 kPhysicalBracketLeft, kLogicalBracketRight, "^",
1627 kNotSynthesized);
1628 tester.clear_key_calls();
1629 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1630
1631
1632 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1634 kWmResultZero)});
1635
1636 EXPECT_EQ(tester.key_calls.size(), 1);
1638 kPhysicalBracketLeft, kLogicalBracketRight, "",
1639 kNotSynthesized);
1640 tester.clear_key_calls();
1641 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1642
1643
1644 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1646 .Build(kWmResultZero),
1648 kWmResultZero),
1650 kWmResultZero)});
1651
1652 EXPECT_EQ(tester.key_calls.size(), 3);
1654 kPhysicalDigit1, kLogicalDigit1, "^", kNotSynthesized);
1657 tester.clear_key_calls();
1658
1659
1660
1661
1662
1663 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1664
1665
1666 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1668 kWmResultZero)});
1669
1670 EXPECT_EQ(tester.key_calls.size(), 1);
1672 kPhysicalDigit1, kLogicalDigit1, "", kNotSynthesized);
1673 tester.clear_key_calls();
1674 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1675}
1676
1677
1678
1679
1680TEST_F(KeyboardTest, DeadKeyTwiceThenLetter) {
1682 tester.Responding(false);
1683
1684
1685
1686
1687 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1689 kWmResultZero),
1691 kWmResultZero)});
1692
1693 EXPECT_EQ(tester.key_calls.size(), 1);
1695 kPhysicalBackquote, kLogicalBackquote, "`",
1696 kNotSynthesized);
1697 tester.clear_key_calls();
1698 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1699
1700
1701 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1703 kWmResultZero)});
1704
1705 EXPECT_EQ(tester.key_calls.size(), 1);
1707 kPhysicalBackquote, kLogicalBackquote, "",
1708 kNotSynthesized);
1709 tester.clear_key_calls();
1710 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1711
1712
1713
1714 std::vector<MockKeyResponseController::ResponseCallback> recorded_callbacks;
1715 tester.LateResponding(
1716 [&recorded_callbacks](
1718 MockKeyResponseController::ResponseCallback
callback) {
1719 recorded_callbacks.push_back(
callback);
1720 });
1721
1722 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1724 kWmResultZero),
1727 .Build(kWmResultZero),
1729 kWmResultZero)});
1730
1731 EXPECT_EQ(recorded_callbacks.size(), 1);
1732 EXPECT_EQ(tester.key_calls.size(), 1);
1734 kPhysicalBackquote, kLogicalBackquote, "`",
1735 kNotSynthesized);
1736 tester.clear_key_calls();
1737
1738 recorded_callbacks.front()(false);
1739 EXPECT_EQ(tester.key_calls.size(), 2);
1742 tester.clear_key_calls();
1743
1744
1745
1746 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
1747
1748 tester.Responding(false);
1749
1750
1751 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1753 kWmResultZero)});
1754
1755 EXPECT_EQ(tester.key_calls.size(), 1);
1757 kPhysicalBackquote, kLogicalBackquote, "",
1758 kNotSynthesized);
1759 tester.clear_key_calls();
1760 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1761}
1762
1763
1764TEST_F(KeyboardTest, MultibyteCharacter) {
1766 tester.Responding(false);
1767
1768
1769
1770
1771
1772 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1774 kWmResultZero),
1776 kWmResultZero),
1778 kWmResultZero)});
1779
1780 const char* st = tester.key_calls[0].key_event.character;
1781
1782 EXPECT_EQ(tester.key_calls.size(), 2);
1784 kPhysicalKeyW, kLogicalKeyW, "𐍅", kNotSynthesized);
1786 tester.clear_key_calls();
1787 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 3);
1788
1789
1790 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1792 kWmResultZero)});
1793
1794 EXPECT_EQ(tester.key_calls.size(), 1);
1796 kPhysicalKeyW, kLogicalKeyW, "", kNotSynthesized);
1797 tester.clear_key_calls();
1798 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1799}
1800
1801TEST_F(KeyboardTest, SynthesizeModifiers) {
1803 tester.Responding(false);
1804
1805
1806 Win32Message event1 =
1808 kWmResultZero);
1809 Win32Message event2 =
1811 kWmResultZero);
1812
1813
1814 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1815 KeyStateChange{VK_LSHIFT, true, true}, event1});
1816 EXPECT_EQ(tester.key_calls.size(), 2);
1818 kPhysicalShiftLeft, kLogicalShiftLeft, "", kSynthesized);
1819 tester.clear_key_calls();
1820 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1821
1822 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1823 KeyStateChange{VK_LSHIFT, false, true}, event2});
1824 EXPECT_EQ(tester.key_calls.size(), 2);
1826 kPhysicalShiftLeft, kLogicalShiftLeft, "", kSynthesized);
1827 tester.clear_key_calls();
1828 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1829
1830
1831 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1832 KeyStateChange{VK_RSHIFT, true, true}, event1});
1833 EXPECT_EQ(tester.key_calls.size(), 2);
1835 kPhysicalShiftRight, kLogicalShiftRight, "",
1836 kSynthesized);
1837 tester.clear_key_calls();
1838 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1839
1840 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1841 KeyStateChange{VK_RSHIFT, false, true}, event2});
1842 EXPECT_EQ(tester.key_calls.size(), 2);
1844 kPhysicalShiftRight, kLogicalShiftRight, "",
1845 kSynthesized);
1846 tester.clear_key_calls();
1847 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1848
1849
1850 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1851 KeyStateChange{VK_LCONTROL, true, true}, event1});
1852 EXPECT_EQ(tester.key_calls.size(), 2);
1854 kPhysicalControlLeft, kLogicalControlLeft, "",
1855 kSynthesized);
1856 tester.clear_key_calls();
1857 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1858
1859 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1860 KeyStateChange{VK_LCONTROL, false, true}, event2});
1861 EXPECT_EQ(tester.key_calls.size(), 2);
1863 kPhysicalControlLeft, kLogicalControlLeft, "",
1864 kSynthesized);
1865 tester.clear_key_calls();
1866 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1867
1868
1869 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1870 KeyStateChange{VK_RCONTROL, true, true}, event1});
1871 EXPECT_EQ(tester.key_calls.size(), 2);
1873 kPhysicalControlRight, kLogicalControlRight, "",
1874 kSynthesized);
1875 tester.clear_key_calls();
1876 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1877
1878 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1879 KeyStateChange{VK_RCONTROL, false, true}, event2});
1880 EXPECT_EQ(tester.key_calls.size(), 2);
1882 kPhysicalControlRight, kLogicalControlRight, "",
1883 kSynthesized);
1884 tester.clear_key_calls();
1885 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1886
1887
1888 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1889 KeyStateChange{VK_LMENU, true, true}, event1});
1890 EXPECT_EQ(tester.key_calls.size(), 2);
1892 kPhysicalAltLeft, kLogicalAltLeft, "", kSynthesized);
1893 tester.clear_key_calls();
1894 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1895
1896 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1897 KeyStateChange{VK_LMENU, false, true}, event2});
1898 EXPECT_EQ(tester.key_calls.size(), 2);
1900 kPhysicalAltLeft, kLogicalAltLeft, "", kSynthesized);
1901 tester.clear_key_calls();
1902 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1903
1904
1905 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1906 KeyStateChange{VK_RMENU, true, true}, event1});
1907 EXPECT_EQ(tester.key_calls.size(), 2);
1909 kPhysicalAltRight, kLogicalAltRight, "", kSynthesized);
1910 tester.clear_key_calls();
1911 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1912
1913 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1914 KeyStateChange{VK_RMENU, false, true}, event2});
1915 EXPECT_EQ(tester.key_calls.size(), 2);
1917 kPhysicalAltRight, kLogicalAltRight, "", kSynthesized);
1918 tester.clear_key_calls();
1919 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1920
1921
1922 tester.InjectKeyboardChanges(
1923 std::vector<KeyboardChange>{KeyStateChange{VK_LWIN, true, true}, event1});
1924 EXPECT_EQ(tester.key_calls.size(), 2);
1926 kPhysicalMetaLeft, kLogicalMetaLeft, "", kSynthesized);
1927 tester.clear_key_calls();
1928 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1929
1930 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1931 KeyStateChange{VK_LWIN, false, true}, event2});
1932 EXPECT_EQ(tester.key_calls.size(), 2);
1934 kPhysicalMetaLeft, kLogicalMetaLeft, "", kSynthesized);
1935 tester.clear_key_calls();
1936 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1937
1938
1939 tester.InjectKeyboardChanges(
1940 std::vector<KeyboardChange>{KeyStateChange{VK_RWIN, true, true}, event1});
1941 EXPECT_EQ(tester.key_calls.size(), 2);
1943 kPhysicalMetaRight, kLogicalMetaRight, "", kSynthesized);
1944 tester.clear_key_calls();
1945 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1946
1947 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1948 KeyStateChange{VK_RWIN, false, true}, event2});
1949 EXPECT_EQ(tester.key_calls.size(), 2);
1951 kPhysicalMetaRight, kLogicalMetaRight, "", kSynthesized);
1952 tester.clear_key_calls();
1953 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1954
1955
1956
1957 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1958 KeyStateChange{VK_CAPITAL, false, true}, event1});
1959 EXPECT_EQ(tester.key_calls.size(), 3);
1961 kPhysicalCapsLock, kLogicalCapsLock, "", kSynthesized);
1963 kPhysicalCapsLock, kLogicalCapsLock, "", kSynthesized);
1964 tester.clear_key_calls();
1965 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1966
1967 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1968 KeyStateChange{VK_CAPITAL, false, false}, event2});
1969 EXPECT_EQ(tester.key_calls.size(), 3);
1971 kPhysicalCapsLock, kLogicalCapsLock, "", kSynthesized);
1973 kPhysicalCapsLock, kLogicalCapsLock, "", kSynthesized);
1974 tester.clear_key_calls();
1975 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1976
1977
1978 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1979 KeyStateChange{VK_SCROLL, true, true}, event1});
1980 EXPECT_EQ(tester.key_calls.size(), 2);
1982 kPhysicalScrollLock, kLogicalScrollLock, "",
1983 kSynthesized);
1984 tester.clear_key_calls();
1985 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1986
1987 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
1988 KeyStateChange{VK_SCROLL, true, false}, event2});
1989 EXPECT_EQ(tester.key_calls.size(), 3);
1991 kPhysicalScrollLock, kLogicalScrollLock, "",
1992 kSynthesized);
1994 kPhysicalScrollLock, kLogicalScrollLock, "",
1995 kSynthesized);
1996 tester.clear_key_calls();
1997 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
1998
1999
2000 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2001 KeyStateChange{VK_NUMLOCK, true, false}, event1});
2002
2003
2004
2005
2006 EXPECT_EQ(tester.key_calls.size(), 2);
2008 kPhysicalNumLock, kLogicalNumLock, "", kSynthesized);
2009 tester.clear_key_calls();
2010 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
2011
2012 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2013 KeyStateChange{VK_NUMLOCK, false, true}, event2});
2014 EXPECT_EQ(tester.key_calls.size(), 4);
2016 kPhysicalNumLock, kLogicalNumLock, "", kSynthesized);
2018 kPhysicalNumLock, kLogicalNumLock, "", kSynthesized);
2020 kPhysicalNumLock, kLogicalNumLock, "", kSynthesized);
2021 tester.clear_key_calls();
2022 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
2023}
2024
2025
2026
2027
2028
2029TEST_F(KeyboardTest, ImeExtendedEventsAreIgnored) {
2031 tester.Responding(false);
2032
2033
2034
2035
2036
2037
2038
2039 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2040 KeyStateChange{VK_RCONTROL, true, false},
2042 kWmResultZero)});
2043
2044 EXPECT_EQ(tester.key_calls.size(), 1);
2046 kNotSynthesized);
2047 tester.clear_key_calls();
2048 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
2049}
2050
2051
2052
2053
2054
2055
2056
2057TEST_F(KeyboardTest, UpOnlyImeEventsAreCorrectlyHandled) {
2059 tester.Responding(true);
2060
2061
2062
2063
2064 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2065 KeyStateChange{VK_LSHIFT, true, false},
2067 kWmResultZero),
2069 kWmResultZero),
2070 KeyStateChange{VK_LSHIFT, false, true},
2072 kWmResultZero),
2074 kWmResultZero)});
2075
2076 EXPECT_EQ(tester.key_calls.size(), 4);
2078 kPhysicalShiftLeft, kLogicalShiftLeft, "",
2079 kNotSynthesized);
2081 kNotSynthesized);
2083 kPhysicalShiftLeft, kLogicalShiftLeft, "",
2084 kNotSynthesized);
2086 kNotSynthesized);
2087 tester.clear_key_calls();
2088}
2089
2090
2091
2092
2093
2094
2095
2096TEST_F(KeyboardTest, SlowFrameworkResponse) {
2098
2099 std::vector<MockKeyResponseController::ResponseCallback> recorded_callbacks;
2100
2101
2102 tester.LateResponding(
2103 [&recorded_callbacks](
2105 MockKeyResponseController::ResponseCallback
callback) {
2106 recorded_callbacks.push_back(
callback);
2107 });
2108
2109
2110 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2112 kWmResultZero),
2114 kWmResultZero)});
2115
2116
2117 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2119 kWmResultZero),
2121 kWmResultZero)});
2122
2123 EXPECT_EQ(tester.key_calls.size(), 1);
2125 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
2126 EXPECT_EQ(recorded_callbacks.size(), 1);
2127 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
2128
2129
2130 recorded_callbacks.front()(false);
2131
2132 EXPECT_EQ(tester.key_calls.size(), 3);
2133 EXPECT_EQ(recorded_callbacks.size(), 2);
2136 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
2137 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
2138
2139
2140 recorded_callbacks.back()(false);
2141
2142 EXPECT_EQ(tester.key_calls.size(), 4);
2144 tester.clear_key_calls();
2145 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
2146}
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159TEST_F(KeyboardTest, SlowFrameworkResponseForIdenticalEvents) {
2161 std::vector<MockKeyResponseController::ResponseCallback> recorded_callbacks;
2162
2163
2164 tester.LateResponding(
2165 [&recorded_callbacks](
2167 MockKeyResponseController::ResponseCallback
callback) {
2168 recorded_callbacks.push_back(
callback);
2169 });
2170
2171
2172 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2174 kWmResultZero),
2176 kWmResultZero)});
2177
2178 EXPECT_EQ(tester.key_calls.size(), 1);
2180 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
2181 tester.clear_key_calls();
2182 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
2183
2184
2185 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2187 kWmResultZero)});
2188
2189 EXPECT_EQ(tester.key_calls.size(), 0);
2190 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
2191
2192
2193 EXPECT_EQ(recorded_callbacks.size(), 1);
2194 recorded_callbacks.front()(false);
2195
2196 EXPECT_EQ(tester.key_calls.size(), 2);
2199 kPhysicalKeyA, kLogicalKeyA, "", kNotSynthesized);
2200 tester.clear_key_calls();
2201 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
2202
2203
2204 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2206 kWmResultZero),
2208 kWmResultZero)});
2209
2210
2211
2212 EXPECT_EQ(recorded_callbacks.size(), 2);
2213 EXPECT_EQ(tester.key_calls.size(), 0);
2214 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
2215
2216
2217
2218 recorded_callbacks.back()(false);
2219 EXPECT_EQ(tester.key_calls.size(), 1);
2221 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
2222 tester.clear_key_calls();
2223 EXPECT_EQ(recorded_callbacks.size(), 3);
2224 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
2225
2226
2227 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2229 kWmResultZero)});
2230
2231 EXPECT_EQ(tester.key_calls.size(), 0);
2232 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
2233}
2234
2235TEST_F(KeyboardTest, TextInputSubmit) {
2237 tester.Responding(false);
2238
2239
2240
2241 tester.InjectPlatformMessage(
2242 "flutter/textinput", "TextInput.setClient",
2243 R"|([108, {"inputAction": "TextInputAction.none", "viewId": 0}])|");
2244
2245
2246 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2248 kWmResultZero),
2250 kWmResultZero)});
2251
2252 EXPECT_EQ(tester.key_calls.size(), 2);
2254 kPhysicalEnter, kLogicalEnter, "", kNotSynthesized);
2256 tester.key_calls[1],
2257 "{"
2258 R"|("method":"TextInputClient.performAction",)|"
2259 R"|("args":[108,"TextInputAction.none"])|"
2260 "}");
2261 tester.clear_key_calls();
2262 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
2263
2264
2265 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2267 kWmResultZero)});
2268
2269 EXPECT_EQ(tester.key_calls.size(), 1);
2271 kPhysicalEnter, kLogicalEnter, "", kNotSynthesized);
2272 tester.clear_key_calls();
2273 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
2274
2275
2276
2277
2278
2279
2280 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2282 kWmResultZero),
2284 kWmResultZero)});
2285
2286 EXPECT_EQ(tester.key_calls.size(), 2);
2288 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
2290 tester.clear_key_calls();
2291
2292
2293 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2295 kWmResultZero)});
2296
2297 EXPECT_EQ(tester.key_calls.size(), 1);
2299 kPhysicalKeyA, kLogicalKeyA, "", kNotSynthesized);
2300 tester.clear_key_calls();
2301}
2302
2303TEST_F(KeyboardTest, VietnameseTelexAddDiacriticWithFastResponse) {
2304
2305
2306
2307
2308
2309
2310
2311
2312
2314 tester.Responding(false);
2315
2316
2317
2318
2319 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2321 kWmResultZero),
2323 kWmResultZero)});
2324
2325 EXPECT_EQ(tester.key_calls.size(), 2);
2327 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
2329 tester.clear_key_calls();
2330 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
2331
2332
2333 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2335 kWmResultZero)});
2336
2337 EXPECT_EQ(tester.key_calls.size(), 1);
2339 kPhysicalKeyA, kLogicalKeyA, "", kNotSynthesized);
2340 tester.clear_key_calls();
2341 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
2342
2343
2344
2345
2346 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2348 kWmResultZero),
2350 kWmResultZero),
2351 WmKeyUpInfo{VK_BACK, kScanCodeBackspace,
kNotExtended}.Build(
2352 kWmResultZero),
2355 WmKeyUpInfo{VK_PACKET, 0,
kNotExtended}.Build(kWmResultDefault)});
2356
2357 EXPECT_EQ(tester.key_calls.size(), 3);
2359 kPhysicalBackspace, kLogicalBackspace, "",
2360 kNotSynthesized);
2362 kPhysicalBackspace, kLogicalBackspace, "",
2363 kNotSynthesized);
2365 tester.clear_key_calls();
2366
2367
2368
2369
2370
2371 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 3);
2372
2373
2374 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2376 true}
2377 .Build(kWmResultZero)});
2378
2379 EXPECT_EQ(tester.key_calls.size(), 1);
2381 kNotSynthesized);
2382 tester.clear_key_calls();
2383 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
2384}
2385
2387 bool backspace_response) {
2388
2389
2390
2391
2392
2393
2394
2395
2396
2398 tester.Responding(false);
2399
2400
2401
2402
2403 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2405 kWmResultZero),
2407 kWmResultZero)});
2408
2409 EXPECT_EQ(tester.key_calls.size(), 2);
2411 kPhysicalKeyA, kLogicalKeyA, "a", kNotSynthesized);
2413 tester.clear_key_calls();
2414 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 2);
2415
2416
2417 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2419 kWmResultZero)});
2420
2421 EXPECT_EQ(tester.key_calls.size(), 1);
2423 kPhysicalKeyA, kLogicalKeyA, "", kNotSynthesized);
2424 tester.clear_key_calls();
2425 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
2426
2427 std::vector<MockKeyResponseController::ResponseCallback> recorded_callbacks;
2428 tester.LateResponding(
2429 [&recorded_callbacks](
2431 MockKeyResponseController::ResponseCallback
callback) {
2432 recorded_callbacks.push_back(
callback);
2433 });
2434
2435
2436
2437
2438 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2440 kWmResultZero),
2442 kWmResultZero),
2443 WmKeyUpInfo{VK_BACK, kScanCodeBackspace,
kNotExtended}.Build(
2444 kWmResultZero),
2447 WmKeyUpInfo{VK_PACKET, 0,
kNotExtended}.Build(kWmResultDefault)});
2448
2449
2450
2451
2452
2453
2454 EXPECT_EQ(tester.key_calls.size(), 1);
2456 kPhysicalBackspace, kLogicalBackspace, "",
2457 kNotSynthesized);
2458 tester.clear_key_calls();
2459 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
2460
2461 EXPECT_EQ(recorded_callbacks.size(), 1);
2462 recorded_callbacks[0](backspace_response);
2463
2464 EXPECT_EQ(tester.key_calls.size(), 1);
2466 kPhysicalBackspace, kLogicalBackspace, "",
2467 kNotSynthesized);
2468 tester.clear_key_calls();
2469 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(),
2470 backspace_response ? 0 : 2);
2471
2472 recorded_callbacks[1](false);
2473 EXPECT_EQ(tester.key_calls.size(), 1);
2475 tester.clear_key_calls();
2476 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 1);
2477
2478 tester.Responding(false);
2479
2480
2481 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2483 true}
2484 .Build(kWmResultZero)});
2485
2486 EXPECT_EQ(tester.key_calls.size(), 1);
2488 kNotSynthesized);
2489 tester.clear_key_calls();
2490 EXPECT_EQ(tester.RedispatchedMessageCountAndClear(), 0);
2491}
2492
2493TEST_F(KeyboardTest, VietnameseTelexAddDiacriticWithSlowFalseResponse) {
2495}
2496
2497TEST_F(KeyboardTest, VietnameseTelexAddDiacriticWithSlowTrueResponse) {
2499}
2500
2501
2502
2503TEST_F(KeyboardTest, DoubleCapsLock) {
2505 tester.Responding(false);
2506
2507 tester.InjectKeyboardChanges(std::vector<KeyboardChange>{
2510
2511 tester.clear_key_calls();
2512}
2513
2514}
2515}
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