diff --git a/src/__tests__/react/keyboard.tsx b/src/__tests__/react/keyboard.tsx
new file mode 100644
index 00000000..29f8df22
--- /dev/null
+++ b/src/__tests__/react/keyboard.tsx
@@ -0,0 +1,21 @@
+import React, { useState } from 'react'
+import { render, screen } from '@testing-library/react'
+import userEvent from 'index'
+
+test('maintain cursor position on controlled input', () => {
+ function Input({initialValue}: {initialValue: string}) {
+ const [val, setVal] = useState(initialValue)
+
+ return setVal(e.target.value)}/>
+ }
+
+ render()
+
+ ;screen.getByRole('textbox').focus()
+ ;(screen.getByRole('textbox') as HTMLInputElement).setSelectionRange(1,1)
+ userEvent.keyboard('b')
+
+ expect(screen.getByRole('textbox')).toHaveValue('abcd')
+ expect(screen.getByRole('textbox')).toHaveProperty('selectionStart', 2)
+ expect(screen.getByRole('textbox')).toHaveProperty('selectionEnd', 2)
+})