@@ -1066,3 +1066,330 @@ test('navigation key: {arrowleft} and {arrowright} moves the cursor', () => {
1066
1066
input[value="abc"] - keyup: c (99)
1067
1067
` )
1068
1068
} )
1069
+
1070
+ test ( 'can type into an input with type `time`' , ( ) => {
1071
+ const { element, getEventSnapshot} = setup ( '<input type="time" />' )
1072
+ userEvent . type ( element , '01:05' )
1073
+ expect ( getEventSnapshot ( ) ) . toMatchInlineSnapshot ( `
1074
+ Events fired on: input[value="01:05"]
1075
+
1076
+ input[value=""] - pointerover
1077
+ input[value=""] - pointerenter
1078
+ input[value=""] - mouseover: Left (0)
1079
+ input[value=""] - mouseenter: Left (0)
1080
+ input[value=""] - pointermove
1081
+ input[value=""] - mousemove: Left (0)
1082
+ input[value=""] - pointerdown
1083
+ input[value=""] - mousedown: Left (0)
1084
+ input[value=""] - focus
1085
+ input[value=""] - focusin
1086
+ input[value=""] - pointerup
1087
+ input[value=""] - mouseup: Left (0)
1088
+ input[value=""] - click: Left (0)
1089
+ input[value=""] - keydown: 0 (48)
1090
+ input[value=""] - keypress: 0 (48)
1091
+ input[value=""] - keyup: 0 (48)
1092
+ input[value=""] - keydown: 1 (49)
1093
+ input[value=""] - keypress: 1 (49)
1094
+ input[value=""] - keyup: 1 (49)
1095
+ input[value=""] - keydown: : (58)
1096
+ input[value=""] - keypress: : (58)
1097
+ input[value=""] - keyup: : (58)
1098
+ input[value=""] - keydown: 0 (48)
1099
+ input[value=""] - keypress: 0 (48)
1100
+ input[value="01:00"] - input
1101
+ "{CURSOR}" -> "{CURSOR}01:00"
1102
+ input[value="01:00"] - change
1103
+ input[value="01:00"] - keyup: 0 (48)
1104
+ input[value="01:00"] - keydown: 5 (53)
1105
+ input[value="01:00"] - keypress: 5 (53)
1106
+ input[value="01:05"] - input
1107
+ "{CURSOR}01:00" -> "{CURSOR}01:05"
1108
+ input[value="01:05"] - change
1109
+ input[value="01:05"] - keyup: 5 (53)
1110
+ ` )
1111
+ expect ( element . value ) . toBe ( '01:05' )
1112
+ } )
1113
+
1114
+ test ( 'can type into an input with type `time` without ":"' , ( ) => {
1115
+ const { element, getEventSnapshot} = setup ( '<input type="time" />' )
1116
+ userEvent . type ( element , '0105' )
1117
+ expect ( getEventSnapshot ( ) ) . toMatchInlineSnapshot ( `
1118
+ Events fired on: input[value="01:05"]
1119
+
1120
+ input[value=""] - pointerover
1121
+ input[value=""] - pointerenter
1122
+ input[value=""] - mouseover: Left (0)
1123
+ input[value=""] - mouseenter: Left (0)
1124
+ input[value=""] - pointermove
1125
+ input[value=""] - mousemove: Left (0)
1126
+ input[value=""] - pointerdown
1127
+ input[value=""] - mousedown: Left (0)
1128
+ input[value=""] - focus
1129
+ input[value=""] - focusin
1130
+ input[value=""] - pointerup
1131
+ input[value=""] - mouseup: Left (0)
1132
+ input[value=""] - click: Left (0)
1133
+ input[value=""] - keydown: 0 (48)
1134
+ input[value=""] - keypress: 0 (48)
1135
+ input[value=""] - keyup: 0 (48)
1136
+ input[value=""] - keydown: 1 (49)
1137
+ input[value=""] - keypress: 1 (49)
1138
+ input[value=""] - keyup: 1 (49)
1139
+ input[value=""] - keydown: 0 (48)
1140
+ input[value=""] - keypress: 0 (48)
1141
+ input[value="01:00"] - input
1142
+ "{CURSOR}" -> "{CURSOR}01:00"
1143
+ input[value="01:00"] - change
1144
+ input[value="01:00"] - keyup: 0 (48)
1145
+ input[value="01:00"] - keydown: 5 (53)
1146
+ input[value="01:00"] - keypress: 5 (53)
1147
+ input[value="01:05"] - input
1148
+ "{CURSOR}01:00" -> "{CURSOR}01:05"
1149
+ input[value="01:05"] - change
1150
+ input[value="01:05"] - keyup: 5 (53)
1151
+ ` )
1152
+ expect ( element . value ) . toBe ( '01:05' )
1153
+ } )
1154
+
1155
+ test ( 'can type more a number higher than 60 minutes into an input `time` and they are converted into 59 minutes' , ( ) => {
1156
+ const { element, getEventSnapshot} = setup ( '<input type="time" />' )
1157
+ userEvent . type ( element , '23:90' )
1158
+
1159
+ expect ( getEventSnapshot ( ) ) . toMatchInlineSnapshot ( `
1160
+ Events fired on: input[value="23:59"]
1161
+
1162
+ input[value=""] - pointerover
1163
+ input[value=""] - pointerenter
1164
+ input[value=""] - mouseover: Left (0)
1165
+ input[value=""] - mouseenter: Left (0)
1166
+ input[value=""] - pointermove
1167
+ input[value=""] - mousemove: Left (0)
1168
+ input[value=""] - pointerdown
1169
+ input[value=""] - mousedown: Left (0)
1170
+ input[value=""] - focus
1171
+ input[value=""] - focusin
1172
+ input[value=""] - pointerup
1173
+ input[value=""] - mouseup: Left (0)
1174
+ input[value=""] - click: Left (0)
1175
+ input[value=""] - keydown: 2 (50)
1176
+ input[value=""] - keypress: 2 (50)
1177
+ input[value=""] - keyup: 2 (50)
1178
+ input[value=""] - keydown: 3 (51)
1179
+ input[value=""] - keypress: 3 (51)
1180
+ input[value=""] - keyup: 3 (51)
1181
+ input[value=""] - keydown: : (58)
1182
+ input[value=""] - keypress: : (58)
1183
+ input[value=""] - keyup: : (58)
1184
+ input[value=""] - keydown: 9 (57)
1185
+ input[value=""] - keypress: 9 (57)
1186
+ input[value="23:09"] - input
1187
+ "{CURSOR}" -> "{CURSOR}23:09"
1188
+ input[value="23:09"] - change
1189
+ input[value="23:09"] - keyup: 9 (57)
1190
+ input[value="23:09"] - keydown: 0 (48)
1191
+ input[value="23:09"] - keypress: 0 (48)
1192
+ input[value="23:59"] - input
1193
+ "{CURSOR}23:09" -> "{CURSOR}23:59"
1194
+ input[value="23:59"] - change
1195
+ input[value="23:59"] - keyup: 0 (48)
1196
+ ` )
1197
+
1198
+ expect ( element . value ) . toBe ( '23:59' )
1199
+ } )
1200
+
1201
+ test ( 'can type letters into an input `time` and they are ignored' , ( ) => {
1202
+ const { element, getEventSnapshot} = setup ( '<input type="time" />' )
1203
+ userEvent . type ( element , '1a6bc36abd' )
1204
+
1205
+ expect ( getEventSnapshot ( ) ) . toMatchInlineSnapshot ( `
1206
+ Events fired on: input[value="16:36"]
1207
+
1208
+ input[value=""] - pointerover
1209
+ input[value=""] - pointerenter
1210
+ input[value=""] - mouseover: Left (0)
1211
+ input[value=""] - mouseenter: Left (0)
1212
+ input[value=""] - pointermove
1213
+ input[value=""] - mousemove: Left (0)
1214
+ input[value=""] - pointerdown
1215
+ input[value=""] - mousedown: Left (0)
1216
+ input[value=""] - focus
1217
+ input[value=""] - focusin
1218
+ input[value=""] - pointerup
1219
+ input[value=""] - mouseup: Left (0)
1220
+ input[value=""] - click: Left (0)
1221
+ input[value=""] - keydown: 1 (49)
1222
+ input[value=""] - keypress: 1 (49)
1223
+ input[value=""] - keyup: 1 (49)
1224
+ input[value=""] - keydown: a (97)
1225
+ input[value=""] - keypress: a (97)
1226
+ input[value=""] - keyup: a (97)
1227
+ input[value=""] - keydown: 6 (54)
1228
+ input[value=""] - keypress: 6 (54)
1229
+ input[value=""] - keyup: 6 (54)
1230
+ input[value=""] - keydown: b (98)
1231
+ input[value=""] - keypress: b (98)
1232
+ input[value=""] - keyup: b (98)
1233
+ input[value=""] - keydown: c (99)
1234
+ input[value=""] - keypress: c (99)
1235
+ input[value=""] - keyup: c (99)
1236
+ input[value=""] - keydown: 3 (51)
1237
+ input[value=""] - keypress: 3 (51)
1238
+ input[value="16:03"] - input
1239
+ "{CURSOR}" -> "{CURSOR}16:03"
1240
+ input[value="16:03"] - change
1241
+ input[value="16:03"] - keyup: 3 (51)
1242
+ input[value="16:03"] - keydown: 6 (54)
1243
+ input[value="16:03"] - keypress: 6 (54)
1244
+ input[value="16:36"] - input
1245
+ "{CURSOR}16:03" -> "{CURSOR}16:36"
1246
+ input[value="16:36"] - change
1247
+ input[value="16:36"] - keyup: 6 (54)
1248
+ input[value="16:36"] - keydown: a (97)
1249
+ input[value="16:36"] - keypress: a (97)
1250
+ input[value="16:36"] - keyup: a (97)
1251
+ input[value="16:36"] - keydown: b (98)
1252
+ input[value="16:36"] - keypress: b (98)
1253
+ input[value="16:36"] - keyup: b (98)
1254
+ input[value="16:36"] - keydown: d (100)
1255
+ input[value="16:36"] - keypress: d (100)
1256
+ input[value="16:36"] - keyup: d (100)
1257
+ ` )
1258
+
1259
+ expect ( element . value ) . toBe ( '16:36' )
1260
+ } )
1261
+
1262
+ test ( 'can type a digit bigger in the hours section, bigger than 2 and it shows the time correctly' , ( ) => {
1263
+ const { element, getEventSnapshot} = setup ( '<input type="time" />' )
1264
+ userEvent . type ( element , '9:25' )
1265
+
1266
+ expect ( getEventSnapshot ( ) ) . toMatchInlineSnapshot ( `
1267
+ Events fired on: input[value="09:25"]
1268
+
1269
+ input[value=""] - pointerover
1270
+ input[value=""] - pointerenter
1271
+ input[value=""] - mouseover: Left (0)
1272
+ input[value=""] - mouseenter: Left (0)
1273
+ input[value=""] - pointermove
1274
+ input[value=""] - mousemove: Left (0)
1275
+ input[value=""] - pointerdown
1276
+ input[value=""] - mousedown: Left (0)
1277
+ input[value=""] - focus
1278
+ input[value=""] - focusin
1279
+ input[value=""] - pointerup
1280
+ input[value=""] - mouseup: Left (0)
1281
+ input[value=""] - click: Left (0)
1282
+ input[value=""] - keydown: 9 (57)
1283
+ input[value=""] - keypress: 9 (57)
1284
+ input[value=""] - keyup: 9 (57)
1285
+ input[value=""] - keydown: : (58)
1286
+ input[value=""] - keypress: : (58)
1287
+ input[value=""] - keyup: : (58)
1288
+ input[value=""] - keydown: 2 (50)
1289
+ input[value=""] - keypress: 2 (50)
1290
+ input[value="09:02"] - input
1291
+ "{CURSOR}" -> "{CURSOR}09:02"
1292
+ input[value="09:02"] - change
1293
+ input[value="09:02"] - keyup: 2 (50)
1294
+ input[value="09:02"] - keydown: 5 (53)
1295
+ input[value="09:02"] - keypress: 5 (53)
1296
+ input[value="09:25"] - input
1297
+ "{CURSOR}09:02" -> "{CURSOR}09:25"
1298
+ input[value="09:25"] - change
1299
+ input[value="09:25"] - keyup: 5 (53)
1300
+ ` )
1301
+
1302
+ expect ( element . value ) . toBe ( '09:25' )
1303
+ } )
1304
+
1305
+ test ( 'can type two digits in the hours section, equals to 24 and it shows the hours as 23' , ( ) => {
1306
+ const { element, getEventSnapshot} = setup ( '<input type="time" />' )
1307
+ userEvent . type ( element , '24:52' )
1308
+
1309
+ expect ( getEventSnapshot ( ) ) . toMatchInlineSnapshot ( `
1310
+ Events fired on: input[value="23:52"]
1311
+
1312
+ input[value=""] - pointerover
1313
+ input[value=""] - pointerenter
1314
+ input[value=""] - mouseover: Left (0)
1315
+ input[value=""] - mouseenter: Left (0)
1316
+ input[value=""] - pointermove
1317
+ input[value=""] - mousemove: Left (0)
1318
+ input[value=""] - pointerdown
1319
+ input[value=""] - mousedown: Left (0)
1320
+ input[value=""] - focus
1321
+ input[value=""] - focusin
1322
+ input[value=""] - pointerup
1323
+ input[value=""] - mouseup: Left (0)
1324
+ input[value=""] - click: Left (0)
1325
+ input[value=""] - keydown: 2 (50)
1326
+ input[value=""] - keypress: 2 (50)
1327
+ input[value=""] - keyup: 2 (50)
1328
+ input[value=""] - keydown: 4 (52)
1329
+ input[value=""] - keypress: 4 (52)
1330
+ input[value=""] - keyup: 4 (52)
1331
+ input[value=""] - keydown: : (58)
1332
+ input[value=""] - keypress: : (58)
1333
+ input[value=""] - keyup: : (58)
1334
+ input[value=""] - keydown: 5 (53)
1335
+ input[value=""] - keypress: 5 (53)
1336
+ input[value="23:05"] - input
1337
+ "{CURSOR}" -> "{CURSOR}23:05"
1338
+ input[value="23:05"] - change
1339
+ input[value="23:05"] - keyup: 5 (53)
1340
+ input[value="23:05"] - keydown: 2 (50)
1341
+ input[value="23:05"] - keypress: 2 (50)
1342
+ input[value="23:52"] - input
1343
+ "{CURSOR}23:05" -> "{CURSOR}23:52"
1344
+ input[value="23:52"] - change
1345
+ input[value="23:52"] - keyup: 2 (50)
1346
+ ` )
1347
+
1348
+ expect ( element . value ) . toBe ( '23:52' )
1349
+ } )
1350
+
1351
+ test ( 'can type two digits in the hours section, bigger than 24 and less than 30, and it shows the hours as 23' , ( ) => {
1352
+ const { element, getEventSnapshot} = setup ( '<input type="time" />' )
1353
+ userEvent . type ( element , '27:52' )
1354
+
1355
+ expect ( getEventSnapshot ( ) ) . toMatchInlineSnapshot ( `
1356
+ Events fired on: input[value="23:52"]
1357
+
1358
+ input[value=""] - pointerover
1359
+ input[value=""] - pointerenter
1360
+ input[value=""] - mouseover: Left (0)
1361
+ input[value=""] - mouseenter: Left (0)
1362
+ input[value=""] - pointermove
1363
+ input[value=""] - mousemove: Left (0)
1364
+ input[value=""] - pointerdown
1365
+ input[value=""] - mousedown: Left (0)
1366
+ input[value=""] - focus
1367
+ input[value=""] - focusin
1368
+ input[value=""] - pointerup
1369
+ input[value=""] - mouseup: Left (0)
1370
+ input[value=""] - click: Left (0)
1371
+ input[value=""] - keydown: 2 (50)
1372
+ input[value=""] - keypress: 2 (50)
1373
+ input[value=""] - keyup: 2 (50)
1374
+ input[value=""] - keydown: 7 (55)
1375
+ input[value=""] - keypress: 7 (55)
1376
+ input[value=""] - keyup: 7 (55)
1377
+ input[value=""] - keydown: : (58)
1378
+ input[value=""] - keypress: : (58)
1379
+ input[value=""] - keyup: : (58)
1380
+ input[value=""] - keydown: 5 (53)
1381
+ input[value=""] - keypress: 5 (53)
1382
+ input[value="23:05"] - input
1383
+ "{CURSOR}" -> "{CURSOR}23:05"
1384
+ input[value="23:05"] - change
1385
+ input[value="23:05"] - keyup: 5 (53)
1386
+ input[value="23:05"] - keydown: 2 (50)
1387
+ input[value="23:05"] - keypress: 2 (50)
1388
+ input[value="23:52"] - input
1389
+ "{CURSOR}23:05" -> "{CURSOR}23:52"
1390
+ input[value="23:52"] - change
1391
+ input[value="23:52"] - keyup: 2 (50)
1392
+ ` )
1393
+
1394
+ expect ( element . value ) . toBe ( '23:52' )
1395
+ } )
0 commit comments