@@ -204,6 +204,76 @@ test('types into the input', () => {
204
204
})
205
205
```
206
206
207
+ ### `keyboard(text, options)`
208
+
209
+ Simulates the keyboard events described by `text`. This is similar to
210
+ `userEvent.type()` but without any clicking or changing the selection range.
211
+
212
+ > You should use `userEvent.keyboard` if you want to just simulate pressing
213
+ > buttons on the keyboard. You should use `userEvent.type` if you just want to
214
+ > conveniently insert some text into an input field or textarea.
215
+
216
+ Keystrokes can be described:
217
+
218
+ - Per printable character
219
+ ```js
220
+ userEvent.keyboard(' foo' ) // translates to: f, o, o
221
+ ```
222
+ The brackets `{` and `[` are used as special character and can be referenced
223
+ by doubling them.
224
+ ```js
225
+ userEvent.keyboard(' {{a [[') // translates to: {, a, [
226
+ ```
227
+ - Per
228
+ [KeyboardEvent .key ](https :// developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key)
229
+ (only supports alphanumeric values of `key `)
230
+ ```js
231
+ userEvent .keyboard ('{Shift }{f }{o }{o }' ) // translates to: Shift, f, o, o
232
+ ```
233
+ This does not keep any key pressed. So `Shift` will be lifted before pressing
234
+ `f`.
235
+ - Per
236
+ [KeyboardEvent.code](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code)
237
+ ```js
238
+ userEvent.keyboard(' [ShiftLeft][KeyF][KeyO][KeyO]' ) // translates to: Shift, f, o, o
239
+ ```
240
+ - Per legacy `userEvent.type` modifier/specialChar The modifiers like `{shift}`
241
+ (note the lowercase) will automatically be kept pressed, just like before. You
242
+ can cancel this behavior by adding a `/` to the end of the descriptor.
243
+ ```js
244
+ userEvent.keyboard(' {shift }{ctrl /}a{/shift }' ) // translates to: Shift(down), Control(down+up), a, Shift(up)
245
+ ```
246
+
247
+ Keys can be kept pressed by adding a `>` to the end of the descriptor - and
248
+ lifted by adding a `/` to the beginning of the descriptor:
249
+
250
+ ```js
251
+ userEvent.keyboard(' {Shift >}A{/Shift }' ) // translates to: Shift(down), A, Shift(up)
252
+ ```
253
+
254
+ `userEvent.keyboard` returns a keyboard state that can be used to continue
255
+ keyboard operations.
256
+
257
+ ```js
258
+ const keyboardState = userEvent.keyboard(' [ControlLeft>]' ) // keydown [ControlLeft]
259
+ // ... inspect some changes ...
260
+ userEvent.keyboard(' a' , { keyboardState }) // press [KeyA] with active ctrlKey modifier
261
+ ```
262
+
263
+ The mapping of `key` to `code` is performed by a
264
+ [default key map](https://github.com/testing-library/user-event/blob/master/src/keyboard/keyMap.ts)
265
+ portraying a "default" US-keyboard. You can provide your own local keyboard
266
+ mapping per option.
267
+
268
+ ```js
269
+ userEvent.keyboard(' ?' , { keyboardMap: myOwnLocaleKeyboardMap })
270
+ ```
271
+
272
+ > Future versions might try to interpolate the modifiers needed to reach a
273
+ > printable key on the keyboard. E.g. Automatically pressing `{Shift}` when
274
+ > CapsLock is not active and `A` is referenced. If you don' t wish this behavior,
275
+ > you can pass ` autoModify: false` when using ` userEvent.keyboard` in your code.
276
+
207
277
### ` upload(element, file, [{ clickInit, changeInit }])`
208
278
209
279
Uploads file to an ` <input>` . For uploading multiple files use ` <input>` with
0 commit comments